OpenAI Responses API 与 Chat Completions API 的对比
OpenAI 在 2025 年 3 月推出了全新的 Responses API,作为构建 AI 应用和 Agent 的最新接口。本文将详细对比 Responses API 和传统的 Chat Completions API,帮助开发者理解两者的差异并做出合适的选择。
1. 概述
OpenAI 目前提供两种主要的文本生成 API:
- Chat Completions API:这是行业标准的 AI 应用构建接口,OpenAI 承诺将无限期继续支持该 API
- Responses API:OpenAI 最先进的模型交互接口,专为 Agent 应用设计,支持更多高级功能
OpenAI 官方明确建议:如果你正在启动新项目,推荐使用 Responses API 以充分利用最新的平台功能。
2. 核心差异对比
2.1 会话状态管理
这是两个 API 最根本的差异之一。
Chat Completions API 是无状态的,你需要自己维护会话历史:
from openai import OpenAI
client = OpenAI()
# 需要手动管理消息历史
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
]
response = client.chat.completions.create(
model="gpt-4o",
messages=messages
)
# 需要手动将响应添加到历史中
messages.append({"role": "assistant", "content": response.choices[0].message.content})
messages.append({"role": "user", "content": "Tell me more."})
# 每次请求都需要发送完整的消息历史
response2 = client.chat.completions.create(
model="gpt-4o",
messages=messages
)Responses API 支持服务端状态管理,有多种方式简化会话管理:
from openai import OpenAI
client = OpenAI()
# 方式一:使用 previous_response_id 链接响应
response = client.responses.create(
model="gpt-4o-mini",
input="tell me a joke",
)
print(response.output_text)
# 只需传递 previous_response_id 即可继续对话
second_response = client.responses.create(
model="gpt-4o-mini",
previous_response_id=response.id,
input=[{"role": "user", "content": "explain why this is funny."}],
)
print(second_response.output_text)# 方式二:使用 Conversations API 持久化会话
conversation = client.conversations.create()
response = client.responses.create(
model="gpt-4.1",
input=[{"role": "user", "content": "What are the 5 Ds of dodgeball?"}],
conversation=conversation.id
)2.2 输入输出格式
Chat Completions API 使用 messages 数组:
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
]
)
# 访问响应
print(response.choices[0].message.content)Responses API 使用更灵活的 input 参数,并提供便捷的 output_text 属性:
response = client.responses.create(
model="gpt-4.1",
input="Tell me a three sentence bedtime story about a unicorn.",
instructions="You are a helpful assistant." # 系统指令单独设置
)
# 便捷访问响应文本
print(response.output_text)
# 或访问完整输出结构
for item in response.output:
if item.type == "message":
print(item.content[0].text)2.3 内置工具支持
Responses API 提供了丰富的内置工具,而 Chat Completions API 对这些功能支持有限:
| 功能 | Responses API | Chat Completions API |
|---|---|---|
| Web 搜索 | ✅ 内置支持 | ⚠️ 有限支持 |
| File Search | ✅ 内置支持 | ❌ 不支持 |
| Code Interpreter | ✅ 内置支持 | ❌ 不支持 |
| Computer Use | ✅ 内置支持 | ❌ 不支持 |
| MCP 集成 | ✅ 内置支持 | ❌ 不支持 |
| 远程 MCP 服务器 | ✅ 支持 | ❌ 不支持 |
使用 Responses API 调用 Web 搜索:
response = client.responses.create(
model="gpt-4.1",
tools=[{"type": "web_search"}],
input="What are the latest news about AI?"
)2.4 Token 限制参数
两个 API 使用不同的参数名称:
- Chat Completions API:使用
max_completion_tokens(旧版使用max_tokens) - Responses API:使用
max_output_tokens
2.5 缓存性能
根据 OpenAI 的内部评估,Responses API 的缓存利用率比 Chat Completions API 高 40-80%,这意味着:
- 更低的延迟
- 更低的成本
- 更好的性能
两个 API 都支持扩展提示缓存(Extended Prompt Caching):
# 扩展缓存至 24 小时
response = client.responses.create(
model="gpt-5.1",
input="...",
prompt_cache_retention="24h"
)3. API 端点对比
| 操作 | Chat Completions API | Responses API |
|---|---|---|
| 创建 | POST /v1/chat/completions | POST /v1/responses |
| 获取 | GET /v1/chat/completions/{id} | GET /v1/responses/{id} |
| 删除 | DELETE /v1/chat/completions/{id} | DELETE /v1/responses/{id} |
| 取消 | ❌ | POST /v1/responses/{id}/cancel |
| 列出输入项 | GET /v1/chat/completions/{id}/messages | GET /v1/responses/{id}/input_items |
| Token 计数 | ❌ | POST /v1/responses/input_tokens |
4. 响应对象结构对比
Chat Completions 响应:
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1741569952,
"model": "gpt-4o",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! How can I help you?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 19,
"completion_tokens": 10,
"total_tokens": 29
}
}Responses 响应:
{
"id": "resp_67ccd2bed1ec8190...",
"object": "response",
"created_at": 1741476542,
"status": "completed",
"model": "gpt-4.1",
"output": [
{
"type": "message",
"id": "msg_67ccd2bf17f0...",
"status": "completed",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "Hello! How can I help you?",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 36,
"output_tokens": 87,
"total_tokens": 123
}
}5. 特有功能对比
5.1 Responses API 特有功能
后台执行模式:支持异步后台任务,适合长时间运行的任务
pythonresponse = client.responses.create( model="gpt-4.1", input="Complex task...", background=True # 后台执行 )会话 API 集成:与 Conversations API 深度集成
加密推理内容:支持在多轮对话中使用加密的推理 Token
取消响应:可以取消正在进行的后台响应
提示模板:支持引用预定义的提示模板
pythonresponse = client.responses.create( model="gpt-4.1", prompt={ "id": "prompt_template_id", "variables": {"name": "Alice"} } )
5.2 Chat Completions API 特有功能
多选项生成:支持
n参数生成多个响应选项Logprobs:支持返回 Token 的对数概率
Frequency/Presence Penalty:更细粒度的重复惩罚控制
Stop Sequences:支持自定义停止序列
6. 迁移建议
6.1 何时使用 Responses API
- 构建新的 Agent 应用
- 需要使用内置工具(Web 搜索、文件搜索、代码解释器等)
- 需要服务端状态管理
- 需要 MCP 集成
- 追求更好的缓存性能和成本效益
- 使用 GPT-5 系列模型
6.2 何时继续使用 Chat Completions API
- 现有应用已稳定运行
- 需要与第三方服务兼容(许多服务支持 Chat Completions 格式)
- 简单的问答场景,不需要高级功能
- 需要使用
n参数生成多个候选响应
6.3 迁移步骤
- 更新 SDK:确保使用最新版本的 OpenAI SDK
- 修改端点:从
chat.completions.create()改为responses.create() - 调整参数:
messages→inputmax_completion_tokens→max_output_tokens- 系统消息 →
instructions参数
- 更新响应处理:使用
response.output_text替代response.choices[0].message.content - 利用新功能:考虑使用
previous_response_id或 Conversations API 简化状态管理
7. 代码示例对比
7.1 基础文本生成
Chat Completions:
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Write a haiku about programming."}
]
)
print(completion.choices[0].message.content)Responses:
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-4.1",
instructions="You are a helpful assistant.",
input="Write a haiku about programming."
)
print(response.output_text)7.2 函数调用
Chat Completions:
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string"}
}
}
}
}]
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "What's the weather in Tokyo?"}],
tools=tools
)Responses:
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string"}
}
}
}
}]
response = client.responses.create(
model="gpt-4.1",
input="What's the weather in Tokyo?",
tools=tools
)8. 总结
Responses API 是 OpenAI 平台的未来发展方向,提供了更强大的功能和更好的开发体验:
| 方面 | Chat Completions API | Responses API |
|---|---|---|
| 状态管理 | 手动管理 | 服务端支持 |
| 内置工具 | 有限 | 丰富 |
| 缓存性能 | 标准 | 优化 40-80% |
| Agent 支持 | 基础 | 专门设计 |
| 未来功能 | 维护模式 | 主要投入 |
Chat Completions API 作为行业标准将继续得到支持,但 OpenAI 明确表示 Responses API 是未来的重点投入方向。对于新项目,强烈建议直接使用 Responses API;对于现有项目,可以根据实际需求和时间表逐步迁移。