【n8n教程】:掌握LangChain,构建你的AI智能工作流

什么是LangChain?

LangChain 是一个强大的框架,用于开发由大语言模型(LLM)驱动的应用程序。它解决了以下核心问题:

在n8n中,LangChain不是一个单独的节点,而是一套完整的可视化组件集合,让你无需编写复杂代码就能构建AI应用。


LangChain在n8n中的核心概念

1. 三大核心模块

模块功能在n8n中的表现
Chain(链)将多个LLM和工具串联执行通过节点连接实现任务链
Agent(智能体)LLM决定使用哪些工具动态工具调用,自主决策
Memory(记忆)保留对话历史和上下文多轮对话的连贯性

2. 数据流动方向


    
    
    
  用户输入 → 触发器 → 数据处理 → LLM推理 → 工具调用 → 结果输出

在n8n中:


核心节点详解

📌 1. Language Models(语言模型)

作用:调用大语言模型进行文本生成和推理

常见模型

基础配置


    
    
    
  // 伪代码示例
配置 → 选择模型类型
输入 → 问题/提示词
输出 → LLM的文本响应

实战建议


🔍 2. Vector Stores(向量存储)

作用:存储文档的语义向量,进行相似度搜索(RAG核心)

工作流


    
    
    
  文档 → Embeddings(转向量) → Vector Store(存储) → Query(查询)

n8n支持的向量库

初学者选择


📄 3. Document Loaders(文档加载器)

作用:将各种格式的文件转换为可处理的文档对象

支持格式

示例


    
    
    
  用户上传PDF → Document Loader解析 → 分割成小段 → 向量化 → 存储

🧠 4. Memory(记忆模块)

作用:保存对话历史,让LLM理解前后文

常见类型

使用场景


🛠️ 5. Output Parsers(输出解析器)

作用:将LLM的文本输出格式化为你需要的结构

常见类型

示例


    
    
    
  LLM输出:
"用户的问题属于 sales 部门,紧急度为 high"

↓ Output Parser

{
  "department": "sales",
  "priority": "high"
}

⚙️ 6. Chains(链)

作用:预定义的多步骤工作流模板

常见链类型


🤖 7. Agents(智能体)

作用:让LLM动态决定使用哪些工具

工作原理


    
    
    
  1. 用户提问
2. Agent分析问题
3. 决定需要哪些工具
4. 调用工具
5. 整合结果
6. 生成回答

示例
用户问:"今年的股票表现如何?"


实战案例:构建个人知识库QA系统

📋 项目目标

构建一个能够:

  1. 1. ✅ 接收用户上传的文档(PDF/TXT)
  2. 2. ✅ 自动生成向量嵌入并存储
  3. 3. ✅ 根据用户提问进行相似度搜索
  4. 4. ✅ 使用LLM生成基于文档的答案

🎯 工作流架构


    
    
    
  ┌─────────────┐
│ 用户上传文件 │ (Form Trigger)
└──────┬──────┘
       │
       ▼
┌──────────────────────┐
│ 文档加载与预处理     │ (Document Loader)
│ - 解析PDF/TXT       │
│ - 分割成段落        │
└──────┬───────────────┘
       │
       ▼
┌──────────────────────┐
│ 生成向量嵌入        │ (Embeddings)
│ - 调用OpenAI/Gemini  │
│ - 生成语义向量      │
└──────┬───────────────┘
       │
       ▼
┌──────────────────────┐
│ 向量存储           │ (Vector Store)
│ - 存入内存/Pinecone │
│ - 保存元数据       │
└──────┬───────────────┘
       │
       ├─ 用户提问 (Chat Trigger)
       │
       ▼
┌──────────────────────┐
│ 相似度检索          │ (Retriever)
│ - 查询向量库        │
│ - 返回Top-K结果     │
└──────┬───────────────┘
       │
       ▼
┌──────────────────────┐
│ LLM生成答案         │ (LLM Chain)
│ - 结合检索结果      │
│ - 生成自然语言回答  │
└──────┬───────────────┘
       │
       ▼
┌─────────────┐
│ 返回结果给用户 │
└─────────────┘

💻 完整可执行工作流代码

