Skip to content

OpenAI Responses API 与 Chat Completions API 的对比

OpenAI 在 2025 年 3 月推出了全新的 Responses API,作为构建 AI 应用和 Agent 的最新接口。本文将详细对比 Responses API 和传统的 Chat Completions API,帮助开发者理解两者的差异并做出合适的选择。

1. 概述

OpenAI 目前提供两种主要的文本生成 API:

  1. Chat Completions API:这是行业标准的 AI 应用构建接口,OpenAI 承诺将无限期继续支持该 API
  2. Responses API:OpenAI 最先进的模型交互接口,专为 Agent 应用设计,支持更多高级功能

OpenAI 官方明确建议:如果你正在启动新项目,推荐使用 Responses API 以充分利用最新的平台功能。

2. 核心差异对比

2.1 会话状态管理

这是两个 API 最根本的差异之一。

Chat Completions API 是无状态的,你需要自己维护会话历史:

python
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 支持服务端状态管理,有多种方式简化会话管理:

python
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)
python
# 方式二:使用 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 数组:

python
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 属性:

python
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 APIChat Completions API
Web 搜索✅ 内置支持⚠️ 有限支持
File Search✅ 内置支持❌ 不支持
Code Interpreter✅ 内置支持❌ 不支持
Computer Use✅ 内置支持❌ 不支持
MCP 集成✅ 内置支持❌ 不支持
远程 MCP 服务器✅ 支持❌ 不支持

使用 Responses API 调用 Web 搜索:

python
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):

python
# 扩展缓存至 24 小时
response = client.responses.create(
    model="gpt-5.1",
    input="...",
    prompt_cache_retention="24h"
)

3. API 端点对比

操作Chat Completions APIResponses API
创建POST /v1/chat/completionsPOST /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}/messagesGET /v1/responses/{id}/input_items
Token 计数POST /v1/responses/input_tokens

4. 响应对象结构对比

Chat Completions 响应

json
{
  "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 响应

json
{
  "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 特有功能

  1. 后台执行模式:支持异步后台任务,适合长时间运行的任务

    python
    response = client.responses.create(
        model="gpt-4.1",
        input="Complex task...",
        background=True  # 后台执行
    )
  2. 会话 API 集成:与 Conversations API 深度集成

  3. 加密推理内容:支持在多轮对话中使用加密的推理 Token

  4. 取消响应:可以取消正在进行的后台响应

  5. 提示模板:支持引用预定义的提示模板

    python
    response = client.responses.create(
        model="gpt-4.1",
        prompt={
            "id": "prompt_template_id",
            "variables": {"name": "Alice"}
        }
    )

5.2 Chat Completions API 特有功能

  1. 多选项生成:支持 n 参数生成多个响应选项

  2. Logprobs:支持返回 Token 的对数概率

  3. Frequency/Presence Penalty:更细粒度的重复惩罚控制

  4. Stop Sequences:支持自定义停止序列

6. 迁移建议

6.1 何时使用 Responses API

  • 构建新的 Agent 应用
  • 需要使用内置工具(Web 搜索、文件搜索、代码解释器等)
  • 需要服务端状态管理
  • 需要 MCP 集成
  • 追求更好的缓存性能和成本效益
  • 使用 GPT-5 系列模型

6.2 何时继续使用 Chat Completions API

  • 现有应用已稳定运行
  • 需要与第三方服务兼容(许多服务支持 Chat Completions 格式)
  • 简单的问答场景,不需要高级功能
  • 需要使用 n 参数生成多个候选响应

6.3 迁移步骤

  1. 更新 SDK:确保使用最新版本的 OpenAI SDK
  2. 修改端点:从 chat.completions.create() 改为 responses.create()
  3. 调整参数
    • messagesinput
    • max_completion_tokensmax_output_tokens
    • 系统消息 → instructions 参数
  4. 更新响应处理:使用 response.output_text 替代 response.choices[0].message.content
  5. 利用新功能:考虑使用 previous_response_id 或 Conversations API 简化状态管理

7. 代码示例对比

7.1 基础文本生成

Chat Completions

python
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

python
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

python
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

python
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 APIResponses API
状态管理手动管理服务端支持
内置工具有限丰富
缓存性能标准优化 40-80%
Agent 支持基础专门设计
未来功能维护模式主要投入

Chat Completions API 作为行业标准将继续得到支持,但 OpenAI 明确表示 Responses API 是未来的重点投入方向。对于新项目,强烈建议直接使用 Responses API;对于现有项目,可以根据实际需求和时间表逐步迁移。

9. 参考资料