
1. 项目概述为什么我们需要API中转如果你正在用N8N搭建AI工作流大概率遇到过这样的场景你兴冲冲地配置好了某个大模型的API节点比如调用DeepSeek或者智谱的接口结果一运行要么提示“Connection refused”要么返回一个“402 Insufficient Balance”或者“400 Bad Request”。尤其是在国内网络环境下直接调用一些海外AI服务商的API网络延迟、连接不稳定、甚至直接被墙都是家常便饭。更头疼的是当你需要统一管理多个API密钥、控制调用频率、或者给不同模型接口做一个格式适配时直接在N8N里一个个节点去配置不仅繁琐而且密钥泄露的风险也增大了。这就是“API中转”的价值所在。它本质上是一个中间层服务架设在你的N8N工作流和最终的目标API服务之间。你的N8N工作流不再直接调用原始API而是调用你自己搭建或配置的中转服务再由这个中转服务去请求真正的目标API。这么做的好处非常直接解决网络连通性问题、统一接口格式、集中管理密钥与配额、增加缓存层提升速度、以及实现请求的日志监控与审计。我最初接触这个概念是因为需要稳定调用Claude API。直接调用时常超时严重影响自动化流程的可靠性。后来发现这个模式几乎适用于所有第三方API的集成场景尤其是当你的N8N工作流作为企业自动化核心对稳定性和安全性有要求时自建一个中转层几乎是必选项。本教程就将带你从零开始在N8N工作流中集成并使用中转API让你彻底告别“API连接失败”的红色错误提示。2. 核心思路与方案选型自建还是使用现成服务在动手之前我们需要明确一个核心问题这个“中转API”层我们是自己从头搭建一个服务还是利用现有的开源项目或云服务这取决于你的技术栈、维护能力和具体需求。2.1 方案一自建反向代理服务器高自由度这是最彻底、控制力最强的方案。你可以用任何你熟悉的编程语言Node.js Express, Python FastAPI, Go Gin等写一个简单的Web服务器。这个服务器的核心逻辑就是接收来自N8N的请求包含参数和你的中转服务认证信息。在你的服务器代码中硬编码或从环境变量读取目标API的真正密钥。将N8N的请求体进行必要的格式转换如果需要并附加真正的API密钥转发给目标API。接收目标API的响应再原样或经处理后返回给N8N。优势绝对控制你可以自定义任何逻辑比如请求重试、负载均衡、多个API密钥轮询、响应数据清洗、复杂的错误处理等。安全性高真正的API密钥只存在于你的中转服务器上N8N工作流中只需配置中转服务器的访问令牌即使工作流被导出分享也不会泄露核心密钥。深度集成可以方便地与你的用户体系、计费系统结合。劣势开发与维护成本需要额外的服务器资源一台VPS和持续的维护。增加了复杂性引入了新的需要保证可用性的服务节点。实操心得对于个人或小团队如果你已经有一台海外VPS用于其他服务用Python的FastAPI在半小时内就能搭出一个可用的中转端点。重点在于做好请求日志和错误告警方便排查问题。2.2 方案二使用开源API网关项目平衡之选如果你不想从零写起但又需要比简单反向代理更强大的功能如限流、鉴权、监控面板那么使用开源API网关是绝佳选择。市面上像Apache APISIX,Kong,Tyk等都是成熟的企业级产品。但对于我们N8N集成场景我更推荐一个轻量级、配置化的神器lobe-chat项目中的api-forward组件或chatgpt-next-web项目中类似的反代功能。这些项目通常已经为你实现了针对OpenAI格式API这也是目前绝大多数AI模型API兼容的格式的反向代理、密钥管理和流式传输。你只需要修改配置文件设置你的目标API基础URL和密钥然后部署即可获得一个开箱即用的中转端点。优势快速部署通常Docker一行命令就能跑起来。功能齐全自带鉴权、多密钥管理、简单的监控。生态兼容专为AI API设计与N8N中的HTTP Request节点或AI专用节点契合度高。劣势灵活性受限功能边界由项目决定自定义复杂逻辑需要修改其源码。可能存在冗余项目可能附带你不需要的功能如前端聊天界面。2.3 方案三使用云函数/Serverless服务低成本启动如果你追求极致的低成本和无服务器运维云函数如阿里云函数计算、腾讯云SCF、Vercel Edge Function、Cloudflare Workers是完美的选择。你可以将方案一中的代理逻辑写成一个云函数然后通过HTTP触发器暴露为API地址。优势近乎零运维无需管理服务器。按量计费没有请求时不产生费用成本极低。全球加速利用云服务商的全球网络本身就能缓解部分网络问题。劣势冷启动延迟函数一段时间不被调用会“冷却”下次请求会有100ms-几秒的初始化延迟。运行时长限制通常有单次执行超时限制如10秒不适合处理超长对话的流式响应。调试复杂度本地测试和线上调试环境略有不同。我的选择建议 对于大多数N8N用户尤其是以稳定和长期使用为目标我推荐方案二。它平衡了易用性、功能性和控制力。本教程后续的实操部分也将以部署一个开源的、针对AI API优化的反向代理服务为例进行展开因为它最贴合“N8N工作流调用AI模型”这一核心场景。3. 实战准备部署你的API中转服务我们选择使用一个维护活跃、配置简单的开源项目chatgpt-next-web的反代功能来构建中转服务。它本质上是一个配置化的反向代理支持多个平台API后端。3.1 环境与依赖准备你需要准备一台服务器可以是国内的云服务器也可以是海外服务器如Google Cloud, AWS Lightsail, Vultr等。如果主要为了加速海外API如OpenAI, Claude选择海外服务器如果为了加速国内API或兼顾选择国内服务器。最低配置1核1G即可。已安装Docker和Docker Compose这是最简单快速的部署方式。确保你的服务器上已经安装了Docker引擎和Docker Compose插件。可以通过运行docker --version和docker compose version来检查。一个域名可选但推荐为你的中转服务绑定一个域名并配置SSL证书HTTPS这样在N8N中调用更安全、更规范。你可以使用免费的Let‘s Encrypt证书。3.2 部署步骤详解假设你已经有一台安装了Docker的Linux服务器如Ubuntu 22.04并通过SSH连接。步骤1创建项目目录和配置文件在你的服务器上创建一个新的目录并进入该目录。mkdir n8n-api-proxy cd n8n-api-proxy步骤2创建docker-compose.yml文件使用vim或nano编辑器创建该文件vim docker-compose.yml将以下内容粘贴进去。这里我们使用chatgpt-next-web的官方镜像但主要利用其环境变量来配置反向代理。version: 3.8 services: api-proxy: image: yidadaa/chatgpt-next-web:latest container_name: n8n-api-proxy restart: unless-stopped ports: - 3000:3000 # 将容器内的3000端口映射到宿主机的3000端口 environment: - OPENAI_API_KEYsk-your-real-openai-key-here # 这里填写你的真实OpenAI API密钥作为示例后端 - OPENAI_API_BASE_URLhttps://api.openai.com/v1 # 目标API的基础URL - CODEyour_access_code_123 # 访问密码用于保护你的中转接口N8N调用时需要提供 - HIDE_USER_API_KEY1 # 隐藏用户自带API密钥的功能我们统一使用上面配置的密钥 - DISABLE_GPT40 - ENABLE_BALANCE_QUERY1 # 注意我们实际上不会使用它的前端主要是用它的代理功能。 # 更多环境变量请参考项目文档https://github.com/Yidadaa/ChatGPT-Next-Web关键参数解析OPENAI_API_KEY这是目标服务的API密钥。例如你想中转OpenAI就填OpenAI的密钥想中转智谱AI就填智谱的密钥并在下面的OPENAI_API_BASE_URL中修改为对应地址。OPENAI_API_BASE_URL这是目标服务的API端点。这是中转配置的核心比如对于OpenAI:https://api.openai.com/v1对于Claude (Anthropic):https://api.anthropic.com/v1(注意Anthropic的API格式与OpenAI不完全相同可能需要额外适配)对于智谱AI:https://open.bigmodel.cn/api/paas/v4对于DeepSeek:https://api.deepseek.com/v1CODE这是保护你中转服务的密码。N8N在调用你的中转服务时需要在请求头中提供这个密码否则请求会被拒绝。务必修改成一个强密码。HIDE_USER_API_KEY1这个设置很重要它告诉服务忽略请求中可能自带的API密钥始终使用我们在环境变量OPENAI_API_KEY中配置的那个密钥。这样保证了密钥管理的统一性和安全性。步骤3启动服务在docker-compose.yml文件所在目录运行docker compose up -d-d参数表示在后台运行。执行后Docker会拉取镜像并启动容器。你可以用docker ps查看容器是否运行正常。步骤4验证服务服务启动后默认在服务器的3000端口监听。你可以在浏览器访问http://你的服务器IP:3000会看到ChatGPT-Next-Web的聊天界面。但这不重要我们关注的是它的API代理端点。真正的代理端点路径是/v1/chat/completions等与OpenAI API路径保持一致。你可以用一个简单的curl命令测试curl -X POST http://localhost:3000/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer your_access_code_123 \ # 注意这里Bearer后面跟的是你设置的CODE -d { model: gpt-3.5-turbo, messages: [{role: user, content: Hello, world!}], stream: false }如果配置正确这个请求会被中转服务转发到OPENAI_API_BASE_URL指定的真实地址并使用OPENAI_API_KEY中的密钥最后将响应返回给你。注意事项这里有一个关键点原版chatgpt-next-web的鉴权方式是期望在Authorization头里传递CODE而不是标准的Bearer API_KEY。但有些AI模型的原生API要求标准的Bearer令牌。因此我们的中转服务在转发时会进行“头信息转换”它收到N8N发来的、带有CODE的Authorization头进行验证验证通过后它丢弃或忽略这个头然后重新构造一个指向目标API的Authorization头其值为Bearer ${OPENAI_API_KEY}。这个过程对N8N是透明的你只需要关心中转服务的地址和密码。3.3 配置域名与HTTPS生产环境必备为了让服务更稳定、安全并且方便N8N调用很多云服务商的N8N托管环境要求调用HTTPS接口强烈建议配置域名和SSL。域名解析在你的域名管理后台添加一个A记录将你喜欢的子域名如api-proxy.yourdomain.com指向你的服务器公网IP。安装Nginx并配置反向代理在服务器上安装Nginx然后创建一个新的站点配置文件如/etc/nginx/sites-available/api-proxy。server { listen 80; server_name api-proxy.yourdomain.com; # 你的域名 location / { proxy_pass http://localhost:3000; # 指向我们刚才启动的Docker服务 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }创建软链接启用配置sudo ln -s /etc/nginx/sites-available/api-proxy /etc/nginx/sites-enabled/然后测试配置并重载Nginxsudo nginx -t sudo systemctl reload nginx。申请SSL证书使用Certbot可以免费申请Let‘s Encrypt证书。sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d api-proxy.yourdomain.com按照提示操作Certbot会自动修改你的Nginx配置启用HTTPS并设置自动续期。完成以上步骤后你的中转API地址就变成了https://api-proxy.yourdomain.com/v1/chat/completions。记下这个地址和你的CODE访问密码下一步我们将在N8N中配置它。4. 在N8N工作流中集成中转API现在中转服务已经就绪我们进入N8N看看如何在工作流中调用它。这里有两种主流方式适用于不同场景。4.1 方法一使用“HTTP Request”节点通用性强这是最灵活的方法可以调用任何符合RESTful规范的API包括我们的中转服务。添加节点在你的N8N工作流画布上添加一个“HTTP Request”节点。配置节点参数Request Method:POSTURL: 填写你的中转API完整地址例如https://api-proxy.yourdomain.com/v1/chat/completionsAuthentication: 选择Generic CredentialName: 任意如Proxy-AuthHTTP Header:AuthorizationValue:Bearer your_access_code_123注意这里就是你在docker-compose.yml中设置的CODEHeaders:点击“Add Header”Name:Content-TypeValue:application/jsonBody Parameters:Send Body:YesContent Type:JSONBody: 这里需要根据你调用的模型API文档来构造。以OpenAI格式为例{ model: gpt-3.5-turbo, messages: [ { role: user, content: {{$json.question}} // 这里可以引用上游节点的输出实现动态内容 } ], temperature: 0.7, stream: false // N8N处理流式响应较复杂建议先关闭 }测试执行点击“Execute Node”进行测试。如果一切配置正确你应该能在“Output”面板看到从目标AI模型返回的响应结果。优势万能方法可以对请求和响应进行完全控制适合需要复杂预处理或后处理的场景。劣势需要手动构造符合目标API格式的请求体对不熟悉的API容易出错。4.2 方法二使用“AI”相关节点如OpenAI、ChatGPT节点更便捷N8N内置了诸如“OpenAI”、“ChatGPT”等节点它们提供了图形化界面来配置模型、提示词等参数。这些节点默认指向官方的API端点但我们可以通过修改其“Credential”来指向我们的中转服务。创建或编辑认证信息在N8N左侧边栏点击“Credentials” - “Add Credential”。选择“OpenAI API”。在配置页面中Name: 给你的这个认证起个名字如My-OpenAI-Proxy。API Key: 这里不填你的真实OpenAI密钥而是填写你中转服务的访问密码CODE例如your_access_code_123。Base URL: 这是最关键的一步。将默认的https://api.openai.com/v1替换成你的中转服务地址并确保包含/v1路径如果你的中转服务路径是/v1的话。例如https://api-proxy.yourdomain.com/v1。点击“Save”保存。在工作流中使用从节点库中添加一个“ChatGPT”或“OpenAI”节点。在节点的属性面板中找到“Credential for OpenAI API”下拉框选择你刚刚创建的My-OpenAI-Proxy。接下来你就可以像正常使用OpenAI节点一样选择模型、编写系统提示词和用户消息了。当你执行节点时N8N会将请求发送到你配置的Base URL即中转服务并使用你填写的API Key即CODE进行认证。中转服务验证CODE后会用自己的真实密钥向目标API发起请求。优势使用体验和原生调用OpenAI完全一致无需关心请求体格式图形化配置非常方便。劣势仅适用于兼容OpenAI API格式的模型和服务。如果你的中转服务适配的是其他格式如Claude的原生格式此方法可能不适用。实操心得我强烈推荐方法二只要你的中转服务兼容OpenAI API格式。它极大地简化了配置降低了出错率。目前很多开源的反代项目包括我们使用的chatgpt-next-web和云服务商提供的AI API中转都优先兼容OpenAI格式因为这是事实上的标准。在创建Credential时务必检查“Base URL”末尾的/v1是否与你的中转服务路径匹配这是最常见的配置错误。5. 高级配置与场景化应用基础搭建完成后我们可以根据更复杂的需求来优化和扩展这个中转层。5.1 中转多个不同的AI模型API你的业务可能需要同时调用OpenAI、Claude和智谱AI。你有两种架构选择选择A部署多个独立的中转服务实例为每个目标API部署一个独立的Docker容器监听不同的端口并配置不同的CODE和OPENAI_API_BASE_URL。优点隔离性好一个服务出问题不影响其他。缺点管理多个服务占用更多资源。N8N配置在N8N中为每个服务创建不同的Credential对应不同的Base URL和CODE。选择B使用支持多后端路由的网关使用更高级的开源网关如APISIX或Kong。你可以配置路由Route和上游Upstream。例如配置路由/openai/*转发到OpenAI官方API路由/claude/*转发到Anthropic API路由/zhipu/*转发到智谱API。在网关层面统一添加认证插件使用同一个CODE。N8N配置在N8N中你只需要使用一个Base URL比如https://gateway.yourdomain.com然后通过修改请求路径来切换模型。例如调用OpenAI就请求/openai/v1/chat/completions调用Claude就请求/claude/v1/messages假设网关做了路径重写。优点统一入口管理方便功能强大可统一限流、鉴权、监控。缺点网关的配置和学习成本较高。对于大多数用户从简单出发选择A更直观可控。当你的模型调用变得非常频繁和复杂时再考虑迁移到选择B。5.2 实现请求日志与监控生产环境中知道谁在什么时候调用了什么、成功与否、耗时多少至关重要。我们可以在中转服务层面轻松添加日志。如果你用的是自建Node.js/Python服务可以在转发请求的前后打印日志。如果使用我们演示的Docker方案可以查看容器日志docker logs -f n8n-api-proxy但这只能看到服务本身的运行日志看不到详细的请求/响应体。一个更好的方法是在N8N工作流中串联一个“Function”节点或“Set”节点来记录日志。例如在HTTP Request节点之后添加一个“Function”节点编写类似下面的代码将关键信息发送到你自己的日志系统如自建数据库、或第三方日志服务// 假设上一个HTTP Request节点的输出是 response const requestData $input.first().json; // 这是AI的响应 const requestConfig $node[HTTP Request].parameters; // 这是发出的请求配置 // 构造日志对象 const logEntry { timestamp: new Date().toISOString(), workflowId: $workflow.id, nodeName: $node.name, requestUrl: requestConfig.url, requestBody: JSON.parse(requestConfig.body), // 注意body是字符串 responseStatus: requestData.statusCode, responseBody: requestData.body, responseTime: Date.now() - $node[HTTP Request].startTime // 估算响应时间 }; // 这里可以是将logEntry写入数据库、发送到Webhook等操作 // 例如发送到另一个HTTP端点如日志收集服务 // await $http.post(https://your-log-server/log, { body: logEntry }); // 为了不影响主流程我们只把日志附加到数据流中或者直接return原数据 items[0].json.log logEntry; return items;更专业的做法是使用N8N的“Webhook”节点触发一个专门的日志记录工作流实现异步、非阻塞的日志记录。5.3 处理流式响应Streaming一些AI模型支持流式响应stream: true可以逐字返回结果提升用户体验。但在N8N的自动化工作流中我们通常不需要“看到”逐字输出的过程而是需要获取完整响应后再进行后续处理。因此在“HTTP Request”节点中建议将stream参数设为false。如果你确实需要处理流式响应例如将流式内容实时转发到另一个聊天界面N8N的“HTTP Request”节点默认可能无法正确解析。你需要在“HTTP Request”节点的“Options”中将“Response Format”设置为“File”这样它会将原始响应流保存为一个文件或Buffer。在后续的“Function”节点中手动解析这个Buffer按照Server-Sent Events (SSE) 格式拆分成多个JSON块进行处理。这个过程相对复杂除非有明确需求否则在自动化工作流中建议关闭流式。6. 常见问题排查与优化技巧在实际使用中你肯定会遇到各种问题。下面是我踩过坑后总结的排查清单和优化建议。6.1 连接与超时问题问题现象可能原因排查步骤与解决方案Connection refused或Unable to connect to API1. 中转服务未运行。2. 服务器防火墙未开放端口。3. Nginx配置错误或未重启。4. 域名解析失败。1.docker ps检查容器状态docker logs查看错误日志。2.sudo ufw status检查防火墙开放对应端口如3000, 80, 443。3.sudo nginx -t测试配置sudo systemctl restart nginx重启。4.ping api-proxy.yourdomain.com或nslookup检查域名。Timeout或响应极慢1. 中转服务器到目标API网络不佳。2. 目标API本身响应慢。3. 中转服务或N8N所在环境资源不足。1. 在服务器上curl -o /dev/null -s -w %{time_total}\n [目标APIURL]测试直接连接速度。2. 检查目标API服务状态页面如有。3. 增加N8N HTTP Request节点的“Timeout”设置默认10000ms可适当调大。4. 监控服务器CPU/内存使用率。SSL证书错误1. 自签证书不被信任。2. 证书过期。3. 中转服务配置的Base URL是HTTP但实际需要HTTPS或反之。1. 确保使用受信任的CA如Let‘s Encrypt颁发的证书。2. 定期更新证书Certbot可自动续期。3. 仔细检查OPENAI_API_BASE_URL和N8N中配置的URL协议http/https必须一致且正确。6.2 认证与授权问题问题现象可能原因排查步骤与解决方案401 Unauthorized或403 Forbidden1. N8N中配置的CODE密码错误。2. 中转服务环境变量CODE未设置或设置后未重启服务。3. 请求头格式错误。1. 核对docker-compose.yml中的CODE值与N8N Credential或HTTP头中的值是否完全一致注意空格和大小写。2. 修改环境变量后执行docker compose down docker compose up -d重启服务。3. 确保HTTP头是Authorization: Bearer your_code格式。402 Insufficient Balance1. 目标API账户余额不足或配额用完。2. 中转服务配置的API密钥错误或已失效。1. 登录目标API平台如OpenAI, Anthropic检查余额和用量。2. 检查docker-compose.yml中的OPENAI_API_KEY是否正确并确保密钥有权限调用对应模型。404 Not Found请求的URL路径错误。1. 检查N8N中配置的完整URL特别是/v1/chat/completions这部分路径是否正确。2. 检查中转服务项目文档确认其暴露的API端点路径。6.3 请求与响应内容问题问题现象可能原因排查步骤与解决方案400 Bad Request1. 请求体JSON格式错误。2. 缺少必要参数。3. 参数值不符合要求如model不存在。4.上下文长度超限常见错误。1. 使用JSON验证工具检查N8N中构造的请求体。2. 对照目标API官方文档检查必填字段如model,messages。3. 确认model参数名称正确例如智谱AI是glm-4而非gpt-4。4. 错误信息如maximum context length is X tokens需在N8N中预处理裁剪过长的输入文本。响应内容截断或不完整1. 设置了max_tokens参数且值太小。2. 流式响应未正确处理。3. 网络中断。1. 适当增加max_tokens参数值或设为null取消限制如果API支持。2. 确保在自动化工作流中设置stream: false。3. 检查网络稳定性增加超时时间。响应格式不符合N8N后续节点预期AI返回的完整响应是一个复杂的JSON但后续节点可能只需要其中的“回答”文本。在AI节点后添加一个“Function”节点或“JSON Transform”节点使用表达式提取所需内容。例如对于OpenAI格式提取回答文本的表达式通常是{{$json.choices[0].message.content}}。6.4 性能与成本优化技巧启用响应缓存对于内容生成类AI请求如果问题相同答案很可能相同。可以在中转服务层如使用Nginx缓存或N8N工作流层使用“Cache”节点添加缓存逻辑对相同输入直接返回缓存结果大幅降低API调用次数和延迟。设置频率限制在中转服务如APISIX/Kong或N8N工作流开头设置限流逻辑防止工作流意外循环或外部滥用导致API费用激增。使用更便宜的模型进行预处理在复杂工作流中可以先使用便宜、快速的模型如gpt-3.5-turbo进行内容摘要、分类或格式检查只有通过初步筛选的内容才交给昂贵的大模型如GPT-4进行深度处理。监控费用告警定期检查目标API平台的使用量和费用。可以设置一个简单的N8N定时工作流每天调用API的用量查询接口如果费用超过阈值就通过邮件或即时通讯工具发送告警。连接池与长连接如果你的中转服务是自建的如Node.js服务确保HTTP客户端使用了连接池并与目标API保持长连接可以避免频繁的TCP握手和SSL握手提升性能。搭建并熟练使用API中转层是让你的N8N AI工作流从“玩具”升级为“生产工具”的关键一步。它带来的稳定性、安全性和管理便利性会远远超过初期搭建所投入的一点时间。当你不再需要为网络波动、密钥泄露或格式转换而烦恼时你就可以更专注于利用N8N构建真正强大、可靠的业务自动化流程了。