1. 为什么要在 n8n 里接大模型:从手动脚本到可视化流水线
n8n 是一个开源的工作流自动化平台,用节点和连线把「触发器 + 数据处理 + 第三方服务调用」串成可视化流程。你可以把它理解成一个能自己跑起来的流程图工具:左边进来数据,中间经过一串加工,右边把结果发出去。它和写 Python 脚本最大的区别在于,整条流水线在画布上一目了然,改流程不用重写代码,节点生态里有几百个现成的 HTTP、定时、数据库、IM 节点可以直接拖。
那为什么要在 n8n 里接大模型?因为很多重复劳动的核心环节其实是「判断」和「生成」——把一段原始数据总结成三条要点、给一条工单自动打标签、根据内容决定走哪个分支。这些活以前要么人工做,要么写一堆 if-else 规则,维护起来很痛苦。接上大模型之后,这些判断和生成环节就能交给模型,n8n 负责调度和分发,整条链路就活了。
适合谁看这篇?如果你已经会一点命令行、能看懂 JSON,想把「取数 → 加工 → 调模型 → 分发」这类多步 AI 任务串成自动化工作流,那这篇就是给你写的。我会从 docker-compose 部署讲起,然后接大模型、配凭据,最后用 Claude Code + n8n-mcp 做进阶,全程给可复制的配置片段,并用一次端到端运行验证调用是否成功。
先说清楚一个前提:n8n 自托管部署后,数据不出自己的机器,敏感数据可控,还能二次扩展。个人使用完全免费,商业团队要注意它的 Fair-code 许可,二次分发或扩展时要看开源协议条款。这一点在选型阶段就要想清楚,别等上线了才发现许可问题。
我试过用 npm 全局安装的方式在本地跑 n8n,开发阶段确实最省事,命令行直接n8n就拉起来了。但一旦要长期跑、要定时触发、要接 Webhook,本地进程一关就断,所以服务器场景还是建议 Docker 部署,数据持久化到本机目录,重启不丢工作流。下面就从 Docker 部署开始。
2. TaoToken 前置准备:统一 Key 与 Base URL 怎么拿
在接大模型之前,得先解决「用哪个接口、拿什么 Key」的问题。n8n 里接模型最通用的方式是 HTTP Request 节点,只要接口兼容 OpenAI 的/v1/chat/completions格式就能接。但如果你同时要用好几个模型,每个厂商一个 Key、一个 Base URL,凭据管理会变得很乱,工作流里到处散落着不同的地址和密钥,排错时很难定位。
TaoToken 在这里的角色是一个统一的 Key/API 通道:你拿一个 Key,配一个 Base URL,就能在 n8n 的凭据里统一管理,工作流里换模型只需要改model字段,不用动地址和认证。官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end ,API 地址是 https://taotoken.net/api ,注意 API 地址后面不加 UTM 参数,直接用它作为 Base URL 的基础。
具体要准备三样东西,这三件套在后面每个环节都会反复出现:
第一是 Base URL。在 n8n 的 HTTP Request 节点里,完整的请求地址是https://taotoken.net/api/v1/chat/completions。如果你用的是 OpenAI 节点,Base URL 填https://taotoken.net/api/v1,节点会自动拼上/chat/completions。这两个写法别搞混,填错了会报 404。
第二是 API Key。去控制台创建一个,格式通常是一串以sk-开头的字符串。这个 Key 要放进 n8n 的凭据里,不要硬编码在节点的 Header 里,否则工作流导出分享时密钥就泄露了。控制台地址在 https://taotoken.net/console ,创建 Key 的页面在 https://taotoken.net/api-keys 。
第三是 Model ID。这个取决于你要调哪个模型,比如gpt-4o-mini、claude-3-5-sonnet这类标识符。Model ID 写错是最常见的报错来源之一,返回里会提示模型不存在。你可以在模型对话页面先手动试一次,确认模型名和返回都正常,再写进工作流。模型对话入口在 https://taotoken.net/model-chat 。
把这三样准备好之后,n8n 里的凭据配置就有据可依了。我建议在 n8n 里建一个通用的 Header Auth 凭据,名字叫「TaoToken」,Header 名填Authorization,值填Bearer sk-你的Key。这样所有需要调模型的节点都复用这一个凭据,换 Key 只改一处。
注意:Base URL 和 API Key 不要写进工作流的 JSON 里再提交到 Git,n8n 的凭据是单独存储的,导出工作流时凭据只保留引用 ID,不会带出明文密钥。这个机制要用好。
如果你后面要用 Claude Code 做进阶,还需要一个 Coding Plan 或者对应的接入配置。Claude Code 的接入文档在 https://taotoken.net/doc ,里面有 Base URL 和认证方式的说明。长期做编码和 Agent 任务的话,Coding Plan 会更合适,入口在 https://taotoken.net/coding-plan 。这些先记着,到第 4 节会具体用到。
3. 可复制配置:docker-compose 部署 + n8n 凭据 + 模型节点
这一节是全文最核心的部分,所有配置都给完整片段,你可以直接复制改。先部署 n8n,再配凭据,最后配模型节点。
3.1 docker-compose 部署 n8n
在服务器上建一个目录,比如/opt/n8n,在里面创建docker-compose.yml:
version: "3.8" services: n8n: image: n8nio/n8n:latest container_name: n8n restart: unless-stopped ports: - "5678:5678" environment: - N8N_HOST=你的服务器IP或域名 - N8N_PORT=5678 - N8N_PROTOCOL=http - WEBHOOK_URL=http://你的服务器IP或域名:5678/ - GENERIC_TIMEZONE=Asia/Shanghai - N8N_ENCRYPTION_KEY=换成一串你自己的随机字符串 - N8N_SECURE_COOKIE=false volumes: - ./n8n_data:/home/node/.n8n user: "1000:1000"几个参数要重点说。N8N_ENCRYPTION_KEY是加密凭据用的,一旦设定就不要改,改了之后已存的凭据全部解不开,得重新配。WEBHOOK_URL必须填外部能访问到的地址,否则 Webhook 触发器生成的 URL 是容器内部的,外部回调打不进来。N8N_SECURE_COOKIE=false是因为我们用 http 访问,如果上了 https 就改成 true。
启动命令:
cd /opt/n8n docker compose up -d docker compose logs -f n8n看到日志里出现Editor is now accessible via: http://...:5678就说明起来了。浏览器访问http://你的服务器IP:5678,第一次会让你设置管理员账号,设完就进画布了。
数据持久化在./n8n_data目录,备份的时候直接打包这个目录就行。升级 n8n 版本时,先docker compose pull拉新镜像,再docker compose up -d,数据不会丢。
3.2 配置 TaoToken 凭据
进 n8n 后,左侧菜单点 Credentials,新建一个凭据,类型选「Header Auth」。配置如下:
{ "name": "TaoToken", "type": "httpHeaderAuth", "data": { "name": "Authorization", "value": "Bearer sk-你的Key" } }保存后这个凭据就有了一个 ID,后面节点引用它。注意Bearer和 Key 之间有一个空格,少了空格会报 401。
3.3 配置 HTTP Request 节点调模型
新建一个工作流,拖一个 HTTP Request 节点,配置如下:
{ "method": "POST", "url": "https://taotoken.net/api/v1/chat/completions", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "Content-Type", "value": "application/json" } ] }, "sendBody": true, "specifyBody": "json", "jsonBody": "{\n \"model\": \"gpt-4o-mini\",\n \"messages\": [\n { \"role\": \"system\", \"content\": \"你是一个严谨的助手,用简洁的中文回答。\" },\n { \"role\": \"user\", \"content\": \"把下面这段内容总结成三条要点:{{ $json.content }}\" }\n ],\n \"temperature\": 0.3,\n \"max_tokens\": 1024\n}" }这里{{ $json.content }}是 n8n 的表达式,会把上游节点传来的content字段动态拼进 prompt。这样一条工作流就能批量处理不同数据,不用为每条数据改节点。
如果你更想用 OpenAI 节点,配置更简单:凭据选 OpenAI 类型,Base URL 填https://taotoken.net/api/v1,API Key 填你的 Key,模型名填 Model ID。节点会自动处理请求格式和响应解析,少写很多字段。但 HTTP Request 节点的好处是不挑模型,本地 Ollama、vLLM 起的模型,或者任意兼容 OpenAI 格式的网关,都能复用同一套配置。
3.4 响应解析
HTTP Request 节点返回的是完整 JSON,生成结果在choices[0].message.content。在下一个节点里用表达式取:
{{ $json.choices[0].message.content }}如果返回结构不对,比如报Cannot read property '0' of undefined,说明choices字段不存在,通常是请求本身失败了,往上翻看 HTTP 节点的返回体,里面会有错误信息。
4. 验证请求:一次端到端工作流跑通
配置写完不算数,得实际跑一次确认调用成功。这一节搭一条最小可用的工作流:手动触发 → 调模型 → 输出结果。
4.1 搭工作流
在画布上放三个节点:
第一个是 Manual Trigger,手动触发,方便调试。
第二个是 Set 节点,造一条测试数据。在 Set 节点里加一个字段content,值填一段测试文本,比如「n8n 是一个开源的工作流自动化平台,支持自托管部署,节点生态丰富。」
第三个是前面配好的 HTTP Request 节点,URL 指向https://taotoken.net/api/v1/chat/completions,凭据选 TaoToken,body 里用{{ $json.content }}引用上游数据。
三个节点连起来:Manual Trigger → Set → HTTP Request。
4.2 执行并看结果
点画布上方的「Execute Workflow」,工作流开始跑。HTTP Request 节点跑完后,点开它的输出,应该能看到类似这样的返回:
{ "id": "chatcmpl-xxx", "object": "chat.completion", "model": "gpt-4o-mini", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "1. n8n 是开源工作流自动化平台。\n2. 支持自托管部署。\n3. 节点生态丰富。" }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 45, "completion_tokens": 32, "total_tokens": 77 } }看到choices[0].message.content里有模型生成的摘要,就说明整条链路通了:n8n 触发 → 数据加工 → 调 TaoToken 接口 → 模型返回 → 结果落回工作流。usage字段里能看到 token 消耗,方便你估算成本。
4.3 接上真实场景
验证通过后,把 Manual Trigger 换成 Schedule Trigger,填 cron 表达式0 9 * * *,就是每天早上 9 点自动跑。把 Set 节点换成 HTTP Request 抓取真实数据源,把最后的输出接到通知节点(钉钉、企业微信、邮件都行),一条「定时抓取 → AI 摘要 → 推送」的工作流就成型了。
Webhook 场景同理:把触发器换成 Webhook Trigger,n8n 会生成一个回调 URL,外部系统 POST 过来就触发,后面接模型做分类或生成,再用 Switch 节点按结果分流。这两个模式掌握了,大部分「AI 批量处理业务数据」的需求都能套上去。
5. 常见报错排查:401、local proxy failed、reading choices、OAuth
接模型的过程中,报错基本集中在几个地方。这一节按真实报错对照排查,每个都给定位方法和修复动作。
5.1 401 Unauthorized
返回体里通常是{"error": {"message": "Invalid API key", "type": "invalid_request_error"}}。原因有三个:Key 填错、Bearer和 Key 之间少了空格、凭据没选对。排查顺序是先看 n8n 凭据里的值是不是Bearer sk-xxx格式,再看节点有没有引用这个凭据。如果 Key 是从控制台复制的,注意别把首尾空格带进去。
5.2 local proxy failed / connection refused
这个报错说明 n8n 容器连不上外部接口。如果你在容器里配了 HTTP 代理环境变量,但代理地址不通,就会报这个。检查docker-compose.yml里有没有HTTP_PROXY、HTTPS_PROXY这类环境变量,有的话先注释掉重启容器。另外确认容器的 DNS 能解析外部域名,docker exec -it n8n ping taotoken.net试一下。
5.3 Cannot read property '0' of undefined(reading choices)
这个报错是响应解析时choices字段不存在。根本原因通常是请求失败了,返回体里是错误信息而不是正常的 completion 结构。往上翻 HTTP Request 节点的原始返回,看error字段写了什么。常见的是 Model ID 写错,返回model not found;或者 body 的 JSON 格式有问题,比如多了个逗号导致解析失败。
5.4 OAuth 相关报错
如果你用的是 OpenAI 节点而不是 HTTP Request 节点,凭据类型选错成 OAuth 会报OAuth token request failed。OpenAI 节点应该用 API Key 类型的凭据,不是 OAuth。删掉重建一个,类型选对就行。
5.5 Claude Code + n8n-mcp 的配置三件套
进阶部分用 Claude Code 调 n8n-mcp 时,配置里必须写全三件套:Base URL、Key、Model ID。接入命令是:
claude mcp add n8n-mcp \ -e MCP_MODE=stdio \ -e LOG_LEVEL=error \ -e DISABLE_CONSOLE_OUTPUT=true \ -- npx n8n-mcp这条命令把 n8n-mcp 注册成 Claude Code 的 MCP 工具。之后 Claude Code 就能通过自然语言调 n8n 的 API 创建工作流。但要注意,n8n-mcp 连的是你的 n8n 实例,需要在环境变量里配 n8n 的地址和 API Key,否则 Claude Code 不知道往哪创建。n8n 的 API Key 在设置里的 API 页面生成,和 TaoToken 的 Key 是两回事,别搞混。
如果 Claude Code 报MCP server failed to start,先单独跑npx n8n-mcp看能不能起来,再看环境变量有没有漏。n8n-mcp 的项目地址在 https://github.com/czlonkowski/n8n-mcp ,文档里有完整的环境变量列表。
注意:Claude Code + n8n-mcp 适合设计期和调试期,工作流稳定跑起来之后,线上执行还是交给 n8n 自身的调度。把 AI 放在搭台子的位置,n8n 放在跑台子的位置。
6. 进阶链路与统一 Key 的长期用法
把前面的部署、凭据、模型节点、排错都跑通之后,进阶的方向有两个:一是用 Claude Code + n8n-mcp 对话式搭工作流,二是把工作流本身纳入版本管理。
对话式搭工作流的流程是这样的:你在 Claude Code 里说「创建一个工作流,每天早 9 点抓取某个接口的数据,用大模型生成摘要,推送到钉钉群」,Claude Code 理解意图后,通过 n8n-mcp 调 n8n 的 API,自动创建节点、连线、设置参数,最后生成一个可运行的完整工作流。你只需要在画布上核对一下,把敏感参数(API Key、内部地址)手动补上。这比手搓节点快很多,尤其是节点多、连线复杂的时候。
工作流版本管理是另一个值得做的点。n8n 的工作流本质是 JSON,导出后可以纳入 Git 仓库。用 Claude Code 做 diff 解读——「这个版本改了哪个节点、会影响哪条链路」——比人肉盯画布靠谱。工作流出问题报错时,Claude Code 能直接读工作流 JSON 和错误日志,定位是哪个节点、哪段表达式出的问题,甚至给出修改建议。
这两个进阶用法都依赖一个稳定的模型接入通道。TaoToken 的统一 Key 在这里的价值就体现出来了:不管你是 HTTP Request 节点、OpenAI 节点,还是 Claude Code 调模型,都用同一个 Base URL 和 Key,换模型只改 Model ID。凭据管理集中在一处,排错时不用在多个厂商的 Key 之间来回切换。
长期做编码和 Agent 任务的话,Coding Plan 会比按量付费更划算,入口在 https://taotoken.net/coding-plan 。接入文档在 https://taotoken.net/doc ,里面有 Claude Code 的完整配置说明。API Key 管理在 https://taotoken.net/api-keys ,模型对话测试在 https://taotoken.net/model-chat 。
最后说一个实操细节:n8n 的凭据是加密存储的,N8N_ENCRYPTION_KEY一旦设定就不要改。迁移服务器时,把n8n_data目录和这个 Key 一起搬过去,凭据才能解开。如果只搬了数据没搬 Key,所有凭据都得重新配。这个坑我在迁移时踩过一次,工作流里几十个节点全要重配凭据,花了大半天。所以部署时就把 Key 记在安全的地方,别等出事才找。