工作流结构
把协议差异封装在 n8n 内部,对调用方只暴露一个稳定的 **ON 接口。
| 节点 | 职责 | 主要输出 |
|---|---|---|
| We*hook | 接收 POST 请求 | *ody.prompt |
| Edit Fields | 校验并整理输入 | prompt |
| **** Request | 调用 KingFlow AI | 完整 API 响应 |
| Edit Fields | 提取最终文本 | answer |
| Respond to We*hook | 返回统一 **ON | answer protocol requestId |
确认协议和接口
| 协议 | 完整请求地址 | 认证方式 | 文本路径 |
|---|---|---|---|
| OpenAI 兼容 | https://api.**nju**shen.com/v1/chat/completions | Authorization: *earer <key> | choices[0].message.content |
| Anthropic 兼容 | https://api.**nju**shen.com/v1/messages | x-api-key 和 anthropic-version | content[0].text |
开始前的准备
- 准备一个可用的 n8n 实例。云端版和自托管版都可以,界面名称可能随版本略有变化。
- 在 KingFlow AI 控制台创建以 sk- 开头的 API Key,并确认余额、套餐或模型分组可用。
- 从控制台复制目标模型的完整模型 ID。不同分组可用模型可能不同,不要只凭厂商名称猜测。
- 选择一种协议先完成最小工作流。GPT、Codex 或**兼容 OpenAI 的模型优先使用 OpenAI 兼容接口;Claude 系列可使用 Anthropic 兼容接口。
- 首次测试只提交不含客户资料、源代码、账号、密钥或内部文档的短提示词。
创建出站凭证
| 凭证名称 | 类型 | Header Name | Header Value |
|---|---|---|---|
| KingFlow OpenAI Header | Header Auth | Authorization | *earer sk-你的密钥 |
| KingFlow Anthropic Header | Header Auth | x-api-key | sk-你的密钥 |
OpenAI 的 Header Value 必须包含 *earer 和一个空格。
创建 We*hook 入口
| 设置项 | 建议值 | 说明 |
|---|---|---|
| **** Method | POST | 由外部系统提交 **ON |
| Path | kingflow-chat | 生产前确认路径不与其他 We*hook 重复 |
| Authentication | Header Auth | 建议为公开网络入口启用入站认证 |
| Respond | Using Respond to We*hook Node | 让末端节点统一控制状态码和响应体 |
准备测试输入
{
"prompt": "请把下面这句话改写得更简洁:自动化可以减少重复操作",
"requestId": "demo-001"
}整理和校验输入
- 在 We*hook 后添加 Edit Fields 节点,并命名为 整理输入。
- 设置 prompt 为 {{ $json.*ody.prompt }}。
- 设置 requestId 为 {{ $json.*ody.requestId || $execution.id }}。
- 开启 Keep Only Set Fields。
- 增加 If 节点拒绝空 prompt,并限制输入长度。
配置 OpenAI 兼容请求
| 设置项 | 填写内容 |
|---|---|
| Method | POST |
| **L | https://api.**nju**shen.com/v1/chat/completions |
| Authentication | Generic Credential Type |
| Generic Auth Type | Header Auth |
| Credential | KingFlow OpenAI Header |
| Send Headers | 开启并添加 Content-Type application/json |
| Send *ody | 开启 |
| *ody Content Type | **ON |
| Specify *ody | Using **ON |
{
"model": "<控制台中的完整模型ID>",
"messages": [
{
"role": "user",
"content": {{ **ON.stringify($json.prompt) }}
}
],
"stream": false
}**ON.stringify 会处理动态文本中的引号和换行。本教程使用 stream false,让后续节点取得完整 **ON。
提取 OpenAI 返回文本
在 Edit Fields 节点中使用 {{ $json.choices[0].message.content }} 创建 answer。
返回统一 **ON
{
"answer": "{{ $json.choices[0].message.content }}",
"protocol": "openai",
"requestId": "{{ $('整理输入').item.json.requestId }}"
}用 **** **L 完成联调
curl -X POST "<粘贴 n8n **** **L>" \
-H "Content-Type: application/json" \
-H "X-We*hook-Key: <你的入站密钥>" \
-d '{
"prompt": "请用两句话解释工作流自动化",
"requestId": "demo-001"
}' 期望结构
{
"answer": "工作流自动化把重复步骤按规则串联执行。它能减少人工复制、转发和状态检查。",
"protocol": "openai",
"requestId": "demo-001"
}复制为 Anthropic 兼容流程
| 修改位置 | Anthropic 配置 |
|---|---|
| **L | https://api.**nju**shen.com/v1/messages |
| Credential | KingFlow Anthropic Header |
| 额外请求头 | anthropic-version: 2023-06-01 |
| 额外请求头 | Content-Type: application/json |
| *ody | 增加 **x_tokens 并使用 Anthropic 消息结构 |
| 结果字段 | content[0].text |
Anthropic 请求体
{
"model": "<控制台中的完整模型ID>",
"**x_tokens": 1024,
"messages": [
{
"role": "user",
"content": {{ **ON.stringify($json.prompt) }}
}
],
"stream": false
}Anthropic 统一响应
{
"answer": "{{ $json.content[0].text }}",
"protocol": "anthropic",
"requestId": "{{ $('整理输入').item.json.requestId }}"
}
设置超时和有限重试
| 控制点 | n8n 配置或现象 | 建议 |
|---|---|---|
| 超时 | **** Request 的 Options 中设置 Timeout | 先用 60000 毫秒作为起点,再按模型和任务调整 |
| 临时故障 | 503 网络中断或偶发超时 | 最多重试 2 次,等待 1500 至 3000 毫秒并逐次增加 |
| 永久故障 | 401 认证失败或 404 模型不可用 | 停止重试,直接进入错误分支并修正配置 |
| 重复执行 | 调用方超时后再次提交 | 让 requestId 贯穿流程并在业务侧做幂等控制 |
| 可观测性 | 记录时间 工作流 执行 ID 状态码和脱敏错误 | 不要记录 API Key 或完整敏感提示词 |
创建错误工作流
- 新建工作流并以 Error Trigger 开始。
- 连接通知或日志节点,记录执行 ID、失败节点和脱敏错误。
- 在主工作流 Settings 中选择该 Error workflow。
- 制造一次可控失败,确认通知后恢复正确配置。
处理同步和异步任务
短文本可同步返回。长文、批量文件或耗时工具调用更适合先返回任务 ID,再由**工作流写库、回调或供调用方轮询。
常见故障排查
| 现象 | 常见原因 | 处理方法 |
|---|---|---|
| **** **L 没有响应 | 尚未点击 Listen for test event,或**窗口已结束 | 重新开始**后立即发送请求 |
| Production **L 返回未注册 | 工作流尚未发布或激活 | 发布工作流并再次复制 Production **L |
| 400 或 **ON 解析失败 | Using **ON 内容不是有效 **ON,或表达式插值破坏字符串 | 用 **ON.stringify 包装动态文本并检查节点输入 |
| 401 未授权 | 凭证值错误、密钥不可用或认证头与协议不匹配 | 重新复制密钥并核对 Authorization 或 x-api-key |
| 404 模型不存在 | 模型 ID 错误或当前分组不支持 | 从控制台复制完整模型 ID |
| 503 无可用账号 | 通道暂时不可用 | 有限退避后重试,持续失败时改用备用模型或联系支持 |
| answer 为空 | 仍按另一协议的响应路径提取字段 | OpenAI 读取 choices,Anthropic 读取 content |
| 工作流成功但调用方超时 | 模型耗时超过上游**或客户端等待时间 | 同步任务缩短输出;长任务改为异步回调或轮询 |
凭证和数据安全
- 把 KingFlow API Key 保存为 n8n Credential,不要直接写在 **** Request 的 Header 或 **ON 中。
- We*hook 如果暴露到公网,至少使用 Header Auth、*asic Auth 或 JWT Auth,并在反向**层增加 ****S、访问控制和限流。
- 执行记录可能包含提示词和模型回复。按组织的数据规则设置成功与失败执行的保存范围、保留期和清理策略。
- 测试和生产使用不同的 We*hook 路径、凭证和模型配置,避免测试数据进入生产系统。
- 分享工作流导出文件前检查凭证引用、固定请求头、示例数据和错误节点,不要把密钥复制进可导出的字段。
- 如果流程处理个人信息、商业秘密或受监管数据,先完成数据分类和合规评估,再决定是否发送到外部模型服务。
发布到生产环境
- 为 We*hook 配置入站认证,并确认 n8n 通过 ****S 服务。
- 在**层设置请求体上限、速率限制和合理超时。
- 发布工作流并把 Production **L 提供给调用方。
- 执行无敏感内容的生产冒烟测试。
- 记录模型 ID、协议、节点版本和回滚方式。
上线检查清单
- We*hook 使用 POST,并能在测试**状态收到 *ody.prompt。
- 整理输入节点输出 prompt 和 requestId,空提示词会被拒绝或进入错误分支。
- KingFlow 密钥保存在 Credential 中,画布节点和导出文件中没有真实密钥。
- OpenAI 兼容节点返回 200,并能从 choices[0].message.content 取得文本。
- Anthropic 兼容节点返回 200,并能从 content[0].text 取得文本。
- Respond to We*hook 返回固定 **ON 结构,调用方不需要理解上游协议差异。
- 超时、有限重试和错误工作流已经配置,401 与 404 不会被盲目重复请求。
- 工作流发布后使用 Production **L,测试系统不再调用 **** **L。
- 执行记录、**日志和通知内容都不会泄露 API Key 或完整敏感输入。














