AI系列:大语言模型的RAG(检索增强生成)技术(下)-- 使用LlamaIndex

目录

  • 前言
  • 什么是LlamaIndex?
  • LlamaIndex代码
    • 设置embedding模型
    • 设置LLM模型
    • 索引
    • 查询机
  • 验证
  • 使用感受
  • 参考资料

前言

继上一篇文章AI系列:大语言模型的RAG(检索增强生成)技术(上),这篇文章主要以LlamaIndex为案例来实现RAG技术。如对背景知识感兴趣,请移步大语言模型的RAG(检索增强生成)技术(上)。

什么是LlamaIndex?

从LlamaIndex官网,可以找到如下的介绍:

LlamaIndex is a framework for building context-augmented LLM applications.
LlamaIndex provides tooling to enable context augmentation. A popular example is Retrieval-Augmented Generation (RAG) which combines context with LLMs at inference time. Another is
finetuning.
翻译成中文:
如LlamaIndex 是一个用于构建上下文增强型大型语言模型(LLM)应用的框架。
LlamaIndex 提供了工具来实现上下文增强。一个流行的例子是检索增强生成(RAG),它在推理时将上下文与大型语言模型结合起来。另一个例子是微调(finetuning)。

LlamaIndex为实现RAG技术提供了很多工具,详细信息可以参考官网。这里列出了一种实现方式,跟下方的代码示例相匹配,图示如下:

Reader
阅读器
Retriever
检索器

生成
Documents
pdf等资料
Index
向量索引
Embedding Model
嵌入模型
query
问题查询
queryEngine
查询器
LLM
大语言模型

LlamaIndex代码

本部分代码参考了LlamaIndex官网的RAG Starter Tutorial (OpenAI) 和Starter Tutorial (Local Models)等文档。

RAG Starter Tutorial (OpenAI) 中提到了一个使用OpenAI服务的例子,只需5行代码即可实现RAG。
如果使用OpenAI服务,则可以跳过下方embedding模型和LLM模型的设置,配好OPENAI_API_KEY环境变量即可。

设置embedding模型

因为没有OpenAI的token,采用HuggingFace服务器上的北京智源bge-small-en-v1.5作为嵌入模型。

from llama_index.core import Settings
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5")

设置LLM模型

对于大型语言模型(LLM),我使用的是本地运行的Ollama服务器上的gemma:2b模型。由于我的个人笔记本配置较低(M1芯片,8G内存),我只能运行参数最低的模型。尽管如此,这并不影响我们演示RAG流程的基本原理:

from llama_index.llms.ollama import Ollama
gemma_2b = Ollama(model="gemma:2b", request_timeout=30.0)
Settings.llm = gemma_2b

LlamaIndex官网也提供了使用Hugging Face模型(本地及远程)及其他类型模型的代码示例,参见Hugging face LLMs。

索引

这部分代码参考了官网RAG Starter Tutorial (OpenAI) 中的例子。不同的是,我使用的是本地硬盘上的一篇介绍llama2的pdf文档,之后我会做关于llama2的提问。

这里包括嵌入向量索引的创建和持久化。如果去掉持久化这个非必需的部分,其实只需要两行代码。

PERSIST_DIR = "./storage"
if not os.path.exists(PERSIST_DIR):documents = SimpleDirectoryReader("./articles").load_data()# store docs into vector DB 将文档切块,计算嵌入向量,并索引index = VectorStoreIndex.from_documents(documents)# store it for later 持久化数据到本地磁盘index.storage_context.persist(persist_dir=PERSIST_DIR)
else:# load the existing index 直接读取本地磁盘数据到索引中storage_context = StorageContext.from_defaults(persist_dir=PERSIST_DIR)index = load_index_from_storage(storage_context)

查询机

LlamaIndex提供了query engine,它可以通过retriever检索到index索引中语义相近的文档,与初始问题合并提供给大语言模型。
这里也只需要两行代码。

# 
query_engine = index.as_query_engine()
response = query_engine.query("Is there Llama 2 70B?")
print(response) 

如果你想获得更大的灵活性,也可以显示的定义retriever检索器。

