当前位置: 首页 > news >正文

《LlamaIndex 之美》-01-LLM、Prompt、Embedding基础入门

在基于数据构建任何 LLM 应用程序时,选择合适的大型语言模型 (LLM) 是您需要考虑的首要步骤之一。

LLM 是 LlamaIndex 的核心组成部分。它们可以作为独立模块使用,也可以插入到其他核心 LlamaIndex 模块(索引、检索器、查询引擎)中。

LlamaIndex 提供了一个统一的接口来定义 LLM 模块,支持对接世面上多种LLM大模型能力。

  • 支持文本完成聊天端点
  • 支持流式处理和非流式处理终结点
  • 支持同步异步端点

本Llamaindex系列文章使用的模型是阿里的灵积平台

Llamaindex 对接 QWen LLM

在Llamaindex中使用LLM很简单,在这里你可以看到目前Llamaindex已经支持的LLM类型,下面我将使用QWen模型实现一个入门案例。

  1. 安装相关依赖
# 引入灵积平台依赖
!pip install llama-index-llms-dashscope --quiet
# 加载环境变量
!pip install python-dotenv --quiet
  1. 初始化模型Client对象
from llama_index.llms.dashscope import DashScope, DashScopeGenerationModels
from dotenv import load_dotenv# 加载环境变量
load_dotenv()dashscope_llm = DashScope(model_name=DashScopeGenerationModels.QWEN_TURBO,max_tokens=1000,enable_search=False,temperature=0.2
)

关于如何使用dotenv,可以参考文章《揭秘python-dotenv:那些鲜为人知的实用窍门》

  1. 构建complete回话
# 同步输出
resp = dashscope_llm.complete("你好!")
print(resp)
  1. 构建stream会话
# 流式输出
responses = dashscope_llm.stream_complete("你好!")
for response in responses:print(response.delta, end="")
  1. 构建Chat会话
# chat 模型会话
from llama_index.core.base.llms.types import MessageRole, ChatMessagemessages = [ChatMessage(role=MessageRole.SYSTEM, content="你是一个AI智能机器人"),ChatMessage(role=MessageRole.USER, content="你好。"),
]
resp = dashscope_llm.chat(messages)
print(resp)
  1. 构建多轮会话
# 多轮对话
messages = [ChatMessage(role=MessageRole.SYSTEM, content="你是一个AI智能机器人"),ChatMessage(role=MessageRole.USER, content="你好。"),
]
# first round
resp = dashscope_llm.chat(messages)
print(resp)# add response to messages.
messages.append(ChatMessage(role=MessageRole.ASSISTANT, content=resp.message.content)
)messages.append(ChatMessage(role=MessageRole.USER, content="如何制作一个蛋糕?")
)
# second round
resp = dashscope_llm.chat(messages)
print(resp)

LLamaindex 设置Prompt

在LLamaindex中使用Prompt就像创建格式字符串一样简单,

from llama_index.core import PromptTemplatetemplate = ("我提供的上下文内容如下: \n""---------------------\n""{context_str}""\n---------------------\n""基于给出的内容,回答一下问题: {query_str}\n"
)
qa_template = PromptTemplate(template)context_str = """
重达3000吨、总长超70米、20层楼高度,又一“大国重器”成功问世!此“重器”的诞生也标志我国自研冲破西方“壁垒”。
据悉,这个形状酷似“茅台“的国器是目前世界上最大的加氢反应器,其在石油工业中的地位“媲美芯片”。
不少西方国家对于此项技术给出高价,但我们表示:100%中国制造,永不出售!
"""
query_str = "总结一下加氢反应器?"
# you can create text prompt (for completion API)
prompt = qa_template.format(context_str=context_str, query_str=query_str)
print(prompt)
# or easily convert to message prompts (for chat API)
messages = qa_template.format_messages(context_str=context_str, query_str=query_str)
print(messages)

除此之外你还可以定义Chat格式的Prompt

from llama_index.core import ChatPromptTemplate
from llama_index.core.llms import ChatMessage, MessageRolemessage_templates = [ChatMessage(content="You are an expert system.", role=MessageRole.SYSTEM),ChatMessage(content="Generate a short story about {topic}",role=MessageRole.USER,),
]
chat_template = ChatPromptTemplate(message_templates=message_templates)# you can create message prompts (for chat API)
messages = chat_template.format_messages(topic="狼来了")
print(messages)
# or easily convert to text prompt (for completion API)
prompt = chat_template.format(topic="狼来了")
print(prompt)

Llamaindex 支持 Embedding

Embedding是一种将离散数据映射到连续空间的表示方法。在自然语言处理中,Embedding技术可以将单词、句子等文本数据转化为低维向量,从而捕捉文本的语义信息。

