LangChain 是一个强大的框架,用于开发由大语言模型(LLM)驱动的应用程序。它解决了以下核心问题:
在n8n中,LangChain不是一个单独的节点,而是一套完整的可视化组件集合,让你无需编写复杂代码就能构建AI应用。
| 模块 | 功能 | 在n8n中的表现 |
|---|---|---|
| Chain(链) | 将多个LLM和工具串联执行 | 通过节点连接实现任务链 |
| Agent(智能体) | LLM决定使用哪些工具 | 动态工具调用,自主决策 |
| Memory(记忆) | 保留对话历史和上下文 | 多轮对话的连贯性 |
用户输入 → 触发器 → 数据处理 → LLM推理 → 工具调用 → 结果输出在n8n中:
作用:调用大语言模型进行文本生成和推理
常见模型:
基础配置:
// 伪代码示例
配置 → 选择模型类型
输入 → 问题/提示词
输出 → LLM的文本响应实战建议:
temperature(0-1):低值=确定性,高值=创意性作用:存储文档的语义向量,进行相似度搜索(RAG核心)
工作流:
文档 → Embeddings(转向量) → Vector Store(存储) → Query(查询)n8n支持的向量库:
初学者选择:
作用:将各种格式的文件转换为可处理的文档对象
支持格式:
示例:
用户上传PDF → Document Loader解析 → 分割成小段 → 向量化 → 存储作用:保存对话历史,让LLM理解前后文
常见类型:
使用场景:
作用:将LLM的文本输出格式化为你需要的结构
常见类型:
示例:
LLM输出:
"用户的问题属于 sales 部门,紧急度为 high"
↓ Output Parser
{
"department": "sales",
"priority": "high"
}作用:预定义的多步骤工作流模板
常见链类型:
作用:让LLM动态决定使用哪些工具
工作原理:
1. 用户提问
2. Agent分析问题
3. 决定需要哪些工具
4. 调用工具
5. 整合结果
6. 生成回答示例:
用户问:"今年的股票表现如何?"
构建一个能够:
┌─────────────┐
│ 用户上传文件 │ (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
}
]
]
}
}
}CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
filename TEXT,
content TEXT,
embedding vector(1536),
upload_time TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX ON documents USING ivfflat (embedding vector_cosine_ops);系统提示词模板:
你是一个专业的知识管理助手。
基于以下文档内容回答用户问题。
【重要规则】
1. 只使用文档中的信息回答
2. 如果文档中没有相关信息,明确说明
3. 提供引用来源
4. 保持回答的简洁性
【文档内容】
{DOCUMENT_CONTENT}
【用户问题】
{USER_QUESTION}
请生成专业、准确的回答:| 参数 | 推荐值 | 适用场景 |
|---|---|---|
| Temperature | 0.3-0.5 | 知识库QA(需要准确性) |
| Temperature | 0.7-0.9 | 创意生成(文案、故事) |
| max_tokens | 500-2000 | 根据需要调整 |
| top_p | 0.9 | 平衡多样性和一致性 |
| 特性 | Chain | Agent |
|---|---|---|
| 灵活性 | 固定流程 | 动态决策 |
| 学习成本 | 低 | 中等 |
| 执行稳定性 | 高 | 中等 |
| 使用场景 | 固定步骤任务 | 需要智能判断的任务 |
选择建议:
A: 可能的原因:
A: 使用文本分割器(Text Splitter):
长文档 → 递归分割 → 500-1000字块 → 向量化 → 存储A:
A:
| 术语 | 解释 |
|---|---|
| LLM | Large Language Model(大语言模型),如GPT-4、Gemini |
| Embedding | 将文本转换为高维向量表示,捕捉语义含义 |
| Vector Store | 存储和检索向量的数据库 |
| RAG | Retrieval-Augmented Generation,检索增强生成技术 |
| Token | LLM处理的最小文本单位 |
| Temperature | 控制LLM生成结果的随机性(0=确定,1=随意) |
| Context Window | LLM能处理的最大文本长度 |
| Prompt Engineering | 通过精心设计提示词来引导LLM生成特定输出 |
✅ LangChain的核心概念
✅ n8n中各个关键节点的作用
✅ 如何构建完整的RAG工作流
✅ 向量存储和相似度搜索的原理
✅ 生成式AI与业务流程的整合
[1] 官方文档: https://docs.n8n.io/advanced-ai/langchain/overview/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#