OpenAI Responses对比Chat Completions
翻译自:https://platform.openai.com/docs/guides/responses-vs-chat-completions?api-mode=responses
比较响应(Responses)API和聊天补全(Chat Completions)API。
Responses API 和 Chat Completions API 是与 OpenAI 的模型交互的两种不同方式。本指南解释了这两个 API 之间的主要区别。
为什么选择Responses API?
Responses API是我们最新的核心API,也是一个代理性(Agentic)的API原语,它结合了聊天补全任务的简单性和执行更多能动任务的能力。随着模型能力的发展,Responses API是构建以行动为导向的应用程序的灵活基础,其内置了多种工具:
如果您是新用户,我们推荐使用Responses API。
Capabilities | Chat Completions API | Responses API |
---|---|---|
Text generation | √ | √ |
Audio | √ | 即将推出 |
Vision | √ | √ |
Structured Outputs | √ | √ |
Function calling | √ | √ |
Web search | √ | √ |
File search | × | √ |
Computer use | × | √ |
Code interpreter | × | 即将推出 |
Chat Completions API不会消失
Chat Completions API 是构建 AI 应用程序的行业标准,我们打算无限期地继续支持这个 API。我们引入的 Responses API 旨在简化涉及工具使用、代码执行和状态管理的工作流程。我们相信这个新的 API 原语将使我们能够在未来更有效地增强 OpenAI 平台。
具有状态的API和语义事件
使用Responses API可以使事件处理更为简单。它拥有一个可预测的事件驱动架构,而Chat Completions API在生成字符时会不断向内容字段追加,这要求您手动跟踪每个状态之间的差异。多步骤的会话逻辑和推理通过Responses API来实施会更加容易。
Responses API 明确发出了语义事件,详细说明了发生了什么变化(例如,具体的文本添加),因此您可以编写针对特定发出事件(例如,文本更改)的集成,从而简化集成并提高类型安全性。
比较代码
以下示例展示了如何对聊天补全API和Responses API进行基本的API调用。
文本生成示例
这两个API都使我们能够轻松地从模型生成输出。一个completion
需要一个messages
数组,但是一个response
需要一个input
(字符串或数组,如下所示)。
聊天补全API
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "user",
"content": "Write a one-sentence bedtime story about a unicorn."
}
]
)
print(completion.choices[0].message.content)
响应 API
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-4o",
inputs=[
{
"role": "user",
"content": "Write a one-sentence bedtime story about a unicorn."
}
]
)
print(response.output_text)
当你从Responses
API收到回复时,字段有细微差异。你会收到一个带有独立id
的类型化response
对象,而不是一个message
。默认情况下会存储响应。对于新账户,默认情况下会存储聊天补全信息。要在使用任一API时禁用存储,请设置store: false
。
聊天补全API
[
{
"index": 0,
"message": {
"role": "assistant",
"content": "在柔和的月光下,独角兽露娜跳舞穿梭在闪烁的星尘中,为每一个沉睡的孩子留下梦境的轨迹。",
"refusal": null
},
"logprobs": null,
"finish_reason": "stop"
}
]
响应 API
在月光柔和的照耀下,独角兽露娜在闪烁的星尘田野中舞动,为每一个熟睡的孩子留下梦境的轨迹。
其他值得注意的差异
- 响应返回
output
,而聊天补全返回一个choices
数组。 - Structured Outputs API 的结构不同。使用 Responses 中的
text.format
而不是response_format
。在结构化输出指南中了解更多信息。 - 函数调用API的形式不同——这体现在请求中的函数配置以及响应中发回的函数调用上。详见函数调用指南中的完整差异。
- 推理是不同的。在聊天续写API中使用
reasoning_effort
,而在Responses API中使用reasoning.effort
。阅读推理指南中更多的细节。 - Responses SDK 有一个
output_text
助手函数,而 Chat Completions 没有。 - 对话状态:在聊天补全中,你必须自己管理对话状态,而响应中有
previous_response_id
来帮助你处理长时间运行的对话。 - Responses API响应默认情况下会被存储。对于新账户,默认也会存储聊天补全接口结果。要禁用存储,请设置
store: false
。
这对现有的API意味着什么
聊天补全API
Chat Completions API 仍然是我们使用最广泛的 API。我们将通过新模型和功能继续支持它。如果您的应用程序不需要内置工具,您可以放心地继续使用 Chat Completions。
我们将继续发布新的聊天补全模型,只要它们的功能不依赖内置工具或多个模型调用。当你准备好使用为代理工作流程专门设计的高级功能时,我们推荐使用Responses API。
助手
根据开发者对Assistants API测试版的反馈,我们在Responses API 中整合了关键的改进,使其更加灵活、快速以及易于使用。Responses API 代表了在 OpenAI 上构建代理的未来方向。
我们正在努力实现Assistants API与Responses API之间的全部功能对等,包括对助手式和线程式对象以及代码解释工具的支持。完成后,我们计划在2026年上半年前正式宣布停用助手API,并确定一个目标停用日期。
在弃用后,我们将提供从Assistants API到Responses API的明确迁移指南,该指南允许开发人员保留所有数据并迁移他们的应用程序。在我们正式宣布弃用之前,我们将继续向Assistants API提供新模型。