LLM Chaining examples
工作流概述
这是一个包含38个节点的复杂工作流,主要用于自动化处理各种任务。
工作流源代码
{
"id": "43gMd18arOcxqDcC",
"meta": {
"instanceId": "fb924c73af8f703905bc09c9ee8076f48c17b596ed05b18c0ff86915ef8a7c4a",
"templateCredsSetupCompleted": true
},
"name": "LLM Chaining examples",
"tags": [],
"nodes": [
{
"id": "35e53ce7-06b4-47ca-b7f3-b147bd059fcf",
"name": "When clicking ‘Test workflow’",
"type": "n8n-nodes-base.manualTrigger",
"position": [
200,
520
],
"parameters": {},
"typeVersion": 1
},
{
"id": "aeef734e-1c3b-4a91-93ae-2ae9c50951b8",
"name": "HTTP Request",
"type": "n8n-nodes-base.httpRequest",
"position": [
400,
520
],
"parameters": {
"url": "https://blog.n8n.io/",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "7f6b95eb-df8c-4f0f-ba69-6b298d624ccd",
"name": "Markdown",
"type": "n8n-nodes-base.markdown",
"position": [
600,
520
],
"parameters": {
"html": "={{ $json.data }}",
"options": {},
"destinationKey": "markdown"
},
"typeVersion": 1
},
{
"id": "994dbe06-4c25-4fb3-a8f3-566eb5b66c6d",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
160,
340
],
"parameters": {
"color": 4,
"width": 700,
"height": 360,
"content": "# Connect to one of the blue sections -->
## This can be anything:
- Chat input
- Trigger from external system
- CRON-scheduled event"
},
"typeVersion": 1
},
{
"id": "8ba3039d-dabf-43b7-ab35-117332f65ced",
"name": "Anthropic Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
1460,
-20
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "claude-3-7-sonnet-20250219",
"cachedResultName": "Claude 3.7 Sonnet"
},
"options": {
"temperature": 0.5
}
},
"credentials": {
"anthropicApi": {
"id": "cJno7gKlYez56WtP",
"name": "Anthropic account"
}
},
"typeVersion": 1.3
},
{
"id": "7e1da020-e01d-410c-aa7f-a19d6e1c368d",
"name": "Anthropic Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
1820,
-20
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "claude-3-7-sonnet-20250219",
"cachedResultName": "Claude 3.7 Sonnet"
},
"options": {
"temperature": 0.5
}
},
"credentials": {
"anthropicApi": {
"id": "cJno7gKlYez56WtP",
"name": "Anthropic account"
}
},
"typeVersion": 1.3
},
{
"id": "620503cb-2d51-4102-8975-75255cf15b1b",
"name": "Anthropic Chat Model2",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
2180,
-20
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "claude-3-7-sonnet-20250219",
"cachedResultName": "Claude 3.7 Sonnet"
},
"options": {
"temperature": 0.5
}
},
"credentials": {
"anthropicApi": {
"id": "cJno7gKlYez56WtP",
"name": "Anthropic account"
}
},
"typeVersion": 1.3
},
{
"id": "5f0d11ce-c1ea-4c36-8b2d-d3f70b19f0ba",
"name": "Anthropic Chat Model3",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
2540,
-20
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "claude-3-7-sonnet-20250219",
"cachedResultName": "Claude 3.7 Sonnet"
},
"options": {
"temperature": 0.5
}
},
"credentials": {
"anthropicApi": {
"id": "cJno7gKlYez56WtP",
"name": "Anthropic account"
}
},
"typeVersion": 1.3
},
{
"id": "f973d01e-fad7-4143-8379-54438f5412cb",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
2440,
360
],
"parameters": {
"mode": "combine",
"options": {
"includeUnpaired": true
},
"combineBy": "combineByPosition"
},
"typeVersion": 3.1
},
{
"id": "c7e58b90-bc96-421c-88f2-4e9f95f87248",
"name": "Simple Memory",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
2680,
780
],
"parameters": {
"sessionKey": "fixed_session",
"sessionIdType": "customKey",
"contextWindowLength": 10
},
"typeVersion": 1.3
},
{
"id": "0e606f7c-2cdb-4e34-8c0b-2303996077fb",
"name": "Clean memory",
"type": "@n8n/n8n-nodes-langchain.memoryManager",
"position": [
1500,
480
],
"parameters": {
"mode": "delete",
"deleteMode": "all"
},
"typeVersion": 1.1
},
{
"id": "af0fb574-9964-4f7d-8348-a2cf614b8562",
"name": "Initial prompts",
"type": "n8n-nodes-base.set",
"position": [
1880,
480
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "84a50c9c-2265-4dd6-a774-efc852615862",
"name": "system_prompt",
"type": "string",
"value": "You are a helpful assistant"
},
{
"id": "559f19f7-042c-465e-b85f-ab52cfbab04a",
"name": "step1",
"type": "string",
"value": "What is on this page?"
},
{
"id": "6791cd09-c5f7-48c8-b753-8d383db6863f",
"name": "step2",
"type": "string",
"value": "List all authors on this page"
},
{
"id": "1f92ac04-e5dd-4161-afde-14562aea454c",
"name": "step3",
"type": "string",
"value": "List all posts on this page"
},
{
"id": "ad8ee0b0-fa7d-4f4a-85a8-82d0d0dc0a40",
"name": "step4",
"type": "string",
"value": "Make a bold funny joke based on the content on this page"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "6743e44a-cc76-4e73-b4f3-ba7c65d179d3",
"name": "Split Out",
"type": "n8n-nodes-base.splitOut",
"position": [
2240,
480
],
"parameters": {
"include": "selectedOtherFields",
"options": {},
"fieldToSplitOut": "data",
"fieldsToInclude": "system_prompt"
},
"typeVersion": 1
},
{
"id": "caddd26c-ee84-455f-8ee6-aecf21536930",
"name": "Reshape",
"type": "n8n-nodes-base.set",
"position": [
2060,
480
],
"parameters": {
"mode": "raw",
"include": "selected",
"options": {},
"jsonOutput": "={ \"data\" : {{ Object.entries($json).filter(([key]) => key !== \"system_prompt\").map(([key, value]) => ({ step: key, instruction: value })) }}
}",
"includeFields": "system_prompt",
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "bd244988-d074-42f3-af42-960e5aa1d35d",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1840,
400
],
"parameters": {
"width": 540,
"height": 240,
"content": "# An array of prompts here"
},
"typeVersion": 1
},
{
"id": "7e9e5287-8d4e-43a9-b8cf-ae26a177bfbb",
"name": "Anthropic Chat Model4",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
2600,
600
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "claude-3-7-sonnet-20250219",
"cachedResultName": "Claude 3.7 Sonnet"
},
"options": {
"thinking": false,
"temperature": 0.5
}
},
"credentials": {
"anthropicApi": {
"id": "cJno7gKlYez56WtP",
"name": "Anthropic account"
}
},
"typeVersion": 1.3
},
{
"id": "47816a45-b906-47ef-9510-c63867bfc8b7",
"name": "Merge2",
"type": "n8n-nodes-base.merge",
"position": [
1860,
1120
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineAll"
},
"typeVersion": 3
},
{
"id": "e63b89a1-c2ca-4ed2-ae50-e3a7b429609c",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
2040,
1020
],
"parameters": {
"width": 320,
"height": 520,
"content": "## Make sure URL matches
### ⚠️ Cloud users!
Replace `{{ $env.WEBHOOK_URL }}`
with your n8n instance URL"
},
"typeVersion": 1
},
{
"id": "7b99df1a-bf6c-4cf1-b58a-346873136715",
"name": "Basic LLM Chain4",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
2440,
1300
],
"parameters": {
"text": "={{ $json.body.userprompt }}
Here's page data:
~~~~
{{ $json.body.markdown }}
~~~~",
"promptType": "define"
},
"typeVersion": 1.5
},
{
"id": "6f6e0667-5164-4b65-a796-1d2112c7c072",
"name": "Split Out1",
"type": "n8n-nodes-base.splitOut",
"position": [
1680,
1340
],
"parameters": {
"options": {},
"fieldToSplitOut": "userprompt"
},
"typeVersion": 1
},
{
"id": "9dfd2145-2427-4131-92d2-99aca620217f",
"name": "Anthropic Chat Model5",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
2420,
1460
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "claude-3-7-sonnet-20250219",
"cachedResultName": "Claude 3.7 Sonnet"
},
"options": {
"thinking": false,
"temperature": 0.5
}
},
"credentials": {
"anthropicApi": {
"id": "cJno7gKlYez56WtP",
"name": "Anthropic account"
}
},
"typeVersion": 1.3
},
{
"id": "616fc635-107d-4929-b9d6-4ccd34e42909",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
2140,
1400
],
"webhookId": "58d2b899-e09c-45bf-b59b-961a5d7a2470",
"parameters": {
"path": "58d2b899-e09c-45bf-b59b-961a5d7a2470",
"options": {},
"httpMethod": "POST",
"responseMode": "lastNode"
},
"typeVersion": 2
},
{
"id": "c863252b-f8b6-4704-be4e-a69d3005a85a",
"name": "CONNECT ME",
"type": "n8n-nodes-base.noOp",
"position": [
1240,
-220
],
"parameters": {},
"typeVersion": 1
},
{
"id": "90ab4402-cbea-4441-9097-558ec72e5d38",
"name": "CONNECT ME1",
"type": "n8n-nodes-base.noOp",
"position": [
1280,
340
],
"parameters": {},
"typeVersion": 1
},
{
"id": "1c04650f-8043-496f-aeab-866e85548f9d",
"name": "CONNECT ME2",
"type": "n8n-nodes-base.noOp",
"position": [
1280,
1100
],
"parameters": {},
"typeVersion": 1
},
{
"id": "4097f12d-eba7-477a-9152-da5eb8c9aa03",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
960,
-300
],
"parameters": {
"color": 5,
"width": 1980,
"height": 440,
"content": "# 1 - Naive Chaining
### PROs:
- Easy to setup
- Beginner-friendly
### CONs
- Not scalable
- Hard to maintain long chains
- SLOOOW!"
},
"typeVersion": 1
},
{
"id": "ce806bc6-a57e-47da-bbba-4698c3956022",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
960,
240
],
"parameters": {
"color": 5,
"width": 2160,
"height": 660,
"content": "# 2 - Iterative Agent Processing
### PROs:
- Scalable
- All inputs & outputs in a single node
- Supports Agent memory
### CONs
- Still Slow!"
},
"typeVersion": 1
},
{
"id": "49c4507f-de1e-422b-8058-db82668614d3",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
960,
1000
],
"parameters": {
"color": 5,
"width": 1880,
"height": 600,
"content": "# 3 - Parallel Processing
### PROs:
- Scalable
- All inputs & outputs in a single place
- FAST!
### CONs
- Independent requests
(no Agent memory)"
},
"typeVersion": 1
},
{
"id": "c30b8132-9291-4855-89ec-6a98bcee8247",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1420,
1260
],
"parameters": {
"width": 400,
"height": 240,
"content": "# Array of prompts here"
},
"typeVersion": 1
},
{
"id": "4c1b5816-7393-47f6-8a88-008d8deea119",
"name": "Initial prompts1",
"type": "n8n-nodes-base.set",
"position": [
1460,
1340
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "ed7f1cc6-99d3-481c-b5fb-d9900d6ee0f6",
"name": "userprompt",
"type": "array",
"value": "=[
\"What is on this page?\",
\"List all authors on this page\",
\"List all posts on this page\",
\"Make a bold funny joke based on the content on this page\"
]"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "8248a20f-1f90-42b0-8167-7ddcc90242a2",
"name": "LLM Chain - Step 1",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1500,
-220
],
"parameters": {
"text": "={{ $('Markdown').first().json.markdown }}",
"messages": {
"messageValues": [
{
"message": "What is on this page?"
}
]
},
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "3788b23b-ccdc-4326-8ce0-1e57934d23bd",
"name": "LLM Chain - Step 2",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1860,
-220
],
"parameters": {
"text": "={{ $('Markdown').first().json.markdown }}",
"messages": {
"messageValues": [
{
"message": "List all authors on this page"
}
]
},
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "89e69a39-bf13-4599-8ddc-a01c4590fb9c",
"name": "LLM Chain - Step 3",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
2220,
-220
],
"parameters": {
"text": "={{ $('Markdown').first().json.markdown }}",
"messages": {
"messageValues": [
{
"message": "List all posts on this page"
}
]
},
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "7e395991-9404-490e-8946-0da8f81e7243",
"name": "LLM Chain - Step 4",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
2580,
-220
],
"parameters": {
"text": "={{ $('Markdown').first().json.markdown }}",
"messages": {
"messageValues": [
{
"message": "Make a bold funny joke based on the content on this page"
}
]
},
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "efb8d836-8a4a-4a70-baed-4a9b77461aca",
"name": "All LLM steps here - sequentially",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2640,
440
],
"parameters": {
"text": "={{ $json.markdown || \"\" }}
{{ `Your task: ${$json.data.step}. ${$json.data.instruction}` }}",
"options": {
"systemMessage": "={{ $json.system_prompt }}"
},
"promptType": "define"
},
"typeVersion": 1.8
},
{
"id": "926b1705-a24c-4659-bf61-8ed97ade7290",
"name": "LLM steps - parallel",
"type": "n8n-nodes-base.httpRequest",
"position": [
2140,
1240
],
"parameters": {
"url": "={{ $env.WEBHOOK_URL }}webhook/58d2b899-e09c-45bf-b59b-961a5d7a2470",
"method": "POST",
"options": {},
"jsonBody": "={{ $json }}",
"sendBody": true,
"specifyBody": "json"
},
"typeVersion": 4.2
},
{
"id": "7748574b-1abd-4697-9644-db8bb79fb08d",
"name": "Merge output with initial prompts",
"type": "n8n-nodes-base.merge",
"position": [
2440,
1140
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.1
},
{
"id": "b207d83b-ecda-4a9f-af78-cfbb2253c119",
"name": "Merge output with initial prompts1",
"type": "n8n-nodes-base.merge",
"position": [
3000,
380
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.1
}
],
"active": true,
"pinData": {},
"settings": {
"callerPolicy": "workflowsFromSameOwner",
"executionOrder": "v1",
"saveDataSuccessExecution": "all"
},
"versionId": "7b1849db-1c4c-4943-89b1-184926649776",
"connections": {
"Merge": {
"main": [
[
{
"node": "All LLM steps here - sequentially",
"type": "main",
"index": 0
},
{
"node": "Merge output with initial prompts1",
"type": "main",
"index": 0
}
]
]
},
"Merge2": {
"main": [
[
{
"node": "LLM steps - parallel",
"type": "main",
"index": 0
},
{
"node": "Merge output with initial prompts",
"type": "main",
"index": 0
}
]
]
},
"Reshape": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"Webhook": {
"main": [
[
{
"node": "Basic LLM Chain4",
"type": "main",
"index": 0
}
]
]
},
"Markdown": {
"main": [
[]
]
},
"Split Out": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"CONNECT ME": {
"main": [
[
{
"node": "LLM Chain - Step 1",
"type": "main",
"index": 0
}
]
]
},
"Split Out1": {
"main": [
[
{
"node": "Merge2",
"type": "main",
"index": 1
}
]
]
},
"CONNECT ME1": {
"main": [
[
{
"node": "Clean memory",
"type": "main",
"index": 0
},
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"CONNECT ME2": {
"main": [
[
{
"node": "Initial prompts1",
"type": "main",
"index": 0
},
{
"node": "Merge2",
"type": "main",
"index": 0
}
]
]
},
"Clean memory": {
"main": [
[
{
"node": "Initial prompts",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "Markdown",
"type": "main",
"index": 0
}
]
]
},
"Simple Memory": {
"ai_memory": [
[
{
"node": "All LLM steps here - sequentially",
"type": "ai_memory",
"index": 0
},
{
"node": "Clean memory",
"type": "ai_memory",
"index": 0
}
]
]
},
"Initial prompts": {
"main": [
[
{
"node": "Reshape",
"type": "main",
"index": 0
}
]
]
},
"Initial prompts1": {
"main": [
[
{
"node": "Split Out1",
"type": "main",
"index": 0
}
]
]
},
"LLM Chain - Step 1": {
"main": [
[
{
"node": "LLM Chain - Step 2",
"type": "main",
"index": 0
}
]
]
},
"LLM Chain - Step 2": {
"main": [
[
{
"node": "LLM Chain - Step 3",
"type": "main",
"index": 0
}
]
]
},
"LLM Chain - Step 3": {
"main": [
[
{
"node": "LLM Chain - Step 4",
"type": "main",
"index": 0
}
]
]
},
"Anthropic Chat Model": {
"ai_languageModel": [
[
{
"node": "LLM Chain - Step 1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"LLM steps - parallel": {
"main": [
[
{
"node": "Merge output with initial prompts",
"type": "main",
"index": 1
}
]
]
},
"Anthropic Chat Model1": {
"ai_languageModel": [
[
{
"node": "LLM Chain - Step 2",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Anthropic Chat Model2": {
"ai_languageModel": [
[
{
"node": "LLM Chain - Step 3",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Anthropic Chat Model3": {
"ai_languageModel": [
[
{
"node": "LLM Chain - Step 4",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Anthropic Chat Model4": {
"ai_languageModel": [
[
{
"node": "All LLM steps here - sequentially",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Anthropic Chat Model5": {
"ai_languageModel": [
[
{
"node": "Basic LLM Chain4",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"All LLM steps here - sequentially": {
"main": [
[
{
"node": "Merge output with initial prompts1",
"type": "main",
"index": 1
}
]
]
},
"When clicking ‘Test workflow’": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
}
}
}
功能特点
- 自动检测新邮件
- AI智能内容分析
- 自定义分类规则
- 批量处理能力
- 详细的处理日志
技术分析
节点类型及作用
- Manualtrigger
- Httprequest
- Markdown
- Stickynote
- @N8N/N8N Nodes Langchain.Lmchatanthropic
复杂度评估
配置难度:
维护难度:
扩展性:
实施指南
前置条件
- 有效的Gmail账户
- n8n平台访问权限
- Google API凭证
- AI分类服务订阅
配置步骤
- 在n8n中导入工作流JSON文件
- 配置Gmail节点的认证信息
- 设置AI分类器的API密钥
- 自定义分类规则和标签映射
- 测试工作流执行
- 配置定时触发器(可选)
关键参数
| 参数名称 | 默认值 | 说明 |
|---|---|---|
| maxEmails | 50 | 单次处理的最大邮件数量 |
| confidenceThreshold | 0.8 | 分类置信度阈值 |
| autoLabel | true | 是否自动添加标签 |
最佳实践
优化建议
- 定期更新AI分类模型以提高准确性
- 根据邮件量调整处理批次大小
- 设置合理的分类置信度阈值
- 定期清理过期的分类规则
安全注意事项
- 妥善保管API密钥和认证信息
- 限制工作流的访问权限
- 定期审查处理日志
- 启用双因素认证保护Gmail账户
性能优化
- 使用增量处理减少重复工作
- 缓存频繁访问的数据
- 并行处理多个邮件分类任务
- 监控系统资源使用情况
故障排除
常见问题
邮件未被正确分类
检查AI分类器的置信度阈值设置,适当降低阈值或更新训练数据。
Gmail认证失败
确认Google API凭证有效且具有正确的权限范围,重新进行OAuth授权。
调试技巧
- 启用详细日志记录查看每个步骤的执行情况
- 使用测试邮件验证分类逻辑
- 检查网络连接和API服务状态
- 逐步执行工作流定位问题节点
错误处理
工作流包含以下错误处理机制:
- 网络超时自动重试(最多3次)
- API错误记录和告警
- 处理失败邮件的隔离机制
- 异常情况下的回滚操作