n8n 中的 RAG
什么是 RAG
检索增强生成 (RAG)是一种通过将语言模型与外部数据源相结合来改进 AI 响应的技术。RAG 系统并非仅仅依赖模型的内部训练数据,而是检索相关文档,以将响应与最新的、特定领域或专有的知识相结合。RAG 工作流程通常依赖于向量存储来高效地管理和搜索这些外部数据。什么是向量存储?
向量存储是一种特殊的数据库,用于存储和搜索高维向量:文本、图像或其他数据的数值表示。上传文档时,向量存储会将其拆分成多个块,并使用嵌入模型将每个块转换为一个向量。您可以使用相似性搜索来查询这些向量,这种搜索基于
语义而非关键字匹配来构建结果。这使得向量存储成为 RAG 和其他需要检索和推理大量知识的 AI 系统的强大基础。如何在 n8n 中使用 RAG
将数据插入到向量存储中
在您的代理可以访问自定义知识之前,您需要将该数据上传到向量存储:
- 添加获取源数据所需的节点。
- 插入一个向量存储节点(例如简单向量存储)并选择插入文档操作。
- 选择一个嵌入模型,将您的文本转换为向量嵌入。有关选择正确嵌入模型的更多信息,请参阅常见问题解答。
- 添加默认数据加载器节点,用于将内容拆分成块。您可以使用默认设置,也可以自定义分块策略:
- 字符文本拆分器:
- 按字符长度拆分。
- 递归字符文本拆分器:
- 按 Markdown、HTML、代码块或简单字符递归拆分(推荐用于大多数用例)。
- 标记文本拆分器:
- 按标记数量拆分。
- (可选)向每个块添加元数据以丰富上下文并允许以后进行更好的过滤。
查询数据
您可以通过两种主要方式查询数据:使用代理或直接通过节点。
使用代理
- 将代理添加到您的工作流程中。
- 将向量存储添加为工具并添加描述,以帮助代理了解何时使用它:
- 设置
- 限制
- 以定义返回的块数。
- 启用
- “包含元数据”
- 为每个块提供额外的上下文。
- 添加插入数据时使用的相同嵌入模型。
直接使用节点
- 将您的向量存储节点添加到画布并选择获取多个操作。
- 输入查询或提示:
- 设置
- 返回区块数量的
- 限制
- 如有需要,
- 请
- 启用“包含元数据”
常见问题解答
如何选择正确的嵌入模型?
正确的嵌入模型因情况而异。
一般来说,较小的模型(例如)速度更快、成本更低,因此非常适合处理简短的通用文档或轻量级 RAG 工作流程。较大的模型(例如)能够提供更好的语义理解。它们最适合处理长文档、复杂主题或准确性至关重要的情况。
对于我的用例来说,最好的文本分割是什么?
这又很大程度上取决于您的数据:
- 小块(例如 200 到 500 个标记)适合细粒度检索。
- 大块的信息可能承载更多的背景信息,但可能会变得稀薄或嘈杂。
使用正确的重叠大小对于 AI 理解块的上下文至关重要。这也是为什么使用 Markdown 或代码块拆分通常有助于优化块。
另一个好方法是添加更多上下文(例如,关于该块来自哪个文档)。如果你想了解更多,可以看看
Anthropic 的这篇精彩文章。