当前位置: 首页 > 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 …...

XML Group端口详解

在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...