在LlamaIndex中,嵌入用于将文本数据映射到语义空间,使得相似的文本在向量空间中靠近。这种表示方式对于语义搜索、文本分类和信息检索等任务至关重要。通过嵌入,LlamaIndex能够理解和处理文本的细微差异,从而提供更精准和个性化的服务。

LlamaIndex利用Embedding技术实现文本向量的生成,具体步骤如下:

(1)预处理:对文本进行清洗、切块等处理。

(2)构建Embedding模型:使用预训练的Embedding模型,如Word2Vec、BERT等,将文本转化为向量。

(3)向量存储与搜索:与LLM应用类似,将向量存储到向量数据库中,并进行相似度检索。

目前,LLamaindex已经支持了很多Embedding模型,你可以在这里查看,本次Embedding使用的是灵积平台中的Embedding模型。

  1. 文件内容Embedding
# imports
from llama_index.embeddings.dashscope import (DashScopeEmbedding,DashScopeTextEmbeddingModels,DashScopeTextEmbeddingType,
)# Create embeddings
# text_type=`document` to build index
embedder = DashScopeEmbedding(model_name=DashScopeTextEmbeddingModels.TEXT_EMBEDDING_V2,text_type=DashScopeTextEmbeddingType.TEXT_TYPE_DOCUMENT,
)text_to_embedding = ["风急天高猿啸哀", "渚清沙白鸟飞回", "无边落木萧萧下", "不尽长江滚滚来"]
# Call text Embedding
result_embeddings = embedder.get_text_embedding_batch(text_to_embedding)
# requests and embedding result index is correspond to.
for index, embedding in enumerate(result_embeddings):if embedding is None:  # if the correspondence request is embedding failed.print("The %s embedding failed." % text_to_embedding[index])else:print("Dimension of embeddings: %s" % len(embedding))print("Input: %s, embedding is: %s"% (text_to_embedding[index], embedding[:5]))
  1. 查询Embedding
# imports
from llama_index.embeddings.dashscope import (DashScopeEmbedding,DashScopeTextEmbeddingModels,DashScopeTextEmbeddingType,
)
# Create embeddings
# text_type=`query` to retrieve relevant context.
embedder = DashScopeEmbedding(model_name=DashScopeTextEmbeddingModels.TEXT_EMBEDDING_V2,text_type=DashScopeTextEmbeddingType.TEXT_TYPE_QUERY,  #指定对查询问题进行Embedding
)# Call text Embedding
embedding = embedder.get_text_embedding("骆驼祥子这本书讲了什么?")
print(f"Dimension of embeddings: {len(embedding)}")
print(embedding[:5])

后面的章节将会继续说明如何将向量化的内容存储到向量数据库中,以及如何对向量化结果进行Retrieval。

最后

本篇文章仅带着大家认识一下LLamaindex的LLM、Prompt以及Embedding相关功能,实际上你会发现LLamaindex的能力和Langchain是非常相似的,甚至LLamaindex可以和Langchain一起使用。

后面咱们会着重研究一下基于LLamaindex搭建使用RAG增强的ChatBot,以及相关的组件能力。

相关文章:

《LlamaIndex 之美》-01-LLM、Prompt、Embedding基础入门

