【n8n教程】:用RAG让AI Agent掌握你的知识库

你是否曾想让AI能够理解和引用你的专有文档?RAG(检索增强生成) 技术可以做到这一点。通过RAG,AI不再依赖训练数据中的知识,而是可以实时从你的知识库中检索信息。

什么是RAG?

核心概念

RAG(Retrieval-Augmented Generation) 是一种让AI更聪明的技术:

RAG解决的问题

传统AI的问题RAG如何解决
知识过时(基于旧的训练数据)实时从最新文档检索信息
无法访问专有知识(公司内部信息)可以访问你的私有文档库
容易产生幻觉(编造信息)基于真实文档生成,减少幻觉
无法解释答案来源返回引用的源文档

什么是向量存储(Vector Store)?

简单理解

向量存储是一个特殊的数据库,它做三件事:

  1. 1. 将文本转换为数字(嵌入):每句话都变成一个向量(一列数字)
  2. 2. 存储这些数字:像档案库一样整理存储
  3. 3. 快速检索相似内容:根据语义相似性(而非关键词)找到相关信息

工作原理示例


    
    
    
  你的文档:
"公司提供健康保险"
"员工享受年假"

向量化后(简化示例):
向量1: [0.12, 0.85, 0.33, ...]
向量2: [0.14, 0.82, 0.35, ...]

用户问题:"假期政策是什么?"
问题向量: [0.15, 0.83, 0.34, ...]  ← 与向量2最相似!
↓ 检索出 → "员工享受年假"

为什么向量存储比关键词搜索更聪明

例子:


n8n中实现RAG的5个关键步骤

步骤1️⃣:连接数据源

在n8n中,首先需要连接你的知识源:

支持的数据源:

n8n节点选择:


    
    
    
  文件上传 → Google Drive → 数据库查询 → HTTP请求

步骤2️⃣:分割文本(Text Splitting)

大文档需要分割成小块。n8n提供三种方式:

方式特点适用场景
字符分割按固定字符数分割结构简单的纯文本
递归分割按Markdown/代码块/HTML结构分割📌 推荐:适合大多数文档
Token分割按Token数分割精确控制API成本

最佳实践:

步骤3️⃣:生成嵌入(Embeddings)

将文本转换为计算机能理解的向量。选择合适的模型是关键:

