OpenAI 目前提供2种API,分别是最初的 Chat Completions API 和现在最新的 Responses API,我们通过这篇文章来学习一下它们之间的区别以及未来方向。
Responses API 与 Chat Completions API 对比
比较 Responses API 和 Chat Completions API。
Responses API 和 Chat Completions API 是与 OpenAI 模型交互的两种不同方式。本指南解释了这两种 API 之间的关键区别。
为何选择 Responses API?
Responses API 是OpenAI最新的核心 API 和一个代理式 API 原语,它结合了 Chat Completions 的简洁性与执行更多代理式任务的能力。随着模型能力的演进,Responses API 为构建面向行动的应用程序提供了一个灵活的基础,并内置了以下工具:
如果您是新用户,我们建议使用 Responses API。
Capabilities | Chat Completions API | Responses API |
---|---|---|
能力 | Chat Completions API | Responses API |
— | — | — |
Text generation | ✅ | ✅ |
文本生成 | ✅ | ✅ |
Audio | ❌ | 即将推出 |
音频 | ❌ | Coming soon |
Vision | ✅ | ✅ |
视觉 | ✅ | ✅ |
Structured Outputs | ✅ | ✅ |
结构化输出 | ✅ | ✅ |
Function calling | ✅ | ✅ |
函数调用 | ✅ | ✅ |
Web search | ❌ | ✅ |
网络搜索 | ❌ | ✅ |
File search | ❌ | ✅ |
文件搜索 | ❌ | ✅ |
Computer use | ❌ | ✅ |
计算机使用 | ❌ | ✅ |
Code interpreter | ❌ | 即将推出 |
代码解释器 | ❌ | Coming soon |
Chat Completions API 不会被淘汰
Chat Completions API 是构建 AI 应用程序的行业标准,OpenAI打算无限期地继续支持此 API。OpenAI引入 Responses API 是为了简化涉及工具使用、代码执行和状态管理的工作流程。OpenAI相信这个新的 API 原语将使我们能够更有效地在未来增强 OpenAI 平台。
有状态 API 和语义事件
使用 Responses API 处理事件更简单。它具有可预测的、事件驱动的架构,而 Chat Completions API 在生成 Token 时会持续附加到内容字段——这需要您手动跟踪每个状态之间的差异。使用 Responses API 更容易实现多步对话逻辑和推理。
Responses API 会清晰地发出语义事件,详细说明具体发生了什么变化(例如,特定的文本添加),因此您可以编写针对特定发出事件(例如,文本更改)的集成,从而简化集成并提高类型安全性。
各 API 中的模型可用性
只要有可能,所有新模型都将同时添加到 Chat Completions API 和 Responses API。如果某些模型使用了内置工具(例如OpenAI的计算机使用模型),或者在幕后触发了多轮模型生成(例如 o1-pro),则它们可能仅通过 Responses API 提供。每个模型的详细信息页面将指明它们支持 Chat Completions、Responses 还是两者都支持。
比较代码
The following examples show how to make a basic API call to the Chat Completions API and the Responses API.
以下示例展示了如何对 Chat Completions API 和 Responses API 进行基本的 API 调用。
文本生成示例
两种 API 都使从我们的模型生成输出变得容易。补全(completion)需要一个 messages
数组,而响应(response)需要一个 input
(字符串或数组,如下所示)。
Chat Completions API
1 | from openai import OpenAI |
Responses API
1 | from openai import OpenAI |
当您从 Responses API 获得响应时,字段略有不同。您会收到一个带有自己 id 的类型化 response 对象,而不是 message。响应默认会被存储。对于新账户,对话补全默认会被存储。要在使用任一 API 时禁用存储,请设置 store: false。
Chat Completions API
1 | [ |
Responses API
1 | [ |
其他值得注意的区别
Responses API 返回 output,而 Chat Completions API 返回一个 choices 数组。
结构化输出 API 的结构不同。在 Responses 中使用 text.format 而不是 response_format。在结构化输出指南中了解更多信息。
函数调用 API 的结构不同——请求中的函数配置和响应中返回的函数调用都不同。在函数调用指南中查看完整的区别。
推理方式不同。在 Responses API 中使用 reasoning.effort 而不是 Chat Completions 中的 reasoning_effort。在推理指南中阅读更多详细信息。
Responses SDK 有一个 output_text 辅助属性,而 Chat Completions SDK 没有。
对话状态:在 Chat Completions 中,您必须自己管理对话状态,而 Responses 具有 previous_response_id 来帮助您处理长时间运行的对话。
响应默认会被存储。对于新账户,对话补全默认会被存储。要禁用存储,请设置 store: false。
这对现有 API 意味着什么
Chat Completions
Chat Completions API 仍然是OpenAI使用最广泛的 API。OpenAI将继续为其提供新模型和新功能支持。如果您的应用程序不需要内置工具,您可以放心地继续使用 Chat Completions。
只要新模型的能力不依赖于内置工具或多次模型调用,OpenAI将继续在 Chat Completions 中发布它们。当您准备好使用专为代理工作流程设计的高级功能时,OpenAI推荐使用 Responses API。
Assistants
根据 Assistants API 测试版的开发者反馈,OpenAI已将关键改进整合到 Responses API 中,使其更加灵活、快速和易于使用。Responses API 代表了在 OpenAI 上构建代理的未来方向。
OpenAI正在努力实现 Assistants API 和 Responses API 之间的完整功能对等,包括支持类 Assistant 和类 Thread 对象以及代码解释器工具。完成后,OpenAI计划正式宣布弃用 Assistants API,目标停用日期为 2026 年上半年。
弃用时,OpenAI将提供从 Assistants API 到 Responses API 的清晰迁移指南,允许开发者保留所有数据并迁移其应用程序。在OpenAI正式宣布弃用之前,OpenAI将继续向 Assistants API 提供新模型。