入门
使用 Neuron 框架实现检索增强生成的分步指南。
检索增强生成(RAG)是在生成响应之前,向大语言模型(LLM)的训练数据源之外的知识库提供参考资料的过程。
大语言模型(LLM)基于海量数据进行训练,能够为回答问题、翻译语言和补全文字等任务生成原创输出。RAG 在无需重新训练模型的情况下,将 LLM 已经强大的能力扩展到特定领域或组织的内部知识库。
这是一种经济高效的方法,可提升 LLM 输出,使其保持相关、准确和有用,同时也能处理你自己的私有数据。
为什么 RAG 系统很重要
构建 RAG 系统是将强大的 LLM 能力用于你自己的私有数据的方式。你可以创建能够准确回答有关公司内部文档问题的应用。或者创建聊天机器人,为外部客户提供组织内部规则服务。
如果不是为了使用私有数据,你可以将 RAG 视为一种向生成式模型提供最新研究、统计数据或新闻的方式。
如何创建 RAG 系统
没有 RAG 时,LLM 会接收用户输入,并根据其训练过的信息(它已经知道的内容)生成响应。
有了 RAG,就会引入一个信息检索组件。它会先利用用户输入从新的数据源中提取信息。用户查询和检索到的相关信息都会提供给 LLM。LLM 使用这些新知识和其训练数据来生成准确的响应。以下章节将概述这一过程。
即使这看起来有点复杂,也不用担心,这只是为了让你了解这个过程。这些步骤中的大部分都会由 Neuron RAG 代理自动管理。
创建 RAG 系统最重要的有三个步骤。
处理外部数据
你想用来增强默认 LLM 知识的外部数据,可能以多种格式存在,例如文件、数据库记录或长文本。
在将这些数据提交给 LLM 之前,你必须将它们转换为一种名为“嵌入".
检索
你通过处理文档和数据生成的嵌入,需要存储在能够处理这种特定格式的专用数据库中。这些数据库称为“向量存储".
向量存储不仅能够存储这些数据,还能够执行一种特定形式的搜索:“相似性搜索”,即在数据库中现有数据与我们提供的查询之间进行匹配。
增强 LLM 提示词
接下来,RAG 代理会通过在上下文中添加相关检索数据来增强你的输入(或提示词),让 LLM 在生成响应前了解这些自定义数据。
你只需要负责第一步“处理外部数据”,Neuron 会为你提供工具包,使其变得简单。其他步骤都会由 Neuron RAG 代理自动管理。
监控与调试
使用 Neuron 构建的许多应用程序会包含多个步骤以及对 LLM 的多次调用。随着这些应用程序变得越来越复杂,能够检查你的代理系统内部到底发生了什么就变得至关重要。实现这一点的最佳方式是使用 Inspector.
创建 RAG 代理
要创建 RAG,你需要除 AI 提供方之外再附加一些组件,例如一个 向量存储,以及一个 嵌入提供方.
首先,让我们创建 RAG 类:
下面是一个 RAG 实现示例:
探索 数据加载器 了解如何用表示你想作为附加知识集成的信息的嵌入来填充向量存储。
与聊天机器人对话
想象一下,你之前已经用要连接到 RAG 代理的知识库填充了向量存储,现在你想提问。查看 数据加载器 以了解 RAG 数据填充。
要开始执行 RAG,你调用 chat() 方法中传入你的偏好来定制获取搜索结果的默认选项:
用文档为你的 RAG 提供数据
一旦你定义好了 RAG 系统的组件,就该用嵌入后的文本块来填充向量数据库了。
Neuron 为你提供 数据加载器 帮助你只用几行代码搭建数据加载管道。你可以在下面看到一个示例。要进一步了解数据加载器,你应该查看 专门文档:
RAG + 工具
Neuron 的 RAG 类扩展了基础的 \NeuronAI\Agent 类。这意味着你的 RAG 始终是一个代理,你也可以在实现中附加工具并定义系统指令。
想象一下,我们要实现一个能够基于用户数据给出健身建议的代理。下面是一个完整实现示例:
在上面的示例中,我们创建了一个能够向用户提供健身建议的 RAG 代理。我们可以把你提供的特定训练知识加载到向量存储中,这样代理就拥有相关知识,能够基于当前用户通过所附工具从数据库中检索到的训练状态来提供建议。
RAG 工作流
在下图中,你可以看到 Neuron 为 RAG 应用运行的完整工作流。了解这个结构有助于你更好地理解底层执行过程,并通过中间件对系统进行挂钩:

一旦 UserMessage 进入系统,它会按以下顺序运行:
PreProcessQueryNode:运行 预处理器 流水线,例如QueryTransformationPreProcessor,以增强输入提示词。RetrieveDocumentsNode:执行 检索策略 ,从向量存储或外部数据源中获取内容PostProcessDocumentsNode:运行 后处理器 流水线,例如重排序EnrichInstructionsNode:将最终文档添加到代理的系统提示词中ChatNode:运行推理并收集 LLM 响应ToolNode:如果代理附加了工具,模型最终可以请求执行它们。
最后,RAG 会将 LLM 消息返回给你。
最后更新于