《LlamaIndex 之美》-01-LLM、Prompt、Embedding基础入门
在基于数据构建任何 LLM 应用程序时,选择合适的大型语言模型 (LLM) 是您需要考虑的首要步骤之一。
LLM 是 LlamaIndex 的核心组成部分。它们可以作为独立模块使用,也可以插入到其他核心 LlamaIndex 模块(索引、检索器、查询引擎)中。
LlamaIndex 提供了一个统一的接口来定义 LLM 模块,支持对接世面上多种LLM大模型能力。
- 支持文本完成和聊天端点
- 支持流式处理和非流式处理终结点
- 支持同步和异步端点
本Llamaindex系列文章使用的模型是阿里的灵积平台
Llamaindex 对接 QWen LLM
在Llamaindex中使用LLM很简单,在这里你可以看到目前Llamaindex已经支持的LLM类型,下面我将使用QWen模型实现一个入门案例。
- 安装相关依赖
# 引入灵积平台依赖
!pip install llama-index-llms-dashscope --quiet
# 加载环境变量
!pip install python-dotenv --quiet
- 初始化模型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:那些鲜为人知的实用窍门》
- 构建complete回话
# 同步输出
resp = dashscope_llm.complete("你好!")
print(resp)
- 构建stream会话
# 流式输出
responses = dashscope_llm.stream_complete("你好!")
for response in responses:print(response.delta, end="")
- 构建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)
- 构建多轮会话
# 多轮对话
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模型。
- 文件内容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]))
- 查询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)领域的强劲需求增长…...
【限免】频控阵雷达:概念、原理与应用【附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] 📱…...
JVM: 方法调用
文章目录 一、介绍二、方法调用的原理1、静态绑定2、动态绑定(1)介绍(2)原理 一、介绍 在JVM中,一共有五个字节码指令可以执行方法调用: invokestatic: 调用静态方法。invokespecial:调用对象…...
测试面试宝典(四十一)—— 接口自动化的优缺点
接口自动化测试的优点: 1. 提高测试效率:能够快速执行大量的测试用例,节省了手动测试重复执行的时间和人力成本。 2. 尽早发现问题:可以在软件开发的早期阶段介入,有助于及时发现接口层面的缺陷,降低修复…...
“火炬科企对接”先进计算产业推进会 | 麒麟信安受邀参加,并签署开源生态合作协议
7月30日,“火炬科企对接”先进计算产业推进会在长沙隆重召开。大会由工业和信息化部火炬高技术产业开发中心、湖南省科学技术厅、湖南省工业和信息化厅、湖南湘江新区管理委员会、中国邮政储蓄银行联合举办。麒麟信安与来自国内先进计算领域的专家学者,2…...
中文网址导航模版HaoWa1.3.1/模版网站wordpress导航主题
HaoWa v1.3.1由挖主题开发的一款网址导航类主题。 HaoWA主题除主体导航列表外,对主题所需的小模块都进行了开放式的HTML编辑器形式的功能配置,同时预留出默认的代码结构,方便大家在现有的代码结构上进行功能调整。 同时加入了字体图标Font …...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
