n8n 中的 RAG
什么是 RAG
检索增强生成(RAG)1将语言模型与外部数据源结合,以改善 AI 的回答。RAG 系统不只依赖模型内部的训练数据,还会检索相关文档,使回答以最新、特定领域或专有知识为依据2。RAG 工作流通常依赖向量存储来高效管理和搜索这些外部数据。
什么是向量存储?
向量存储3是一种专门用于存储和搜索高维向量的数据库,向量可以表示文本、图片或其他数据。上传文档后,向量存储会将其拆分为片段,并通过嵌入模型4将各片段转换为向量。
你可以通过相似度搜索查询这些向量,搜索结果依据的是语义,而非关键词匹配。因此,向量存储是 RAG 及其他需要检索大量知识并据此推理的 AI 系统的重要基础。
如何在 n8n 中使用 RAG
从 RAG 模板开始
👉 使用 RAG 入门模板,体验 n8n 中的 RAG。模板包含两个现成工作流:一个用于上传文件,另一个用于查询文件。
向向量存储中插入数据
智能体访问自定义知识前,需要先将数据上传到向量存储:
- 添加获取源数据所需的节点。
- 插入一个 **Vector Store(向量存储)**节点,例如 Simple Vector Store,选择 **Insert Documents(插入文档)**操作。
- 选择嵌入模型,将文本转换为向量嵌入。有关选择合适的嵌入模型,请参阅常见问题。
- 添加 Default Data Loader 节点,将内容拆分为片段。可以使用默认设置,或自行定义分块策略:
- Character Text Splitter(字符文本分割器):按字符长度拆分。
- Recursive Character Text Splitter(递归字符文本分割器):根据 Markdown、HTML、代码块或普通字符递归拆分,推荐用于大多数场景。
- Token Text Splitter(Token 文本分割器):按 token 数量拆分。
- (可选)为每个片段添加元数据,丰富上下文,便于后续筛选。
查询数据
主要有两种查询方式:使用智能体,或直接通过节点查询。
使用智能体
- 在工作流中添加一个智能体。
- 将向量存储作为工具添加,并填写说明,帮助智能体判断何时使用:
- 设置 limit(数量限制),指定返回的片段数量。
- 启用 Include Metadata(包含元数据),为每个片段提供更多上下文。
- 添加与插入数据时相同的嵌入模型。
实用技巧
为减少高价模型消耗的 token,可以先通过 Vector Store Question Answer 工具检索相关数据,再将结果传递给 Agent。具体做法请参阅此模板。
直接使用节点
- 将向量存储节点添加到画布,选择 **Get Many(获取多条)**操作。
- 输入查询或提示词:
- 设置 limit(数量限制),指定返回的片段数量。
- 按需启用 Include Metadata(包含元数据)。
常见问题
如何选择合适的嵌入模型?
合适的嵌入模型因场景而异。
一般来说,较小的模型,例如 text-embedding-ada-002,速度更快、成本更低,适用于简短的通用文档或轻量 RAG 工作流。较大的模型,例如 text-embedding-3-large,语义理解能力更强,适用于长文档、复杂主题或对准确性要求高的场景。
我的场景适合哪种文本分块方式?
这同样很大程度上取决于数据:
- 较小的片段,例如 200 到 500 个 token,适合精细检索。
- 较大的片段可以保留更多上下文,但信息可能被稀释或混入噪声。
合适的片段重叠大小有助于 AI 理解片段上下文。这也是为什么使用 Markdown 或代码块拆分,往往能改善分块效果。
另一种好方法是为片段补充更多上下文,例如其来源文档的信息。想进一步了解,可以参阅 Anthropic 的这篇文章。