Skip to content

n8n 中的 RAG#

什么是 RAG#

检索增强生成(RAG)是一种通过将语言模型与外部数据源相结合来改进 AI 响应的技术。RAG 系统不仅仅依赖模型的内部训练数据,还会检索相关文档来基于最新、特定领域或专有知识进行响应。RAG 工作流通常依赖向量存储来高效管理和搜索这些外部数据。

什么是向量存储?#

向量存储是一种专门设计用于存储和搜索高维向量的特殊数据库:这些向量是文本、图像或其他数据的数值表示。当您上传文档时,向量存储会将其分割成块,并使用嵌入模型将每个块转换为向量。

您可以使用相似性搜索来查询这些向量,相似性搜索根据语义含义而非关键词匹配来构建结果。这使得向量存储成为 RAG 和其他需要检索和推理大量知识集的 AI 系统的强大基础。

如何在 n8n 中使用 RAG#

从 RAG 模板开始

👉 通过 RAG 入门模板在 n8n 中试用 RAG。该模板包含两个现成的工作流:一个用于上传文件,另一个用于查询文件。

将数据插入向量存储#

在您的代理能够访问自定义知识之前,您需要将这些数据上传到向量存储:

  1. 添加获取源数据所需的节点。
  2. 插入 Vector Store 节点(例如 Simple Vector Store)并选择 Insert Documents 操作。
  3. 选择一个Embedding Model,它将您的文本转换为向量嵌入。有关更多信息,请参阅常见问题中的如何选择正确的嵌入模型
  4. 添加 Default Data Loader 节点,它将您的内容分割成块。您可以使用默认设置或定义自己的分块策略:
    • Character Text Splitter: 按字符长度分割。
    • Recursive Character Text Splitter: 递归地按 Markdown、HTML、代码块或简单字符分割(推荐用于大多数用例)。
    • Token Text Splitter: 按 token 数量分割。
  5. (可选)为每个块添加metadata,以丰富上下文并允许更好的后续过滤。

查询您的数据#

您可以通过两种主要方式查询数据:使用代理或直接通过节点。

使用代理#

  1. 在您的工作流中添加一个代理
  2. 将向量存储添加为Tool并为其提供Description,以帮助代理了解何时使用它:
    • 设置 limit 以定义返回多少个块。
    • 启用 Include Metadata 为每个块提供额外上下文。
  3. 添加您插入数据时使用的相同Embedding Model

专业提示

为了在昂贵的模型上节省 token,您可以首先使用 Vector Store Question Answer tool 检索相关数据,然后再将结果传递给代理。要了解实际操作,请查看此模板

直接使用节点#

  1. 将您的向量存储节点添加到画布并选择 Get Many 操作。
  2. 输入查询或提示:
    • 设置 limit 以确定返回多少个块。
    • 如果需要,启用 Include Metadata

常见问题#

如何选择正确的嵌入模型?#

正确的嵌入模型因情况而异。

一般来说,较小的模型(例如,text-embedding-ada-002)更快、更便宜,因此非常适合短小的通用文档或轻量级 RAG 工作流。较大的模型(例如,text-embedding-3-large)提供更好的语义理解。这些最适合长文档、复杂主题或对准确性要求很高的情况。

什么是适合我用例的最佳文本分割方式?#

这同样很大程度上取决于您的数据:

  • 小块(例如,200 到 500 个 token)有利于细粒度检索。
  • 大块可能携带更多上下文,但可能变得稀释或嘈杂。

使用正确的重叠大小对于 AI 理解块的上下文很重要。这也是为什么使用 Markdown 或代码块分割通常有助于使块更好的原因。

另一个好方法是为其添加更多上下文(例如,关于块来源的文档)。如果您想了解更多,可以查看 Anthropic 的这篇优秀文章