Skip to content

OpenAI 与 Anthropic API 数据模型及兼容层安全 ​

摘要 ​

主流模型 API 在消息角色、内容块、工具调用、结束原因和错误表示上并不等价。第三方兼容层若只追求字段可解析,可能静默丢失工具参数约束、拒答状态、身份信息或安全相关事件。兼容验证必须覆盖语义与失败模式,而非只验证正常文本响应。

调研/复核日期:2026-07-29 本文比较 HTTP 请求/响应的数据模型;SSE/WebSocket 事件序列见 vendor-streaming-comparison.md,MCP/A2A 见对应独立笔记。

协议定位与核心差异 ​

OpenAI 同时保留 Chat Completions 和 Responses API。此前笔记用 Chat Completions 的字段解释 OpenAI,又把 Responses 写成“新版端点”,容易让人误以为两者只有 URL 不同。实际是三套不同的数据模型:

OpenAI Chat CompletionsOpenAI ResponsesAnthropic Messages
端点POST /v1/chat/completionsPOST /v1/responsesPOST /v1/messages
鉴权Authorization: Bearer <key>同左x-api-key: <key>;anthropic-version: 2023-06-01
指令messages 中的 system/developer role(依模型支持)顶层 instructions,也可用带 role 的 input items独立顶层 system,不能作为 Messages 的 system role
输入messages[]字符串或 input[] items;可引用前一 response/conversationmessages[],每条 content 可为字符串或 block 数组
输出choices[].message,支持 n 多候选output[] items;SDK 常提供 output_text 便捷聚合顶层 content[] blocks,无 n 多候选
函数/工具assistant tool_calls[];结果用 tool_call_idfunction_call output item;结果用 function_call_output.call_idtool_use / tool_result blocks;用 tool_use_id 关联
状态衔接调用方回传历史 messagesprevious_response_id 或 Conversation;也可完全无状态调用方回传历史 messages
流式chat.completion.chunk delta带 type/sequence_number 的语义事件带 event: 与 data: 的 content-block 事件

Responses API 还统一承载多模态 output item、内置 tools、background mode 等 agentic 能力,不能用 choices[0].message 解析。反过来,第三方声称“OpenAI-compatible”时通常只指 Chat Completions;除非明确列出 /v1/responses 及其事件/工具语义,否则不能推定支持 Responses。

Anthropic 的扩展推理以 thinking/redacted_thinking block 表示。Prompt caching 可通过顶层或 content/tool block 的 cache_control 设置,usage 里用 cache_creation_input_tokens、cache_read_input_tokens 计量;当前类型还区分 5 分钟和 1 小时 ephemeral cache。实验功能通常还要求 anthropic-beta header,不能只看 JSON 字段是否相似。

架构和消息流程 ​

请求、输出和工具调用的对应关系如下:Chat Completions 使用 messages、choices[].message 和 tool_calls;Responses 使用 input[]、output[]、function_call 与 function_call_output;Anthropic Messages 使用顶层 system、content[] block、tool_use 与 tool_result。兼容层必须保留调用 ID、内容块类型、结束原因和错误状态,不能只抽取最终文本。

安全风险 ​

第三方兼容层可能丢弃未知字段、调整参数范围、合并 reasoning、改变 stop reason,或只实现某个子集。具体风险包括工具参数约束丢失、并行调用关联错误、拒答或不完整状态被误判为成功、身份信息未传递,以及重试后重复执行有副作用的工具。

“官方 SDK 能发出请求”不等于完整协议等价,更不能证明厂商内部是原生实现还是转换网关。厂商宣称兼容 OpenAI 或 Anthropic API 时,应拆成以下验证层级:

厂商宣称兼容 OpenAI/Anthropic API 时,应至少拆成以下验证项:

  1. SDK/路径兼容:base URL、鉴权 header、endpoint 可被原 SDK 调用。
  2. schema 兼容:必填字段、content blocks、tool schema、错误对象和 usage 字段一致。
  3. 流式兼容:事件名、顺序、增量拼接、终止与中途错误语义一致。
  4. 行为兼容:tool choice、并行工具、多模态、结构化输出、缓存/推理参数确实生效。
  5. 运维兼容:超时、重试、限流 header、幂等性和连接中断行为可替换。

实现与验证建议 ​

Kimi 官方兼容端点(截至复核日) ​

Kimi 官方文档明确给出两类接入:

  • OpenAI Chat Completions 兼容:使用 OpenAI SDK,将 base_url 设为 https://api.moonshot.cn/v1,调用 chat.completions.create。官方表述是“Kimi API 兼容 OpenAI API 格式”。这只证明对外接口兼容,不能据此断言内部“没有翻译层”,也不能自动外推到 Responses API。
  • Claude Code / Anthropic 兼容端点:官方 Claude Code 指南使用 ANTHROPIC_BASE_URL=https://api.moonshot.cn/anthropic、ANTHROPIC_AUTH_TOKEN=<Kimi API Key>,并把 Claude Code 的各模型映射变量设为 Kimi 模型。当前示例主模型为 kimi-k3[1m];模型名和端点会随区域/套餐变化,应以对应地区的官方页面为准。
bash
export ANTHROPIC_BASE_URL="https://api.moonshot.cn/anthropic"
export ANTHROPIC_AUTH_TOKEN="<Kimi API Key>"
export ANTHROPIC_MODEL="kimi-k3[1m]"

官方页面把它称为“Anthropic 兼容端点”,足以确认存在协议适配;但未公开内部转换架构、字段覆盖矩阵或完整 wire-level conformance 结果。因此此前关于“后加”“专门截获流量”“temperature 隐式缩放”“成本很低”等说法均不应作为事实保留。

抓包验证方法与安全要求 ​

可在自有测试环境中用 Burp Suite 对比官方端点与兼容端点:

  1. 从 Burp 导出 PEM CA。
  2. 通过 shell 或 ~/.claude/settings.json 的 env 对象设置代理;没有证据表明存在独立顶层 httpsProxy 配置项。
    bash
    export HTTPS_PROXY=http://127.0.0.1:8080
    export NODE_EXTRA_CA_CERTS=/absolute/path/to/burp-ca.pem
  3. 启动 claude --debug,确认代理与附加 CA 生效。
  4. 分别记录 request headers/body、SSE event sequence、error、usage 与 tool round trip。

Claude Code 支持 HTTP(S) proxy 环境变量,不支持 SOCKS。不要用 NODE_TLS_REJECT_UNAUTHORIZED=0 绕过证书校验。抓包会暴露 prompt、源码、tool 参数和 token;只在授权环境中进行,使用临时 key,并禁止把敏感记录提交到仓库。

结论适用范围 ​

本文比较的是截至 2026-07-29 可由官方文档确认的公开 HTTP 接口。Kimi 的公开说明足以证明其提供 OpenAI Chat Completions 和 Anthropic 兼容端点,但未公开内部转换架构、完整字段覆盖矩阵或传输级一致性结果;不能据此推断 Responses API 兼容性或内部实现方式。流式事件序列需结合 vendor-streaming-comparison.md 单独验证。

参考链接 ​