OpenAI 兼容 API · 接口选择

Responses API 与 Chat Completions:怎么选接口

OpenAI 建议新项目使用 Responses API,同时继续支持 Chat Completions。两者并不能直接互换:请求字段、响应结构、工具调用和状态管理都不同,兼容网关对具体功能的支持也可能不一致。

先看结论

项目Chat CompletionsResponses
接口POST /v1/chat/completionsPOST /v1/responses
主要输入messagesinput,必要时另传 instructions
文本输出choices[0].message.content带类型的 output items;SDK 可用 output_text
多轮状态应用通常自行重发历史消息previous_response_id、历史 output items 或 Conversations API
OpenAI 官方建议继续支持新项目优先
2026-08-03 对 MonkeyAI 生产环境做未认证检查时,两条路由都返回结构化的 401 API_KEY_REQUIRED。这只能证明路由已到达认证层,不能证明模型或具体功能在认证后可用。

改代码前先验证路由

先用真实 Key 获取模型列表,再选择该 Key 可见的 Model ID,分别发一条最小请求。

curl -sS https://monkeytheme.com/v1/models \
  -H "Authorization: Bearer $MONKEYAI_API_KEY"
# Chat Completions 请求模板
curl -sS https://monkeytheme.com/v1/chat/completions \
  -H "Authorization: Bearer $MONKEYAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"MODEL_ID","messages":[{"role":"user","content":"Reply with OK"}],"max_completion_tokens":16}'
# Responses 请求模板
curl -sS https://monkeytheme.com/v1/responses \
  -H "Authorization: Bearer $MONKEYAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"MODEL_ID","input":"Reply with OK","max_output_tokens":16,"store":false}'
本轮没有使用客户 Key 执行以上认证请求。不同账号和上游可见的模型、可选字段可能不同,请以自己的 /v1/models 结果为准。

迁移时最容易出错的地方

输入字段

Chat Completions 使用 messages;Responses 使用 input,可以是字符串或 input items。只改 URL 会留下旧请求体。

响应解析

读取 choices[0].message.content 的代码无法解析 Responses 对象。请读取带类型的 output items,或使用官方 SDK 的 output_text。

会话状态

previous_response_id 可以串联多轮,但不会继承上一次请求顶层的 instructions。稳定指令需要每次重发。

工具调用

函数配置和返回的调用结构都不同。OpenAI 官方支持的内置工具,不能直接证明每个兼容网关和模型都已实现。

结构化输出

OpenAI 文档中,Chat Completions 使用 response_format,Responses 使用 text.format。这是代码迁移,不是改一段路径。

存储

OpenAI 迁移文档说明 Responses 默认存储。数据策略要求不存储时,应显式传 store: false,并验证网关行为。

实际选择规则

  1. 现有客户端只支持 Chat Completions,而且已经稳定运行时,可以继续使用。
  2. 新建 OpenAI 集成时,可优先评估 Responses,但必须先通过目标模型和所需功能的认证测试。
  3. 不要根据 401 或模型列表成功,就推断工具、流式、状态或 background 功能可用。
  4. 迁移时用同一条短 prompt 对比状态码、首字节时间、最终文本、工具事件和 usage 字段。
  5. 生产流量稳定前,保留已经验证过的回滚路径。

按报错定位

现象可能层级下一步
401 JSON认证检查 Bearer 头、Key 和域名
只有一条路由 404网关路由或接口未支持核对 Base URL 和接口支持范围
400 unknown field请求体仍在使用另一套结构检查 messages/input、输出和工具字段
200 但客户端解析失败客户端仍期待 choices记录脱敏后的顶层响应结构
model not found模型可见性或路由映射使用 /v1/models 返回的准确 ID

常见问题

新项目应该选 Responses 还是 Chat Completions?

OpenAI 建议新项目使用 Responses,同时继续支持 Chat Completions。使用兼容网关时,迁移前仍需验证目标模型和所需功能是否在对应路由可用。

只改接口路径可以吗?

不可以。请求字段会从 messages 改为 input,响应会从 choices 改为带类型的 output items;工具调用、结构化输出和会话状态的结构也不同。

两个接口都返回 401,能证明完全兼容吗?

不能。401 只能证明两条路径都到达了网关认证层,不能证明 Key、模型、工具、流式响应或状态功能在认证后可用。

Responses 还能读取 choices[0].message.content 吗?

不能。Responses 返回带类型的 output items;官方 SDK 另有 output_text 辅助属性用于汇总文本。

previous_response_id 会自动继承 instructions 吗?

不会。OpenAI 明确说明 previous_response_id 不会带上一次响应的顶层 instructions,稳定指令需要每次重新发送。

MonkeyAI 是否支持 Responses API 的全部功能?

本文不作此承诺。路由检查只能确认 /v1/responses 存在;具体模型和功能仍需使用有效 Key 做认证后测试。

官方资料与相关教程