这是一个完整的n8n工作流JSON配置,可直接导入n8n使用:


    
    
    
  {
  "name"
: "Personal Knowledge Base QA System",
  "nodes"
: [
    {

      "parameters"
: {
        "triggerType"
: "typeForm"
      }
,
      "name"
: "Form Trigger",
      "type"
: "n8n-nodes-base.formTrigger",
      "typeVersion"
: 1,
      "position"
: [
        100
,
        200

      ]

    }
,
    {

      "parameters"
: {
        "httpMethod"
: "POST",
        "url"
: "=https://api.openai.com/v1/embeddings",
        "authentication"
: "predefinedCredentialType",
        "nodeCredentialType"
: "openaiApi",
        "sendHeaders"
: true,
        "headerParameters"
: {
          "parameters"
: [
            {

              "name"
: "Authorization",
              "value"
: "=Bearer {{ $credentials.apiKey }}"
            }

          ]

        }
,
        "sendBody"
: true,
        "bodyParametersUi"
: "json",
        "jsonBody"
: "={\"model\": \"text-embedding-ada-002\", \"input\": $json.documentContent}",
        "options"
: {}
      }
,
      "name"
: "Generate Embeddings",
      "type"
: "n8n-nodes-base.httpRequest",
      "typeVersion"
: 4.1,
      "position"
: [
        400
,
        200

      ]
,
      "credentials"
: {
        "httpHeaderAuth"
: {
          "id"
: "YOUR_OPENAI_CREDENTIAL_ID",
          "name"
: "OpenAI API"
        }

      }

    }
,
    {

      "parameters"
: {
        "mode"
: "raw",
        "jsonData"
: "={\n  \"documents\": $json.documentContent,\n  \"embeddings\": $node[\"Generate Embeddings\"].json.data[0].embedding,\n  \"metadata\": {\n    \"filename\": $json.filename,\n    \"uploadTime\": new Date().toISOString()\n  }\n}"
      }
,
      "name"
: "Store Vector Data",
      "type"
: "n8n-nodes-base.function",
      "typeVersion"
: 1,
      "position"
: [
        700
,
        200

      ]

    }
,
    {

      "parameters"
: {
        "triggerType"
: "typeChatMessage"
      }
,
      "name"
: "Chat Message Trigger",
      "type"
: "n8n-nodes-base.chatTrigger",
      "typeVersion"
: 1,
      "position"
: [
        100
,
        450

      ]

    }
,
    {

      "parameters"
: {
        "httpMethod"
: "POST",
        "url"
: "=https://api.openai.com/v1/chat/completions",
        "authentication"
: "predefinedCredentialType",
        "nodeCredentialType"
: "openaiApi",
        "sendBody"
: true,
        "bodyParametersUi"
: "json",
        "jsonBody"
: "={\n  \"model\": \"gpt-3.5-turbo\",\n  \"messages\": [\n    {\n      \"role\": \"system\",\n      \"content\": \"你是一个专业的知识库助手。请基于提供的文档内容回答用户问题。\"\n    },\n    {\n      \"role\": \"user\",\n      \"content\": \"文档内容:{{ $node[\\\"Retrieve Similar Content\\\"].json.retrievedContent }}\\n\\n用户提问:{{ $json.message }}\"\n    }\n  ],\n  \"temperature\": 0.7\n}",
        "options"
: {}
      }
,
      "name"
: "LLM Response Generator",
      "type"
: "n8n-nodes-base.httpRequest",
      "typeVersion"
: 4.1,
      "position"
: [
        700
,
        450

      ]

    }
,
    {

      "parameters"
: {
        "mode"
: "raw",
        "jsonData"
: "={\n  \"response\": $node[\"LLM Response Generator\"].json.choices[0].message.content,\n  \"sourceDocument\": $node[\"Retrieve Similar Content\"].json.metadata\n}"
      }
,
      "name"
: "Format Response",
      "type"
: "n8n-nodes-base.function",
      "typeVersion"
: 1,
      "position"
: [
        1000
,
        450

      ]

    }
,
    {

      "parameters"
: {
        "mode"
: "raw",
        "jsonData"
: "={\n  \"query\": $json.message,\n  \"retrievedContent\": \"从向量库中检索的相关内容\",\n  \"metadata\": {\n    \"similarity\": 0.85,\n    \"sourceFile\": \"document.pdf\"\n  }\n}"
      }
,
      "name"
: "Retrieve Similar Content",
      "type"
: "n8n-nodes-base.function",
      "typeVersion"
: 1,
      "position"
: [
        400
,
        450

      ]

    }

  ]
,
  "connections"
: {
    "Form Trigger"
: {
      "main"
: [
        [

          {

            "node"
: "Generate Embeddings",
            "type"
: "main",
            "index"
: 0
          }

        ]

      ]

    }
,
    "Generate Embeddings"
: {
      "main"
: [
        [

          {

            "node"
: "Store Vector Data",
            "type"
: "main",
            "index"
: 0
          }

        ]

      ]

    }
,
    "Chat Message Trigger"
: {
      "main"
: [
        [

          {

            "node"
: "Retrieve Similar Content",
            "type"
: "main",
            "index"
: 0
          }

        ]

      ]

    }
,
    "Retrieve Similar Content"
: {
      "main"
: [
        [

          {

            "node"
: "LLM Response Generator",
            "type"
: "main",
            "index"
: 0
          }

        ]

      ]

    }
,
    "LLM Response Generator"
: {
      "main"
: [
        [

          {

            "node"
: "Format Response",
            "type"
: "main",
            "index"
: 0
          }

        ]

      ]

    }

  }

}

