RAG:AI 大模型联合向量数据库和 Llama-index,助力检索增强生成技术
![RAG:AI大模型联合向量数据库和 Llama-index,助力检索增强生成技术](https://static001.geekbang.org/infoq/7e/7eab2f49358cb97678d8c8b97ca6bf87.png)
RAG:AI 大模型联合向量数据库和 Llama-index,助力检索增强生成技术
在大模型爆发的时代,快速准确地从大量数据中检索出有价值的信息变得至关重要。检索增强生成(RAG)技术,结合了传统的信息检索和最新的大语言模型(LLM),不仅能够回答复杂的查询,还能在此基础上生成信息丰富的内容。
RAG 技术的核心在于其能够将大型语言模型的生成能力与特定数据源的检索相结合。这意味着,当模型面对用户提出的问题时,它不仅依赖于自身训练时的知识,还可以实时地从外部数据源中检索相关信息,以此增强回答的准确性和丰富性。这种方法对于处理最新信息特别有效,能够有效弥补传统模型在时效性方面的不足。
这里我们将基于大模型、Milvus 向量数据库、LlamaIndex 大模型应用框架,与大家一起完成 RAG 系统的搭建。本文将以 Yuan2.0 最新发布的 Februa 模型为例进行测试验证,用更小规模的模型达到更好的效果。
1.RAG 系统架构
RAG(检索增强生成) 就是通过检索获取相关的知识并将其融入 Prompt,让大模型能够参考相应的知识从而给出合理回答。因此,可以将 RAG 的核心理解为 “检索 + 生成”,前者主要是利用向量数据库的高效存储和检索能力,召回目标知识;后者则是利用大模型和 Prompt 工程,将召回的知识合理利用,生成目标答案。
![](https://static001.geekbang.org/infoq/b7/b7af77ab8fcdc44b3d6ee8fe1d88449a.png)
从 RAG 系统的运行流程我们可以看到,整个 RAG 系统可以分解为三个核心部件:
向量数据库
:用来存放向量化之后的知识库,并提供向量检索能力,为 RAG 系统实现对知识的初步检索。这里我们采用 Milvus 向量数据库来实现知识的存储和初筛。它通常被用来存储、索引和管理由深度神经网络和其他机器学习(ML)模型生成的大规模嵌入向量。作为一个专门设计用于处理输入向量查询的数据库,Milvus 能够处理万亿级别的向量索引。与现有的关系型数据库主要处理遵循预定义模式的结构化数据不同,Milvus 从底层设计用于处理从非结构化数据转换而来的嵌入向量。语言大模型(LLM)
:用来实现基于检索到的知识的推理和答案生成。这里我们将采用浪潮最新发布的 Yuan2.0 大模型来实现答案生成。从官方公布的资料来看,Yuan2.0 是在 Yuan1.0 的基础上,利用更多样的高质量预训练数据和指令微调数据集,令模型在语义、数学、推理、代码、知识等不同方面具备更强的理解能力。Yuan2.0 包含了 2B、51B、102B 不同参数量的系列模型。根据官方公布的资料显示,今年 3 月最新发布的 Yuan2-2B-Februa 在数学推理、代码生成等任务上的精度均取得了明显提升。为了部署方便,我们将采用 Yuan2-2B-Februa 来构建 RAG 系统的 LLM 模块。关于 Yuan2.0 模型的详细介绍请参考:Yuan2.0 Github问答推理框架
:问答推理框架主要用来实现 RAG 系统的问答逻辑。它接收用户的提问输入,并根据输入向向量数据库发起索引请求,将得到的索引结果与问题结合,形成新的提示词(prompt),并将提示词提交给 LLM,最后将 LLM 生成的结果返回给用户。这里我们将采用 LlamaIndex 工具来实现这个框架。其主要由 3 部分组成:数据连接。首先将数据能读取进来,这样才能挖掘。
索引构建。要查询外部数据,就必须先构建可以查询的索引,LlamdaIndex 将数据存储在 Node 中,并基于 Node 构建索引。索引类型包括向量索引、列表索引、树形索引等;
查询接口。通过这些接口用户可以先基于索引进行检索,再将检索结果和之前的输入 Prompt 进行组合形成新的扩充 Prompt,对话大模型并拿到结果进行解析。
2.部署教程
2.1 流程图
以 Yuan2-2B-Februa 大模型为例,RAG 实践流程图如下所示:
![](https://static001.geekbang.org/infoq/67/67acf330bb8c194b6fd69ce8ed571822.png)
Yuan2.0-2B 大模型 RAG 实践包括以下步骤:
Step 1: 向量数据库的安装,以及知识的填充;详细安装过程参见后续章节;
Step 2:Llama_index 的安装;详细安装过程参见后续章节;
Step 3:Llama_index 中设置 data_loader 模块,可以直接从向量数据库中查询;
Step 4:根据用户输入进行向量检索,将检索结果与 Input 合并,形成新的 prompt;
Step 5:加载 Yuan2.0-2B 大模型;合并后的 prompt 作为输入,传递给大模型,大模型将结果输出返回;
2.2 向量数据库安装以及知识填充
向量数据库安装步骤如下:
这里我们以 txt 文本为例,演示如何将知识库导入到数据库中。在任意目录下新建一个 python 脚本 milvus.py,输入以下代码:
上述代码首先导入 python 连接 milvus 所需的库,然后通过 connections.connect("default", host="localhost", port="19530") 指定使用本地的 19530 端口建立数据库连接。其中 knowledge.txt 就是我们的知识库内容,这个文件放在与 milvus.py 脚本相同的目录下。如果用户的知识库在其他路径存放,修改 with open('knowledge.txt', 'r') 中的路径即可。
knowledge.txt 的初始样例中每行代表一条知识。其中一条数据样例如下,稍后将基于这条知识进行实验验证。
2.3 Llama_index 安装以及设置安装 Llama-index1
设置 data_loader 加载,从 Milvus 中获取知识, 具体源码可参考 yuan.py 文件。
2.4 Prompt 合并
说明:
context_str 是知识库中查询到的结果;
query_str 为用户输入的问题;
具体情况如下:1
3.5 Yuan 大模型下载以及推理试用安装
Yuan2.0 模型是浪潮信息发布的新一代基础语言大模型。我们开源了全部的 3 个模型:Yuan2.0-102B、Yuan2.0-51B、Yuan2.0-2B。提供预训练、微调、推理服务的相关脚本,以供研发人员做进一步开发。Yuan2.0 是在 Yuan1.0 的基础上,利用更多样的高质量预训练数据和指令微调数据集,令模型在语义、数学、推理、代码、知识等不同方面具备更强的理解能力。
提供了 Yuan2.0 的模型文件,可以通过以下链接进行下载:
Yuan2.0-102B-hf | 序列长度:4K
ModelScope:https://modelscope.cn/models/YuanLLM/Yuan2.0-102B-hf/summary
HuggingFace:https://huggingface.co/IEITYuan/Yuan2-102B-hf
OpenXlab:https://openxlab.org.cn/models/detail/YuanLLM/Yuan2-102B-hf
百度网盘:https://pan.baidu.com/s/1O4GkPSTPu5nwHk4v9byt7A?pwd=pq74
WiseModel:https://www.wisemodel.cn/models/IEIT-Yuan/Yuan2-102B-hf
Yuan 2.0-51B-hf | 序列长度:4K
ModelScopehttps://modelscope.cn/models/YuanLLM/Yuan2.0-51B-hf/summary* HuggingFacehttps://huggingface.co/IEITYuan/Yuan2.0-51B-hf
OpenXlabhttps://openxlab.org.cn/models/detail/YuanLLM/Yuan2-51B-hf
百度网盘https://pan.baidu.com/s/1-qw30ZuyrMfraFtkLgDg0A?pwd=v2nd
WiseModelhttps://www.wisemodel.cn/models/IEIT-Yuan/Yuan2-51B-hf
更多内容见:https://modelscope.cn/headlines/article/373
![](https://static001.geekbang.org/infoq/ac/acebaee3f7e776699fccf8e34295ca5c.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
运行以下代码可以进行简单的推理效果试用:
3.案例测试
利用 Yuan2.0 大模型,联合向量数据和 Llama_index,对比用户同一个问题的输出结果,验证方案的可行性。
用户输入问题:"介绍一下广州大学",使用检索增强生成技术之前的模型回答效果,该结果可以直接使用 Yuan2-2B-Februa 模型进行推理复现:
使用检索增强生成技术之后的模型回答效果,运行完整代码,可以复现该结果:
对比发现:添加知识库之后,大模型的回答学到了 “国家“111 计划” 建设的高校“的新知识。
4.总结
利用 Yuan 大模型、向量数据库和 LlamaIndex 助力大模型检索增强生成技术,为 NLP 领域开辟了一个可能性领域。这个管道不仅可以理解和生成文本,而且还利用庞大的信息数据库来增强其响应,使其在聊天机器人、推荐系统等各种应用程序中具有难以置信的强大功能。
然而,旅程并没有就此结束。NLP 的世界正在迅速发展,保持最新趋势和技术的更新至关重要。这里讨论的实现是进入更广泛、更复杂的语言理解和生成世界的垫脚石。不断试验,不断学习,最重要的是不断创新。
5. 附完整代码
完整代码文件 yuan.py 内容如下:
更多优质内容请关注公号:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。
版权声明: 本文为 InfoQ 作者【汀丶人工智能】的原创文章。
原文链接:【http://xie.infoq.cn/article/b88ad1b6b8761e4614f1f60ab】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论