为 N8N 智能体/工作流创建 OpenAI 兼容 API

高级

这是一个自动化工作流,包含 21 个节点。主要使用 If、N8n、Set、Code、Webhook 等节点。 为多个AI工作流创建通用OpenAI兼容API端点

前置要求
  • HTTP Webhook 端点(n8n 会自动生成)
  • 可能需要目标 API 的认证凭证
  • OpenAI API Key

分类

未分类
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 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)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量21
分类-
节点类型13
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
Dele Odufuye

Dele Odufuye

@deleodufuye

Award winning IT pro. Serial entrepreneur. Mentor. Investor. Ex-MD/VP Cavista Holdings. Builds tech solutions for business problems. Founder, Lucidus Fortis.

外部链接
在 n8n.io 上查看 →

分享此工作流