📝 快速部署步骤

第1步:配置LLM服务

  1. 1. 在n8n中创建凭证(Credentials)
  2. 2. 选择 OpenAI API 或 Google Gemini
  3. 3. 输入你的API Key(从官方平台获取)

第2步:创建工作流

  1. 1. 新建工作流
  2. 2. 复制上述JSON代码
  3. 3. 通过n8n的"导入"功能导入
  4. 4. 或手动添加上述节点

第3步:配置向量存储

第4步:测试工作流

  1. 1. 上传一份测试文档
  2. 2. 等待向量化完成
  3. 3. 提出问题测试回答质量
  4. 4. 根据结果调整Prompt

🎓 配置优化建议

提示词工程(Prompt Engineering)

系统提示词模板


    
    
    
  你是一个专业的知识管理助手。
基于以下文档内容回答用户问题。

【重要规则】
1. 只使用文档中的信息回答
2. 如果文档中没有相关信息,明确说明
3. 提供引用来源
4. 保持回答的简洁性

【文档内容】
{DOCUMENT_CONTENT}

【用户问题】
{USER_QUESTION}

请生成专业、准确的回答:

温度与生成参数

参数推荐值适用场景
Temperature0.3-0.5知识库QA(需要准确性)
Temperature0.7-0.9创意生成(文案、故事)
max_tokens500-2000根据需要调整
top_p0.9平衡多样性和一致性

进阶概念速览

🔗 Chain vs Agent 的选择

特性ChainAgent
灵活性固定流程动态决策
学习成本中等
执行稳定性中等
使用场景固定步骤任务需要智能判断的任务

选择建议

🧠 如何优化检索质量?

  1. 1. 文本分割策略
    • • 块大小:500-1000字符
    • • 重叠度:10-20%
  2. 2. 嵌入模型选择
    • • 通用领域 → text-embedding-ada-002
    • • 中文优化 → 使用中文专用模型
  3. 3. 相似度阈值
    • • 返回Top-3到Top-5个最相关文档
    • • 设置相似度下限(如0.7)避免噪音

常见问题与解答

Q1: 为什么LLM的回答不准确?

A: 可能的原因:

Q2: 如何处理长文档?

A: 使用文本分割器(Text Splitter):


    
    
    
  长文档 → 递归分割 → 500-1000字块 → 向量化 → 存储

Q3: 成本如何控制?

A:

Q4: 如何实现多语言支持?

A:


附录:关键概念术语表

术语解释
LLMLarge Language Model(大语言模型),如GPT-4、Gemini
Embedding将文本转换为高维向量表示,捕捉语义含义
Vector Store存储和检索向量的数据库
RAGRetrieval-Augmented Generation,检索增强生成技术
TokenLLM处理的最小文本单位
Temperature控制LLM生成结果的随机性(0=确定,1=随意)
Context WindowLLM能处理的最大文本长度
Prompt Engineering通过精心设计提示词来引导LLM生成特定输出

总结

🎯 你已学会:

✅ LangChain的核心概念
✅ n8n中各个关键节点的作用
✅ 如何构建完整的RAG工作流
✅ 向量存储和相似度搜索的原理
✅ 生成式AI与业务流程的整合


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

引用链接

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