两个接口怎么区分
| 项目 | Responses | Chat Completions |
|---|---|---|
| 请求路径 | /v1/responses | /v1/chat/completions |
| 输入字段 | input | messages |
| Python SDK 方法 | client.responses.create | client.chat.completions.create |
| 读取文本 | response.output_text | choices[0].message.content |
| 谁在用 | Codex、新项目 | 大多数聊天客户端、旧项目 |
output_text 是 SDK 提供的便捷属性;直接发 HTTP 请求时,要从返回的 output 数组里取文本。工具调用、图片输入、多轮对话和流式事件,两个接口的写法也不同,换接口时不能只改网址。
该用哪个
- Codex:只能用 Responses,配置里写
wire_api = "responses",见 Codex CLI。 - 已有的对话应用:原来用哪个就继续用哪个,棉花糖 API 两个接口都支持。
- 新项目:两者都可以。Responses 是 OpenAI 目前主推的接口。
- Cherry Studio、Cursor 等客户端:以客户端实际调用的接口为准,一般是 Chat Completions。
同一个问题,两种写法
初始化代码相同,见 OpenAI SDK。Responses:
response = client.responses.create(
model="gpt-6.1-sol",
input="用一句话介绍 API",
)
print(response.output_text)Chat Completions:
completion = client.chat.completions.create(
model="gpt-6.1-sol",
messages=[{"role": "user", "content": "用一句话介绍 API"}],
)
print(completion.choices[0].message.content)Base URL 要不要带接口路径
SDK 和客户端里的 Base URL 只填到 /v1,它们会自己拼接口路径。只有直接用 curl 发请求时,才写完整地址,例如 https://api.mallowapi.com/v1/responses。
排查顺序
- 看最终请求地址,有没有重复的
/v1或多余的路径。 - 看客户端用的是哪个接口,字段是
input还是messages。 - 看密钥所在分组能不能用这个模型。
GET /v1/models成功只说明列表请求成功。 - 发一条短文本确认能回复;需要工具调用或流式输出时,再单独测试。
字段的完整定义见 OpenAI 官方的 Responses 和 Chat Completions 文档。官方文档列出的功能,不代表网关全部支持。