验证

提问:

Is there Llama 2 70B?

gemma:2b大模型实在是个玩具,只能提问这样简单的问题。复杂点的问题它回答的乱七八糟。

执行程序,gemma:2b基于检索获得的增强上下文,回答正确:

Yes, Llama2 70B is mentioned in the context information. It is a large language model that outperforms all open-source models.
在这里插入图片描述

如果不使用上述程序,而直接提问它相同的问题,得到的答案则是无法回答相关问题:

I am unable to access external sources or provide real-time information, therefore I cannot answer this question.
在这里插入图片描述

使用感受

LlamaIndex使得RAG的实现变得简单。它的结构看起来非常简洁和优雅。
但是实际生产中可能涉及到的细节则很多,比如切块的粒度,检索的各种特性,提示语的自定义,等等。很多在Llama index是支持的,但使用效果有待验证。
LlamaIndex的设计理念及其发展值得持续关注。

参考资料

  • 什么是LlamaIndex?
    -https://docs.llamaindex.ai/en/stable/
  • LlamaIndex RAG Starter Tutorial (OpenAI) https://docs.llamaindex.ai/en/stable/getting_started/starter_example/
  • LlamaIndex RAG Starter Tutorial (Local Models) https://docs.llamaindex.ai/en/stable/getting_started/starter_example_local/
  • LlamaIndex query engine
    https://docs.llamaindex.ai/en/stable/module_guides/deploying/query_engine/
  • LlmaIndex [Hugging face LLMs]
    https://docs.llamaindex.ai/en/stable/examples/llm/huggingface/)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/12010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

银行业数据运营场景下的数据埋点方案

1、引言 随着金融科技的快速发展,银行业的数据运营变得日益重要。数据埋点作为数据收集的重要手段,对于银行业务的精细化运营、风险管理和产品迭代等方面起着至关重要的作用。本方案将针对银行业数据运营场景,设计一套完整的数据埋点方案&am…

【生信技能树】GEO数据挖掘全流程

R包的安装,每次做分析的时候先运行这段代码把R包都安装好了,这段代码不需要任何改动,每次分析直接运行。 options("repos""https://mirrors.ustc.edu.cn/CRAN/") if(!require("BiocManager")) install.packag…

思源笔记如何结合群晖WebDav实现云同步数据

文章目录 1. 开启群晖WebDav 服务2. 本地局域网IP同步测试3. 群晖安装Cpolar4. 配置远程同步地址5. 笔记远程同步测试6. 固定公网地址7. 配置固定远程同步地址 在数字化时代,信息的同步与共享变得尤为重要。无论是个人用户还是企业团队,都渴望能够实现跨…

创建存储过程