模型维度速度成本最适用
text-embedding-ada-0021536⚡⚡⚡ 最快💰 最便宜简短文本、原型、成本敏感
text-embedding-3-large3072⚡ 较慢💰💰 较贵长文档、复杂主题、高精度需求
开源模型(如all-MiniLM-L6-v2384⚡⚡⚡ 很快💰 免费本地部署、无成本

如何选择:


    
    
    
  项目规模 → 文档类型 → 预算
  ↓         ↓         ↓
 小规模  + 短文本  + 有限 → ada-002
 大规模  + 长文本  + 充足 → 3-large
 本地    + 任何   + 无成本 → 开源模型

步骤4️⃣:存储到向量库

选择合适的向量存储解决方案:

存储方案特点成本最适用
Simple Vector Store内存存储,快速原型,n8n内置🆓 免费学习、小规模演示
Pinecone托管云服务,完全可扩展,持久化💰 按使用量计费生产环境、企业应用
Qdrant开源、功能完整、可自建🆓 开源免费隐私敏感、自主控制
Milvus开源向量数据库,高性能🆓 开源免费大规模数据、学术研究

步骤5️⃣:查询和生成答案

用户提问时的完整流程:

  1. 1. 用户输入问题 → "我如何请假?"
  2. 2. 问题转换为向量 → 生成问题的嵌入
  3. 3. 向量库相似性搜索 → 找到最相关的5条文档
  4. 4. 准备上下文 → 将检索结果组织成提示词
  5. 5. LLM生成答案 → "根据公司政策,年假为..."
  6. 6. 返回答案 → 可选:附带源文档

实践案例:构建你的第一个RAG系统

工作流架构概览


    
    
    
  ┌─────────────┐
│  文档上传   │
│ (PDF/TXT)   │
└──────┬──────┘
       ↓
┌──────────────────┐
│  文本分割        │
│(递归分割: 500t)  │
└──────┬───────────┘
       ↓
┌──────────────────┐
│  生成嵌入        │
│ (OpenAI API)     │
└──────┬───────────┘
       ↓
┌──────────────────┐      用户问题
│  向量存储        │        ↓
│(Simple/Pinecone)│  ┌─────────────┐
└──────┬───────────┘  │ 问题向量化  │
       │              └─────┬───────┘
       └──────→  搜索  ←────┘
               ↓
        ┌──────────────┐
        │ 相似性搜索   │
        │ (返回Top 5)  │
        └──────┬───────┘
               ↓
        ┌──────────────────┐
        │ LLM生成答案      │
        │ (基于检索结果)   │
        └──────┬───────────┘
               ↓
        ┌──────────────────┐
        │  返回结果        │
        │ (答案+源文档)    │
        └──────────────────┘

实际操作:5分钟快速开始

第1分钟:新建工作流

  1. 1. 打开n8n → 点击 + 新建工作流
  2. 2. 命名为"我的RAG助手"

第2分钟:添加触发器

  1. 1. 在canvas上搜索 Webhook 节点
  2. 2. 配置:
    • • 方法:POST
    • • 路径:rag

第3分钟:添加向量存储

  1. 1. 添加 Simple Vector Store 节点
  2. 2. 操作模式:插入文档
  3. 3. 配置:
    
        
        
        
      嵌入模型:OpenAI text-embedding-ada-002
    文本分割器:递归字符分割
    块大小:500
    块重叠:100

第4分钟:添加LLM

  1. 1. 添加 Chat Model / OpenAI 节点
  2. 2. 配置系统提示词:
    
        
        
        
      "你是公司知识库助手。
    根据提供的文档内容回答问题。
    如果文档中没有答案,说明你无法从文档找到相关信息。"

第5分钟:测试

  1. 1. 点击 测试工作流执行
  2. 2. 上传一份PDF或文本文档
  3. 3. 提出问题并查看AI的答案

完整可执行工作流代码

将以下JSON代码复制到n8n中:

导入方法:

  1. 1. 在n8n菜单 → 选择 ... (三个点)
  2. 2. 选择 导入文件 或在canvas上按 Ctrl+V 粘贴以下代码

    
    
    
  {
  "nodes"
: [
    {

      "parameters"
: {
        "httpMethod"
: "POST",
        "path"
: "chat",
        "responseMode"
: "responseNode",
        "authentication"
: "none"
      }
,
      "id"
: "webhook_trigger",
      "name"
: "Chat Webhook",
      "type"
: "n8n-nodes-base.webhook",
      "typeVersion"
: 2,
      "position"
: [50, 300]
    }
,
    {

      "parameters"
: {
        "operation"
: "insertDocuments",
        "memoryKey"
: "rag_knowledge_base",
        "dataLoader"
: "default",
        "textSplitter"
: "recursiveCharacter",
        "chunkSize"
: 500,
        "chunkOverlap"
: 100
      }
,
      "id"
: "vector_store",
      "name"
: "Vector Store - Insert",
      "type"
: "n8n-nodes-langchain.vectorStoreLancedb",
      "typeVersion"
: 1,
      "position"
: [300, 300],
      "credentials"
: {
        "openAIApi"
: "openai_api_key"
      }

    }
,
    {

      "parameters"
: {
        "operation"
: "getMany",
        "query"
: "={{ $json.question }}",
        "limit"
: 5,
        "memoryKey"
: "rag_knowledge_base"
      }
,
      "id"
: "vector_search",
      "name"
: "Search Vector Store",
      "type"
: "n8n-nodes-langchain.vectorStoreLancedb",
      "typeVersion"
: 1,
      "position"
: [550, 300],
      "credentials"
: {
        "openAIApi"
: "openai_api_key"
      }

    }
,
    {

      "parameters"
: {
        "model"
: "gpt-4",
        "temperature"
: 0.5,
        "systemMessage"
: "你是一个有帮助的AI助手。基于提供的文档内容精准回答问题。如果文档中没有相关信息,请说'根据提供的文档,我找不到相关答案'。",
        "messages"
: [
          {

            "role"
: "user",
            "content"
: "={{ '问题:' + $json.question + '\\n\\n相关文档内容:\\n' + ($json.documents || '无') }}"
          }

        ]

      }
,
      "id"
: "llm_response",
      "name"
: "Generate Answer - GPT-4",
      "type"
: "n8n-nodes-base.openAI",
      "typeVersion"
: 1,
      "position"
: [800, 300],
      "credentials"
: {
        "openAIApi"
: "openai_api_key"
      }

    }
,
    {

      "parameters"
: {
        "responseData"
: "={{ { answer: $json.choices[0].message.content } }}"
      }
,
      "id"
: "response",
      "name"
: "Return Response",
      "type"
: "n8n-nodes-base.respondToWebhook",
      "typeVersion"
: 1,
      "position"
: [1050, 300]
    }

  ]
,
  "connections"
: {
    "webhook_trigger"
: {
      "main"
: [[{"node": "vector_search", "output": 0}]]
    }
,
    "vector_search"
: {
      "main"
: [[{"node": "llm_response", "output": 0}]]
    }
,
    "llm_response"
: {
      "main"
: [[{"node": "response", "output": 0}]]
    }

  }
,
  "active"
: true,
  "settings"
: {
    "executionOrder"
: "v1"
  }

}

常见问题解答

❓ Q1: 我应该选择哪个嵌入模型?

A: 这取决于你的具体需求:


    
    
    
  预算有限? → 使用 text-embedding-ada-002
      ↓     (快速、便宜)

需要高精度? → 使用 text-embedding-3-large
     ↓       (准确度最高)

隐私敏感? → 使用开源模型
     ↓     (本地部署,无数据泄露风险)

成本对比(约):

❓ Q2: 文本分割应该如何最优配置?

A: 推荐的黄金配置:


    
    
    
  {
  "分割方式"
: "递归字符分割",
  "块大小"
: 500,
  "块重叠"
: 100,
  "优先级"
: "Markdown结构 > 代码块 > 段落"
}

为什么这个配置好:

❓ Q3: 如何改进检索质量?

A: 三个关键因素决定检索效果:

  1. 1. 📝 数据质量 (最重要)
    • • 清理和规范化文档
    • • 移除重复内容
    • • 修正拼写错误
  2. 2. 🏷️ 元数据标记
    
        
        
        
      {
      "text"
    : "文档内容",
      "metadata"
    : {
        "source"
    : "员工手册 v2.1",
        "date"
    : "2024-01-15",
        "category"
    : "HR",
        "importance"
    : "high"
      }

    }
  3. 3. 🔍 查询优化
    • • 帮助用户写清晰的问题
    • • 提供问题例子
    • • 使用同义词扩展

❓ Q4: 可以用哪些向量存储?n8n支持多少种?

A: n8n支持的主要向量存储(按推荐顺序):

  1. 1. Simple Vector Store - n8n内置,最简单
  2. 2. Pinecone - 最流行的云解决方案
  3. 3. Qdrant - 最具性价比的开源方案
  4. 4. Milvus - 最适合大规模应用
  5. 5. Weaviate - 功能最全面

选择建议:


    
    
    
  开发/学习阶段 → Simple Vector Store
小规模生产    → Qdrant (自建)
大规模企业    → Pinecone (托管)
隐私至上      → Qdrant/Milvus (自建)

❓ Q5: RAG系统需要多长时间才能有效?

A: 通常:

加快学习的建议:

  1. 1. 从官方模板开始(不要从零开始)
  2. 2. 使用简单的文档集测试
  3. 3. 逐步增加复杂度
  4. 4. 参考社区工作流

性能优化最佳实践

🚀 1. 减少API调用成本


    
    
    
  策略A:缓存常见问题
缓存热问题答案 → 减少60%的API调用

策略B:批量处理
不要逐个处理 → 批量发送文档

结果:成本可降低50-70%

⚡ 2. 提高查询速度


    
    
    
  原始速度:3-5秒/查询

优化1:使用更快的嵌入模型 → 1-2秒
优化2:减少返回块数(5→3) → 0.5秒
优化3:添加缓存层 → 0.1秒

最终速度:0.5-1秒 ✅

🎯 3. 提高答案准确度


    
    
    
  不同方法效果对比:

基础RAG           准确度:70%

添加元数据        准确度:78%

多步检索          准确度:82%

人工验证反馈      准确度:88%+

📊 4. 添加监控和日志


    
    
    
  // 在工作流中添加监控节点
{
  "query"
: "用户问题",
  "retrieved_docs_count"
: 5,
  "response_time_ms"
: 1250,
  "answer_quality"
: "high", // manual or ML scored
  "user_satisfaction"
: true/false
}

安全和隐私注意事项

⚠️ 在生产环境部署RAG系统时,注意:

方面建议
数据安全对敏感信息进行加密存储
访问控制只让授权用户查询特定文档
API密钥使用n8n的凭证管理,不要暴露
隐私考虑使用自建向量存储(Qdrant)
合规性确保符合GDPR、行业规范等

真实案例:不同行业的RAG应用

📚 案例1:HR部门

🏥 案例2:医疗机构

💼 案例3:法律事务所

🛒 案例4:电商平台


故障排除指南

❌ 问题1:检索结果不相关

原因可能:

解决方案:


    
    
    
  1. 尝试调整块大小:400-600 tokens
2. 切换嵌入模型测试
3. 清理文档(移除无关内容)
4. 添加元数据帮助过滤

❌ 问题2:API超时或错误

解决方案:


    
    
    
  1. 检查API密钥是否有效
2. 减少并发请求数
3. 增加超时时间
4. 使用错误处理节点捕获异常

❌ 问题3:成本过高

原因可能:

优化建议:


    
    
    
  1. 改用更便宜的模型(ada-002)
2. 启用请求缓存
3. 批量处理文档
4. 定期审查使用情况

总结

通过本教程,你已经学会了:

  1. 1. ✅ RAG和向量存储的核心概念
  2. 2. ✅ n8n中实现RAG的5个步骤
  3. 3. ✅ 如何选择合适的嵌入模型和向量存储
  4. 4. ✅ 构建和测试你的第一个RAG系统
  5. 5. ✅ 性能优化和故障排除的方法

官方文档[1]
n8n系列教程[2]

引用链接

[1] 官方文档: https://docs.n8n.io/advanced-ai/rag-in-n8n/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#