Responses API 与 Chat Completions:怎么选接口
OpenAI 建议新项目使用 Responses API,同时继续支持 Chat Completions。两者并不能直接互换:请求字段、响应结构、工具调用和状态管理都不同,兼容网关对具体功能的支持也可能不一致。
先看结论
| 项目 | Chat Completions | Responses |
|---|---|---|
| 接口 | POST /v1/chat/completions | POST /v1/responses |
| 主要输入 | messages | input,必要时另传 instructions |
| 文本输出 | choices[0].message.content | 带类型的 output items;SDK 可用 output_text |
| 多轮状态 | 应用通常自行重发历史消息 | previous_response_id、历史 output items 或 Conversations API |
| OpenAI 官方建议 | 继续支持 | 新项目优先 |
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}'/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,并验证网关行为。
实际选择规则
- 现有客户端只支持 Chat Completions,而且已经稳定运行时,可以继续使用。
- 新建 OpenAI 集成时,可优先评估 Responses,但必须先通过目标模型和所需功能的认证测试。
- 不要根据 401 或模型列表成功,就推断工具、流式、状态或 background 功能可用。
- 迁移时用同一条短 prompt 对比状态码、首字节时间、最终文本、工具事件和 usage 字段。
- 生产流量稳定前,保留已经验证过的回滚路径。
按报错定位
| 现象 | 可能层级 | 下一步 |
|---|---|---|
| 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 做认证后测试。