为 N8N 智能体/工作流创建 OpenAI 兼容 API
高级
这是一个自动化工作流,包含 21 个节点。主要使用 If、N8n、Set、Code、Webhook 等节点。 为多个AI工作流创建通用OpenAI兼容API端点
前置要求
- •HTTP Webhook 端点(n8n 会自动生成)
- •可能需要目标 API 的认证凭证
- •OpenAI API Key
使用的节点 (21 个)
分类
未分类
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "CcsSozcaZmwgTZRJ",
"meta": {
"instanceId": "d2b7bf62ebeaf79f36ba97778f61f82b716fe9a9dd9efd59e42986e968c3c6ce",
"templateId": "4217",
"templateCredsSetupCompleted": true
},
"name": "为 N8N 智能体/工作流创建 OpenAI 兼容 API",
"tags": [],
"nodes": [
{
"id": "f8831a38-92ef-44e5-99dd-0f410e9c0883",
"name": "聚合",
"type": "n8n-nodes-base.aggregate",
"position": [
1424,
992
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "3c36a5c8-28da-4656-aa9d-8593926b3e77",
"name": "Models Response",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
1600,
992
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "={{\n({\n \"object\": \"list\",\n \"data\": $json.data.map(item => ({\n \"id\": item.path,\n \"object\": \"model\",\n \"created\": Math.floor($now / 1000),\n \"owned_by\": \"system\"\n }))\n})\n}}"
},
"executeOnce": false,
"typeVersion": 1.2
},
{
"id": "c28b03cb-bd1b-41d5-ba1b-486a099afb92",
"name": "GET models",
"type": "n8n-nodes-base.webhook",
"position": [
896,
992
],
"webhookId": "f88b9992-b7b9-4ab5-829c-7b89e9cc4775",
"parameters": {
"path": "youragents/models",
"options": {},
"responseMode": "responseNode"
},
"typeVersion": 2
},
{
"id": "855c24f5-0758-4344-b780-523383b51de1",
"name": "便签 2",
"type": "n8n-nodes-base.stickyNote",
"position": [
848,
800
],
"parameters": {
"color": 7,
"width": 1016,
"height": 452,
"content": "## 1. 列出所有可用模型"
},
"typeVersion": 1
},
{
"id": "d5f0446d-2e59-47ee-a442-f66490d8759d",
"name": "便签 3",
"type": "n8n-nodes-base.stickyNote",
"position": [
2000,
784
],
"parameters": {
"color": 7,
"width": 1448,
"height": 588,
"content": "## 2. 请求聊天补全"
},
"typeVersion": 1
},
{
"id": "cb4e2823-21af-418e-9f46-9c367932aef4",
"name": "Get many workflows",
"type": "n8n-nodes-base.n8n",
"position": [
1088,
992
],
"parameters": {
"filters": {
"tags": "aimodel"
},
"requestOptions": {}
},
"typeVersion": 1
},
{
"id": "f1c9a7d9-9958-4e3f-bd2d-22fb77028cd8",
"name": "编辑字段",
"type": "n8n-nodes-base.set",
"position": [
1264,
992
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "b03926a4-4ad9-4d87-8188-989fa5158a07",
"name": "name",
"type": "string",
"value": "={{ $json.name }}"
},
{
"id": "88bd31bd-005d-4734-bffa-4fd3b8487166",
"name": "id",
"type": "string",
"value": "={{ $json.id }}"
},
{
"id": "7fbabd24-8dea-495e-96fe-da08790f971c",
"name": "path",
"type": "string",
"value": "={{ $json.nodes.find(node => node.parameters?.path).parameters.path }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "fe6a6983-4b80-4b54-92f2-ffe7235d0c2e",
"name": "POST ChatCompletions",
"type": "n8n-nodes-base.webhook",
"position": [
2096,
1072
],
"webhookId": "e8c56164-1825-4ac4-9c23-d209f4907458",
"parameters": {
"path": "youragents/chat/completions",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode",
"authentication": "headerAuth"
},
"typeVersion": 2
},
{
"id": "b296aba2-a74a-47fb-8461-c1d17badab28",
"name": "Remap to Response API Schema",
"type": "n8n-nodes-base.code",
"position": [
2352,
1072
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "function tranformContent(content) {\n return [].concat(content).map(content => {\n if (typeof content === 'string') {\n return { type: \"input_text\", text: content };\n }\n return {\n type: getInputType(content.type),\n [content.type]: content[content.type].url\n }\n })\n};\n\nfunction getInputType(type) {\n if (type === 'image_url') return 'input_image';\n if (type === 'file_url') return 'input_file';\n return 'input_text';\n}\n\nconst input = $input.item.json.body.messages.map(message => ({\n role: message.role,\n content: tranformContent(message.content)\n}));\n\nreturn { input };"
},
"typeVersion": 2
},
{
"id": "f2a859c0-c7d4-49cc-baf6-b711700cef46",
"name": "Format Completion Response",
"type": "n8n-nodes-base.code",
"position": [
3040,
1200
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "return {\n \"id\": $('POST ChatCompletions').item.json.headers['cf-ray'],\n \"object\": \"chat.completion\",\n \"created\": Math.floor($now / 1000),\n \"model\":$('POST ChatCompletions').item.json.body.model,\n \"choices\": [{\n index: 0,\n finish_reason: \"stop\",\n \"message\": {\n \"content\": $('Call workflow webhook1').item.json.output,\n \"refusal\": null,\n \"role\": \"assistant\"\n }\n }],\n \"usage\": {\n \"completion_tokens\": null,\n \"completion_tokens_details\": null,\n \"prompt_tokens\": null,\n \"prompt_tokens_details\": null,\n \"total_tokens\": null\n },\n \"system_fingerprint\": $('POST ChatCompletions').item.json.headers['cf-ray']\n}"
},
"typeVersion": 2
},
{
"id": "9312f313-97f5-4ff7-9bbd-65d0ec3c6c2d",
"name": "JSON Response",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
3200,
1200
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "={{ $json }}"
},
"typeVersion": 1.2
},
{
"id": "68572df2-ea64-4520-9b67-3d60a2059992",
"name": "Text Response",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
3200,
976
],
"parameters": {
"options": {},
"respondWith": "text",
"responseBody": "={{ $json.data }}"
},
"typeVersion": 1.2
},
{
"id": "1a2c1e1b-d5ea-4da6-ae86-081a700ca80d",
"name": "Format Stream Response",
"type": "n8n-nodes-base.code",
"position": [
3024,
976
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const chunk = {\n id: $('POST ChatCompletions').item.json.headers['cf-ray'],\n object:\"chat.completion.chunk\",\n created: Math.floor($now / 1000),\n model: $('POST ChatCompletions').item.json.body.model,\n system_fingerprint: $('POST ChatCompletions').item.json.headers['cf-ray'],\n choices: [{\n index: 0,\n delta: { content: $('Call workflow webhook').item.json.output }\n }],\n \"usage\": {\n \"completion_tokens\": null,\n \"completion_tokens_details\": null,\n \"prompt_tokens\": null,\n \"prompt_tokens_details\": null,\n \"total_tokens\": null\n }\n};\n\nconst data = [\n `data: ${JSON.stringify(chunk)}`,\n `data: [DONE]`\n].join('\\n\\n');\n\nreturn { data };"
},
"typeVersion": 2
},
{
"id": "5e832bb8-c2a2-453b-9aef-b08862c659fc",
"name": "Is Stream?",
"type": "n8n-nodes-base.if",
"position": [
2576,
1072
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "213702bf-d5c2-4a8a-b5c8-e55f804e4496",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $('POST ChatCompletions').first().json.body.stream }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "790bb7d3-7b5d-417f-9d31-2f01d6ac89f3",
"name": "Call workflow webhook",
"type": "n8n-nodes-base.httpRequest",
"position": [
2816,
976
],
"parameters": {
"url": "=https://n8n.lucidusfortis.com/webhook/{{ $('POST ChatCompletions').first().json.body.model }}",
"method": "POST",
"options": {},
"jsonBody": "={{\n{\n model: $('POST ChatCompletions').first().json.body.model,\n stream: $('POST ChatCompletions').first().json.body.stream,\n chatInput: $json.input.toJsonString(),\n sessionId: $('POST ChatCompletions').item.json.headers['cf-ray'],\n fromLLM: true\n}\n}}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "n8nApi"
},
"typeVersion": 4.2
},
{
"id": "4d0d9dfa-2df0-49dd-a60c-1164347c85c5",
"name": "Call workflow webhook1",
"type": "n8n-nodes-base.httpRequest",
"position": [
2816,
1200
],
"parameters": {
"url": "=https://n8n.lucidusfortis.com/webhook/{{ $('POST ChatCompletions').first().json.body.model }}",
"method": "POST",
"options": {},
"jsonBody": "={{\n{\n model: $('POST ChatCompletions').item.json.body.model,\n stream: false,\n chatInput: $json.input.toJsonString(),\n sessionId: $('POST ChatCompletions').item.json.headers['cf-ray'],\n fromLLM: true\n}\n}}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "n8nApi"
},
"typeVersion": 4.2
},
{
"id": "d8728083-673c-479a-b804-6bbad1fa1581",
"name": "n8n Webhooks",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1056,
1824
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "youragentname",
"cachedResultName": "youragentname"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "f96c8bae-1c75-4e01-bd41-bfc0b047d0f7",
"name": "当收到聊天消息时",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
928,
1632
],
"webhookId": "6ec7783c-8f47-4fdf-9838-7846b1da4bfa",
"parameters": {
"options": {}
},
"typeVersion": 1.1
},
{
"id": "51aa0e26-8cb5-4561-9d9c-a5e9e306fecb",
"name": "便签 1",
"type": "n8n-nodes-base.stickyNote",
"position": [
864,
1392
],
"parameters": {
"color": 7,
"width": 680,
"height": 580,
"content": "## 3. 创建新的自定义 OpenAI 凭据"
},
"typeVersion": 1
},
{
"id": "5280f412-126a-45ca-8d3e-8fe460d966d7",
"name": "Powered By n8n Workflow Models",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1120,
1632
],
"parameters": {
"options": {}
},
"typeVersion": 2.2
},
{
"id": "9ecab0cf-c376-4ab1-81ce-896e1766b734",
"name": "简单记忆",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
1184,
1840
],
"parameters": {},
"typeVersion": 1.3
}
],
"active": true,
"pinData": {},
"settings": {},
"versionId": "682200cb-34fb-4bf3-9239-0a435e1ec12a",
"connections": {
"Aggregate": {
"main": [
[
{
"node": "Models Response",
"type": "main",
"index": 0
}
]
]
},
"GET models": {
"main": [
[
{
"node": "Get many workflows",
"type": "main",
"index": 0
}
]
]
},
"Is Stream?": {
"main": [
[
{
"node": "Call workflow webhook",
"type": "main",
"index": 0
}
],
[
{
"node": "Call workflow webhook1",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "Aggregate",
"type": "main",
"index": 0
}
]
]
},
"n8n Webhooks": {
"ai_languageModel": [
[
{
"node": "Powered By n8n Workflow Models",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Simple Memory": {
"ai_memory": [
[
{
"node": "Powered By n8n Workflow Models",
"type": "ai_memory",
"index": 0
}
]
]
},
"Models Response": {
"main": [
[]
]
},
"Get many workflows": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"POST ChatCompletions": {
"main": [
[
{
"node": "Remap to Response API Schema",
"type": "main",
"index": 0
}
]
]
},
"Call workflow webhook": {
"main": [
[
{
"node": "Format Stream Response",
"type": "main",
"index": 0
}
]
]
},
"Call workflow webhook1": {
"main": [
[
{
"node": "Format Completion Response",
"type": "main",
"index": 0
}
]
]
},
"Format Stream Response": {
"main": [
[
{
"node": "Text Response",
"type": "main",
"index": 0
}
]
]
},
"Format Completion Response": {
"main": [
[
{
"node": "JSON Response",
"type": "main",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "Powered By n8n Workflow Models",
"type": "main",
"index": 0
}
]
]
},
"Remap to Response API Schema": {
"main": [
[
{
"node": "Is Stream?",
"type": "main",
"index": 0
}
]
]
},
"Powered By n8n Workflow Models": {
"main": [
[]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
这是一个高级难度的通用自动化工作流。适合高级用户,包含 16+ 个节点的复杂工作流
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
在可视化参考库中探索n8n节点
在可视化参考库中探索n8n节点
If
Ftp
Set
+93
113 节点I versus AI
Other
使用 OpenAI、LangChain 和 API 集成的工作流自动化初学者指南
使用 OpenAI、LangChain 和 API 集成的工作流自动化初学者指南
If
Set
Code
+13
33 节点Meelioo
Content Creation
[模板] AI宠物店 v8
🐶 AI宠物店助手 - 集成GPT-4o、Google日历和WhatsApp/Instagram/Facebook
If
N8n
Set
+38
244 节点Amanda Benks
Sales
AI 代理餐厅 [模板]
🤖 WhatsApp、Instagram 和 Messenger 的 AI 餐厅助手
If
N8n
Set
+37
239 节点Amanda Benks
Other
AI智能助手:与Supabase存储和Google Drive文件对话
AI智能助手:与Supabase存储和Google Drive文件对话
If
Set
Wait
+20
62 节点Mark Shcherbakov
Engineering
[模板] - 仪表板聊天
AI模型使用仪表板:追踪LLM工作流的令牌指标和成本
N8n
Set
Code
+12
30 节点Hugo
工作流信息
难度等级
高级
节点数量21
分类-
节点类型13
作者
Dele Odufuye
@deleodufuyeAward winning IT pro. Serial entrepreneur. Mentor. Investor. Ex-MD/VP Cavista Holdings. Builds tech solutions for business problems. Founder, Lucidus Fortis.
外部链接
在 n8n.io 上查看 →
分享此工作流