一、DDL与DML CREATE TABLE student (id INT PRIMARY KEY AUTO_INCREMENT,createDate DATETIME NOT NULL,userName VARCHAR(255) NOT NULL,phone VARCHAR(20) NOT NULL,age INT NOT NULL,sex ENUM(男, 女) NOT NULL,introduce TEXT ); INSERT INTO student (createDate, userN…

透明加密软件推荐:哪款实用又高效?

透明加密软件是一种专门针对文件保密需求的计算机加密工具。 其核心在于“透明”二字,意味着整个加密过程对于使用者来说是无形且无感知的。 当用户进行文件的日常操作,如打开、编辑或保存时,透明加密软件会在后台自动进行加密和解密工作&a…

Keil编程不同驱动文件引用同一个常量的处理方法

基础不牢,地动山摇,最近单片机编程又遇到一个基础问题。 我在头文件中定义了一个常量同时给两个驱动文件使用,封装的时候编译没问题,但是在main函数中引用驱动函数的时候就出现了重定义的问题,如下如所示。 解决方法很…

Windows 11 下 kafka 的安装踩坑

安装 windows系统kafka小白入门篇——下载安装,环境配置,入门代码书写(推荐) kafka在windows下安装和使用入门教程 问题1 参考链接 运行kafka集成的zookeeper时,命令:bin\windows\zookeeper-server-star…

05. 【Java教程】第一个 Java 程序

本节我们将以Windows操作系统为例,编写并执行第一个Java程序。在这之前,请确保你的操作系统上已经安装了JDK 1. 编译程序 大家可能有个疑问,为什么需要编译程序呢?计算机不能直接执行我们编写的源代码吗? 这是由于计…

CPU利用率使用教程

本文主要参考: 一文让你学到 nmon最详尽的用法 Linux性能监控命令_nmon 安装与使用 如果你是在Ubuntu上安装nmon,使用: apt install nmon安装好后,直接运行 $:nmon #运行如果是后台抓数据: -f 参数: 生成文件,文件…

python 虚拟环境多种创建方式

【一】说明介绍 (1)什么是虚拟环境 在Python中,虚拟环境(Virtual Environment)是一个独立的、隔离的Python运行环境,它拥有自己的Python解释器、第三方库和应用程序。通过创建虚拟环境,可以确…

【刷题(2)】矩阵

一、矩阵问题基础 遍历: for i in range(len(matrix[0])): for j in range(len(matrix): while 倒序遍历: for i in range(right,left,-1) 临时存储:temp w,h:len(matrix[0])-1 len(matrix)-1 left,right,top,bottom:0 len(matrix[0])-1 0 l…

Cesium 3DTileset Style 原理简析

Cesium 3DTileset Style 原理简析 应用层会看到这样的使用。那么原理是什么, 为啥写 height, 除了这个还有啥? const tileset await Cesium.Cesium3DTileset.fromUrl("../../public/tileset/building/tileset.json"); tileset.style new Cesium.Cesium3DTileSty…

HarmonyOS应用模型Stage基本介绍

文章目录 <font colorcoral> HarmonyOS应用模型概况<font colorcoral> Stage模型基本概念<font colorcoral> Stage模型UIAbiliry的生命周期<font colorcoral> Stage模型的配置文件<font colorcoral> 写在后面的话<font colorcoral>Referen…

【八大排序算法】插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序

文章目录 一、排序的相关概念二、排序类型三、排序算法实现插入排序1.直接插入排序2.希尔排序 选择排序3.简单选择排序4.堆排序 交换排序5.冒泡排序6.快速排序递归实现非递归实现 7.归并排序递归实现非递归实现 8.计数排序 四、总结 一、排序的相关概念 排序&#xff1a;根据数…

【LAMMPS学习】八、基础知识(6.5)PyLammps 教程

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

[JAVASE] 类和对象(二)

目录 一. 封装 1.1 面向对象的三大法宝 1.2 封装的基本定义与实现 二. 包 2.1 包的定义 2.2 包的作用 2.3 包的使用 2.3.1 导入类 2.3.2 导入静态方法 三. static 关键字 (重要) 3.1 static 的使用 (代码例子) 3.1.1 3.1.2 3.1.3 3.1.4 四. 总结 一. 封装 1.1 面向对象…

推荐网站(9)pixabay免费可商用的图片、视频、插画、矢量图、音乐

今天推荐一款可以免费可商用的图片、视频、插画、矢量图、音乐的资源网站&#xff0c;这里面的所以东西都是免费的&#xff0c;并且可以商用。对那些做视频剪辑的人来说帮助非常大。它里面的资源非常的丰富&#xff0c;质量也高。 比如搜索下雨 链接直达&#xff1a;https://pi…

如何安装在系统中安装make命令

文章目录 WindowsMacUbuntuCentOS/Red Hat make是系统比较基础的命令&#xff0c;一般会自己携带&#xff0c;如果没有就手动安装一下吧。 Windows 从官网下载 make.exe Make for Windows 官网首页&#xff1a;https://www.gnu.org/software/make/ 下载地址&#xff1a;htt…

IT行业的革新力量:技术进步与未来展望

在当今时代&#xff0c;信息技术&#xff08;IT&#xff09;行业无疑是全球经济的重要推动力之一。随着数字化转型的不断深入&#xff0c;IT行业的边界正在扩大&#xff0c;它不仅包括传统的软硬件开发、网络建设和运维服务&#xff0c;还涵盖了云计算、大数据、人工智能&#…