RAG实操教程: langchain+Milvus向量数据库创建你的本地知识库

本篇文章是 Milvus 向量数据库学习的总结篇,打造自己的知识库系统。

RAG是什么

RAGretrieval-augmented-generation的缩写,翻译为中文的意思就检索增强,以基于最新,最准确的数据建立LLM的语料知识库。

LLM 有哪些痛点

我们知道 LLM的知识库是通过现有的网络公开的数据作为数据源来训练的,现在公开的很多模型他们基于的训练数据会比我们现在网络上公开的数据早很多,那自然就会产生一种问题,网络上最新的数据和知识 LLM是不知道。还有一种情况就是很多企业他们对自己的数据的安全做的很好,也就是私有化数据(这些数据是有价值的,也是企业的立足之本)。这些数据网络上肯定是不存在,那自然 LLM也是不知道的。

我们在提问LLM 对于一些不知道的知识时候,LLM 很多时候是不知道如何回答问题的。甚至会对我们的问题进行胡诌随机回答,也就是瞎说。

为什么要用 RAG

如果使用预训练好的 LLM 模型,应用在某些情景下势必会有些词不达意的问题,例如问 LLM 你个人的信息,那么它会无法回答;这种情况在企业内部也是一样,例如使用 LLM 来回答企业内部的规章条款等。

这种时候主要有三种方式来让 LLM 变得更符合你的需求:

  1. Promt Enginerring: 输入提示来指导 LLM 产生所需回应。 例如常见的 In-context Learning,通过在提示中提供上下文或范例,来形塑模型的回答方式。 例如,提供特定回答风格的示例或包含相关的情境信息,可以引导模型产生更合适的答案。

  2. Fine tuning:

    这个过程包括在特定数据集上训练 LLM,使其响应更符合特定需求。 例如,一个EDA公司会使用其内部文件 verilog code 进行 Fine tuning ,使其能够更准确地回答关于企业内部问题。 但是 Fine tuning需要代表性的数据集且量也有一定要求,且 Fine tuning 并不适合于在模型中增加全新的知识或应对那些需要快速迭代新场景的情况。

  3. RAG (Retrieval Augmented Generation) : 结合了神经语言模型和撷取系统。 撷取系统从数据库或一组文件中提取相关信息,然后由语言模型使用这些信息来生成答案。 我们可以把 RAG 想像成给模型提供一本书或者是文档、教程,让它根据特定的问题去找信息。 此方法适用于模型需要整合实时、最新或非常特定的信息非常有用。 但RAG并不适合教会模型理解广泛的信息或学习新的语言、格式。

img

目前的研究已经表明,RAG 在优化 LLM 方面,相较于其他方法具有显著的优势。

主要的优势可以体现在以下几点:

  1. RAG 通过外部知识来提高答案的准确性,有效地减少了虚假信息,使得产生的回答更加准确可信。
  2. 使用撷取技术能够识别到最新的信息(用户提供),这使得 LLM 的回答能保持及时性
  3. RAG 引用信息来源是用户可以核实答案,因此其透明透非常高,这增强了人们对模型输出结果的信任。
  4. 透过获取与特定领域数据,RAG能够为不同领域提供专业的知识支持,定制能力非常高。
  5. 安全性和隐私管理方面,RAG 通过数据库来存储知识,对数据使用有较好控制性。 相较之下,经过 Fine tuning 的模型在管理数据存取权限方面不够明确,容易外泄,这对于企业是一大问题。
  6. 由于 RAG 不需更新模型参数,因此在处理大规模数据集时,经济效率方面更具优势。

不过虽然RAG有许多优势在,但这3种方法并不是互斥的,反而是相辅相成的。 结合 RAGFine tuning ,甚至 Promt Enginerring 可以让模型能力的层次性得增强。 这种协同作用特别在特定情境下显得重要,能够将模型的效能推至最佳。 整体过程可能需要经过多次迭代和调整,才能达到最佳的成效。 这种迭代过程涵盖了对模型的持续评估和改进,以满足特定的应用需求。

RAG 实际应用的过程

如何解决上面的问题