在基于数据构建任何 LLM 应用程序时,选择合适的大型语言模型 (LLM) 是您需要考虑的首要步骤之一。 LLM 是 LlamaIndex 的核心组成部分。它们可以作为独立模块使用,也可以插入到其他核心 LlamaIndex 模块(索引、检索器…...

C++ 智能指针简单介绍及用法

C 智能指针简单介绍及用法 智能指针是 C11 引入的一个非常实用的特性,旨在自动管理动态分配的内存,避免内存泄漏和悬空指针问题。主要有三种类型的智能指针:std::unique_ptr、std::shared_ptr 和 std::weak_ptr。下面是对它们的详细介绍&…...

k8s笔记之创建Istio Gateway规则

创建Istio Gateway 背景如何创建Istio Gateway规则配置方式rewrite重写路径直接去除match,默认都转发到一个服务路由规则多种配置方式实践(即开头的完整版) 涉及的命令补充注意事项 背景 为什么需要使用到Istio Gateway?充当k8s服…...

NAND行业回归盈利:AI与云存储需求驱动

市场概览 根据Yole Group于2024年6月25日发布的市场报告,经过五个季度的亏损之后,NAND闪存行业在2024年第一季度(1Q24)实现了盈利回归。这一转变主要得益于企业级固态硬盘(SSD)领域的强劲需求增长&#xf…...

【限免】频控阵雷达:概念、原理与应用【附MATLAB代码】

​微信公众号:EW Frontier QQ交流群:949444104 主要内容 PDA、FDA MATLAB代码 %---------------------------------------- %功能:FDA和相控阵天线方向图 %版本:ver1.0 %时间:2017.11.1 %--------------------------------------- clear all; clc; disp…...

从0开始搭建vue + flask 旅游景点数据分析系统( 六):搭建后端flask框架

这一期开始开发header部分,预期实现两个目标: 创建 Flask 项目导入旅游数据后端实现旅游数据的查询 1 python 环境 & 开发环境 python 安装和pycharm安装需要去网上找包,建议python使用3.8 或者3.9版本 2 新建项目 我们新建一个文件…...

学习硬件测试04:触摸按键+PWM 驱动蜂鸣器+数码管(P62~P67、P71、P72)

一、触摸按键 1.1理论讲解 1.1.1实验现象 触摸按键 1 单击与长按,控制 LED1;触摸按键 2 单击与长按,控制 LED2;触摸按键 3 单击与长按,控制 LED3;触摸按键 4 单击与长按,控制继电器; 1.1.2硬件电路 是原理图上触摸…...

JS原型链

JS的原型链 文章目录 JS的原型链前言一、原型是什么?二、原型链总结 前言 在使用数组或对象中的方法时,你是不是会感觉很奇怪,为什么仅仅是创建了一个数组或是对象,就能够使用它提供的方法呢?JS是怎么做到的呢&#x…...

《Java初阶数据结构》----5.<二叉树的概念及使用>

前言 大家好,我目前在学习java。之前也学了一段时间,但是没有发布博客。时间过的真的很快。我会利用好这个暑假,来复习之前学过的内容,并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…...

git查看记录详解

文章目录 git查看记录查看文件修改列表查看修改差异友好的查看修改记录结合多个选项查看记录示例输出 git查看记录 使用 git log 你不仅可以查看提交记录,还可以通过一些选项查看文件的修改列表、修改差异,并以更友好的方式查看修改记录。以下是一些常用…...

检索增强生成RAG系列10--RAG的实际案例

讲了很多理论,最后来一篇实践作为结尾。本次案例根据阿里云的博金大模型挑战赛的题目以及数据集做一次实践。 完整代码地址:https://github.com/forever1986/finrag.git 本次实践代码有参考:https://github.com/Tongyi-EconML/FinQwen/ 目录 …...

程序员自我提升的全面指南

程序员自我提升的全面指南 1. 技术基础巩固重要性实践方法 2. 技术栈拓展重要性实践方法 3. 软技能提升重要性实践方法 4. 实践与项目经验重要性实践方法 5. 持续学习与职业规划重要性实践方法 6. 代码质量与优化重要性实践方法 7. 思维与创新能力重要性实践方法 8. 健康与心理…...

【golang】Golang手写元组 tuple | golang tuple

Golang手写元组 tuple 1、源码 如下: package tupletype Tuple[T any, U any] struct {First TSecond U }// zip combines elements of two slices into a slice of pairs (tuples), which is useful for combining related data. func Zip[T any, U any](slice…...

golang中struct的tag -简记

今天 简单整理一下,关于golang中struct的tag type User struct {UId int gorm:"column:uid;type:bigint;unique_index;not null;comment:用户id"Name string json:"name"Age int bson:"age"From string binding:"requi…...

分布式领域扩展点设计稿

分布式领域扩展点设计稿 背景坐标设计理念设计图Quick Start相关组件 背景 随着交易业务和基础知识的沉淀,愈发觉得扩展点可以在大型交易分布式架构中可以做更多的事情。 经过一个月的思考,决定将 单点领域扩展点(savior-ext) 从…...

玩转微信公众号变现:从新手到专家的全攻略

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…...

JVM: 方法调用

文章目录 一、介绍二、方法调用的原理1、静态绑定2、动态绑定(1)介绍(2)原理 一、介绍 在JVM中,一共有五个字节码指令可以执行方法调用: invokestatic: 调用静态方法。invokespecial:调用对象…...

测试面试宝典(四十一)—— 接口自动化的优缺点

接口自动化测试的优点: 1. 提高测试效率:能够快速执行大量的测试用例,节省了手动测试重复执行的时间和人力成本。 2. 尽早发现问题:可以在软件开发的早期阶段介入,有助于及时发现接口层面的缺陷,降低修复…...

“火炬科企对接”先进计算产业推进会 | 麒麟信安受邀参加,并签署开源生态合作协议

7月30日,“火炬科企对接”先进计算产业推进会在长沙隆重召开。大会由工业和信息化部火炬高技术产业开发中心、湖南省科学技术厅、湖南省工业和信息化厅、湖南湘江新区管理委员会、中国邮政储蓄银行联合举办。麒麟信安与来自国内先进计算领域的专家学者,2…...

中文网址导航模版HaoWa1.3.1/模版网站wordpress导航主题

HaoWa v1.3.1由挖主题开发的一款网址导航类主题。 HaoWA主题除主体导航列表外,对主题所需的小模块都进行了开放式的HTML编辑器形式的功能配置,同时预留出默认的代码结构,方便大家在现有的代码结构上进行功能调整。 同时加入了字体图标Font …...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...