DeepAI Paper API 中转站,OpenAI Compatible API,代码 Agent 教程,客户端接入,错误排查 n8n 接入 DeepAI API 中转站:JSON mode 报 Internal Error 怎么定位真实 400

n8n 接入 DeepAI API 中转站:JSON mode 报 Internal Error 怎么定位真实 400

n8n 通过 OpenAI 节点、AI Agent 或 HTTP Request 接入 DeepAI API 中转站 时,很多工作流会要求模型返回结构化 JSON。这个需求看起来简单,但一旦启用 response_format: {"type":"json_object"},请求就会多一个隐藏约束:消息或 instructions 里必须明确包含 json 这个词。否则上游会返回 400。如果客户端只显示 Internal Error,排查会非常痛苦。

n8n 接入 DeepAI API 中转站时 JSON mode Internal Error 与 response_format json_object 的排查流程
JSON mode 不是只加 response_format。请求内容也要明确要求 JSON 输出,否则会被上游拒绝。

GitHub Issue 背景:n8n 只显示 Internal Error

这个问题来自 n8n Issue #10206。用户创建了一个 OpenAI Assistant,并把输出设置为 JSON,但没有在 assistant instructions 或 prompt 里说明 JSON 应该如何输出。随后在 n8n OpenAI 节点里调用该 Assistant 时,节点只抛出泛泛的 Internal Error,日志里也看不到真正原因。

用户最后在 OpenAI dashboard 里才看到真实错误:

Thread messages or instructions must contain the word 'json'
in some form to use 'response_format' of type 'json_object'.

后续 n8n 修复了错误处理,用户复测后能直接看到完整 400 信息。该修复已在 n8n 1.56.0 发布。

根因:JSON mode 对提示词有硬性要求

response_format=json_object 的作用是要求模型输出 JSON 对象,但为了避免开发者误开 JSON mode 后模型不知道输出什么,上游服务会检查 messages 或 instructions 中是否明确提到 JSON。如果没有,就返回 400。这不是 DeepAI API 中转站、n8n 节点或 API Key 的问题,而是请求体没有满足 JSON mode 的协议约束。

容易失败的请求类似这样:

{
  "model": "your-model",
  "messages": [
    {"role": "user", "content": "请生成一份用户画像"}
  ],
  "response_format": {"type": "json_object"}
}

正确做法是明确写出 JSON 输出要求:

{
  "model": "your-model",
  "messages": [
    {
      "role": "system",
      "content": "你必须只输出 JSON 对象,不要输出 Markdown。"
    },
    {
      "role": "user",
      "content": "请生成一份用户画像,字段包括 name、age、city、tags。"
    }
  ],
  "response_format": {"type": "json_object"}
}

DeepAI API 中转站场景下怎么排查

  1. 确认 n8n 的 Base URL 写到 https://api.deepai.wang/v1,不要写到具体接口路径。
  2. 在 DeepAI API 中转站日志里查看真实状态码和错误 body,确认是否为 response_format 相关 400。
  3. 检查 n8n 节点、Assistant instructions、system prompt 或 user prompt 中是否包含 json 关键字。
  4. 升级 n8n 到 1.56.0 或更新版本,避免真实上游错误被泛化成 Internal Error
  5. 用最小 prompt 先返回一个简单 JSON,再逐步加入复杂字段和下游解析逻辑。

建议的结构化输出提示词

如果你只是使用 JSON mode,可以先用明确而简单的提示词:

请只返回 JSON 对象,不要返回 Markdown、解释或代码块。
JSON 字段必须包含:
- name: string
- age: number
- city: string
- tags: string[]
- summary: string

如果下游需要更强约束,建议使用支持 JSON Schema 或 Structured Outputs 的模型与接口;如果当前模型只支持 json_object,就要在 prompt 里写清楚字段、类型和禁止额外文本。

为什么中转站日志很重要

这个 Issue 的关键痛点不是“模型不能返回 JSON”,而是客户端曾经隐藏了上游真实错误。DeepAI API 中转站的价值就在这里:它可以保留请求路径、状态码、上游错误消息、模型 ID 和耗时。即使 n8n 节点界面只显示通用错误,站长也能从中转站日志里看到真正的 400 原因。

  • 401:检查 Key 和权限。
  • 404:检查 Base URL、接口路径和模型名。
  • 400 response_format:检查 JSON mode、prompt 和 schema 约束。
  • 200 但解析失败:检查模型是否输出了 Markdown 包裹、额外文本或不合法 JSON。

常见坑位

  • 只打开 JSON output,不写 JSON 说明:这是触发 400 的核心原因。
  • 把 JSON 写在 UI 标签里:必须出现在实际发送给模型的 messages 或 instructions 中。
  • 让模型输出 Markdown 代码块:下游解析 JSON 时会失败,建议明确禁止。
  • 旧版 n8n 错误信息太泛:升级后能直接看到上游错误。
  • 误判为 API 中转站故障:中转站转发了真实错误,问题在请求约束。

上线前验证清单

  1. 用最小 JSON prompt 测试,确认返回合法 JSON 对象。
  2. 在 n8n 中添加下游 JSON Parse 或 Set 节点,验证字段能被读取。
  3. 在 DeepAI API 中转站日志里确认请求路径、模型 ID、状态码和错误消息。
  4. 故意移除 prompt 中的 json 关键字做一次失败测试,确认能看到真实 400。
  5. 把最终 prompt 和 schema 作为工作流配置保存,避免后续误删。

参考资料

总结

n8n 接入 DeepAI API 中转站使用 JSON mode 时,如果遇到 Internal Errorresponse_format=json_object 相关 400,不要先怀疑网关。先检查实际 messages 或 instructions 是否包含 json,再确认提示词是否明确要求只输出 JSON 对象。升级到 n8n 1.56.0 或更新版本后,真实上游错误会更容易暴露;配合 DeepAI 中转站日志,可以快速把问题定位到请求约束、模型输出或下游解析层。

Related Post

Codex cli deepai openai base url ignored config.png

Codex CLI 接入 DeepAI API 中转站:openai_base_url 不生效仍访问 api.openai.com 的排查Codex CLI 接入 DeepAI API 中转站:openai_base_url 不生效仍访问 api.openai.com 的排查

Codex CLI 配置 DeepAI API 中转站或其他 OpenAI-compatible endpoint 后,仍然请求 api.openai.com,通常不是中转站失效,而是 openai_base_url、model_provider 或 model_providers 写错了配置层级。本文结合 openai/codex Issue #16719 与官方 config.toml 文档,整理可复现排查步骤。