那如何让 LLM 知道这些最新/私有的数据的知识呢❓

那就是 RAG。通过将模型建立在外部知识来源的基础上来补充回答。从而提高 LLM生成回答的质量。

在基于 LLM实现的问答系统中使用 RAG 有三方面的好处:

  • 确保 LLM 可以回答最新,最准确的内容。并且用户可以访问模型内容的来源,确保可以检查其声明的准确性并最终可信。
  • 通过将 LLM建立在一组外部的、可验证的事实数据之上,该模型将信息提取到其参数中的机会更少。这减少了 LLM 泄露敏感数据或“幻觉”不正确或误导性信息的机会。
  • RAG 还减少了用户根据新数据不断训练模型并随着数据的变化更新训练参数的需要。通过这种方式企业可以减低相关财务成本。

现在所有基础模型使用的是 transformerAI 架构。它将大量原始数据转换为其基本结构的压缩表示形式。这种原始的表示基础模型可以适应各种任务,并对标记的、特定于领域的知识进行一些额外的微调。

不过仅靠微调很少能为模型提供在不断变化的环境中回答高度具体问题所需的全部知识,并且微调的时间周期还比较长。所以科学家们提出了 RAG,让 LLM 能够访问训练数据之外的信息。RAG 允许 LLM 建立在专门的知识体系之上,以更准确的回答问题,减低幻觉的产生。

下面我将 langchain+Milvus 向量数据库创建你的本地知识库

安装 langchain

使用下面的命令可以快速安装 langchain 相关的依赖

python复制代码 
 pip install langchain
 
 pip install langchain-community # 默认安装
 
 pip install langchain-core # 默认安装
 
 pip install langchain-cli # LangChain 命令行界面
 
 pip install --upgrade --quiet pypdf # 安装pdf 加载器的依赖
 

文档加载器 pdf

在这篇文章中我们使用pdf作为我们的知识库文档。

加载文档的过程一般需要下面的步骤:

  • 解析文档(txtpdfhtmlurlxmlmarkdownjson)等等为字符串(langchain已经分装了几十种文档加载器,感兴趣的可以去参考官网)。
  • 将字符串拆分为适合模型的对话窗口的大小,称为 chunk,chunk的大小需要依据模型的会话窗口设定。
  • 保存拆分好的文档保存到向量数据库中。
  • 设计向量数据库的数据库、集合、字段,索引等信息。
  • 从向量数据库中检索需要的数据

这些步骤 langchain 已经给结合自己的工具连做好了封装,所以我们直接使用 langchain 来构建RAG

python复制代码 from langchain_text_splitters 
### 关于 Milvus 知识库文档 对于希望深入了解 Milvus 数据库及其应用的开发者而言,官方提供了一系列详尽的知识库与文档资源。这些资料不仅涵盖了安装配置指南、最佳践案例研究等内容,还包括详细的API参考手册。 #### 官方网站与GitHub仓库 访问官方网站可以获得最新版本的产品介绍以及下载链接;而在 GitHub 上则能找到源码及相关项目例[^1]。 #### SDK支持 除了核心功能外,Milvus 还提供了多款客户端SDK,包括但不限于 Python, Java 和 C++ 版本,这极大地便利了不同背景下的开发人员快速上手并集成此向量搜索引擎到各自的应用程序当中去[^2]。 #### 社区贡献和技术交流平台 积极参与社区讨论能够帮助使用者更快解决问题,并且获取更多来自其他成员的经验分享。通过加入Slack频道或是浏览Stack Overflow上的标签话题,可以找到许多用技巧和解决方案。 #### 高效RAG系统的构建示例 有关如何利用 NVIDIA 模型配合 Milvus 构建高效的检索增强生成 (Retrieval-Augmented Generation,RAG) 系统的具体方法,在某些技术博客中有详细介绍,展示了从环境搭建到最后部署上线全过程的技术细节[^3]。 ```python import milvus from nvidia import model # 建立连接前先确认服务状态良好 client = milvus.Client(host="localhost", port=19530) # 使用NVIDIA模型初始化嵌入函数 embedding_function = model.EmbeddingModel() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值