OpenAI Responses API 是什么:和 Chat Completions 的区别与迁移要点

Responses API 是 OpenAI 现在推荐新项目使用的接口,Chat Completions 仍然支持,Assistants API 已于 2026-08-26 下线。本文用对照表讲清两者在输入输出、多轮对话、函数调用、结构化输出、流式事件上的区别,并按官方迁移指南列出改代码时最容易出错的地方。

NNathaniel bigo··原创首发·AI 辅助撰写
10 分钟读完
资料核对于 2026-10-07 · 依据官方文档与公开资料整理 其他 账号
本文根据 OpenAI 开发者文档《Migrate to the Responses API》、API Reference、Text generation、Deprecations 和 openai-python README 整理,资料核对于 2026-10-07。

适用于谁

  • 刚开始学 OpenAI API,看到教程里有的写 chat.completions.create、有的写 responses.create,不知道该学哪个的人;
  • 手上有基于 Chat Completions 的老项目,想评估要不要迁移、怎么迁的人;
  • 之前用 Assistants API、现在调用失败的人。

结论先说

  1. Responses API 是 OpenAI 现在的主力接口:官方原话是 Chat Completions 仍然支持,但所有新项目都推荐用 Responses。openai-python README 也把 Chat Completions 称为「上一代标准(将长期支持)」。
  2. 最大的区别:输入输出从「消息数组 messages / choices」变成了「带类型的条目(Items)」;内置网页搜索、文件搜索、代码解释器、远程 MCP 等工具,一次请求里模型可以连续调用多个工具;可以由服务端保存对话状态。
  3. Assistants API 已于 2026-08-26 正式下线,不能再用,要迁到 Responses API + Conversations API。
  4. 老项目不必一次全迁:官方建议从一个纯文本生成流程开始,逐个流程切换,对比效果、延迟、token 用量后再放量。

Responses 和 Chat Completions 对照

项目Chat CompletionsResponses
接口地址POST /v1/chat/completionsPOST /v1/responses
输入messages 数组input:一段字符串,或条目数组
系统级指令system / developer 消息顶层参数 instructions(也可保留兼容的消息条目)
输出choices[0].messageoutput 数组,里面是不同类型的条目(消息、推理、函数调用……)
取文字的捷径无SDK 的 output_text
一次生成多个候选支持 n不支持,需要多发几次请求
多轮对话自己维护完整历史previous_response_id、手动回传条目,或 Conversations API
默认是否存储新账号默认存储默认存储
结构化输出response_formattext.format
函数定义外层套 function 对象,默认非严格字段平铺在工具对象里;不写 strict 时会尝试严格模式
流式返回带 delta 的增量块带类型的事件,如 response.output_text.delta
token 用量字段prompt_tokens / completion_tokensinput_tokens / output_tokens

官方列出的好处还包括:推理模型在 Responses 里表现更好(内部评测 SWE-bench 提升 3%),缓存利用率更高从而更省钱(内部测试比 Chat Completions 提升 40%~80%),以及可以用加密推理条目在不存储状态的情况下延续推理。官方 Text generation 指南也说,用推理模型时尤其推荐迁到 Responses。

最小示例

同一个任务,两种写法:

python
from openai import OpenAI

client = OpenAI()  # 从环境变量 OPENAI_API_KEY 读取密钥

# Chat Completions 写法
completion = client.chat.completions.create(
    model="gpt-6-astra",
    messages=[
        {"role": "developer", "content": "用简洁的中文回答。"},
        {"role": "user", "content": "什么是向量数据库?"},
    ],
)
print(completion.choices[0].message.content)

# Responses 写法
response = client.responses.create(
    model="gpt-6-astra",
    instructions="用简洁的中文回答。",
    input="什么是向量数据库?",
)
print(response.output_text)

纯文本、不含函数和多模态的消息数组,可以直接作为 input 传给 Responses,不用改格式。从零开始的 Python 入门见 /guides/openai-api-python-quickstart。

迁移要点(按官方步骤)

1. 改接口和读取方式

把请求从 /v1/chat/completions 改成 /v1/responses,读取结果从 choices[0].message.content 改为 response.output_text;如果用到推理、工具或多模态输出,就遍历 response.output,按每个条目的 type 分别处理。

2. 选一种多轮对话方式

  • previous_response_id:把上一次响应的 ID 传进来,由 OpenAI 维护上下文。注意它不会继承上一次的 instructions,每次请求都要重新带上;
  • 手动回传:把上一次的 output 条目追加到下一次的 input 里,适合需要自己裁剪上下文的场景;
  • Conversations API:需要一个持久的对话对象时使用。
python
first = client.responses.create(model="gpt-6-astra", input="法国的首都是哪里?")
second = client.responses.create(
    model="gpt-6-astra",
    previous_response_id=first.id,
    input="那里的人口大约多少?",
)
print(second.output_text)

计费提醒:用 previous_response_id 并不能省掉之前上下文的费用,链条里之前的输入 token 仍按输入 token 计费。

3. 决定要不要存储

Responses 默认存储响应。不想存就设 store: false;这时如果还要跨轮延续推理,需要把每次返回的推理条目(带 encrypted_content)原样回传。零数据保留(ZDR)组织会被强制 store: false。

4. 改函数定义和返回

函数定义从「外层 function 包一层」改为字段直接平铺;函数调用和函数结果是两种独立的条目,靠 call_id 对应。Chat Completions 的函数默认非严格,Responses 不写 strict 会先尝试严格模式,想保持非严格就显式写 strict: false。

5. 改结构化输出和流式处理

response_format 改为 text.format;流式处理从读 delta 块改为按事件类型分支,常用事件有 response.created、response.output_text.delta、response.completed 和 error。

6. 能用内置工具就用内置工具

原来自己实现的网页搜索、文件检索、代码执行,可以考虑换成 Responses 的内置工具(工具调用会另外计费,见价格页)。

迁移时最常见的错误

官方迁移指南列出的坑:

  • 还在读 choices[0].message.content;
  • 把 output 里的每一项都当成消息,忽略了推理、工具调用等其他类型;
  • 手动拼上下文时丢了推理条目、函数调用或函数结果条目;
  • 回传函数结果时没带对应的 call_id;
  • 在 Responses 请求里继续用 response_format;
  • 直接复用 Chat Completions 的流式处理代码;
  • 以为用了 previous_response_id 之前的上下文就不收费。

常见问题

Q:Chat Completions 会被下线吗?

截至 2026-10-07,官方文档写的是「仍然支持」,README 写的是「长期支持」,Deprecations 页面没有 Chat Completions 的下线计划。但新功能优先在 Responses 上提供。

Q:Assistants API 的数据怎么办?

Assistants API 已于 2026-08-26 下线,官方提供了 Assistants 到 Conversations 的迁移指南,迁到 Responses API 和 Conversations API。

Q:Responses API 和 Agents API 是什么关系?

Agents API(Beta)是另一种更上层的接口:由 OpenAI 托管一个 Codex 智能体的会话,可以在沙盒里跑代码、改文件,并在同一会话里继续任务,模型请求按所选模型的 API 价格计费。只需要「发一次请求拿一次回答」或自己编排工具调用,用 Responses 就够了。

Q:Playground 里调的是哪个接口?

Playground 可以在 Responses 和 Chat Completions 两种模式之间使用,调用同样计入 API 费用,见 /guides/openai-playground。

参考资料

  • OpenAI 开发者文档:Migrate to the Responses API — https://developers.openai.com/api/docs/guides/migrate-to-responses
  • OpenAI API Reference:Create a response — https://developers.openai.com/api/reference/resources/responses/methods/create
  • OpenAI 开发者文档:Text generation — https://developers.openai.com/api/docs/guides/text
  • OpenAI 开发者文档:Conversation state — https://developers.openai.com/api/docs/guides/conversation-state
  • OpenAI 开发者文档:Deprecations(Assistants API)— https://developers.openai.com/api/docs/deprecations
  • openai-python 官方仓库 README — https://github.com/openai/openai-python
  • OpenAI 帮助中心:Agents API (beta) FAQ — https://help.openai.com/en/articles/20001551-agents-api-beta-faq
需要开通或续费?ChatGPT Plus 充值 →

Nathaniel 的更多内容

  1. 01

    Hugging Face 怎么下载模型:hf 命令行下载单个文件、指定目录与受限模型申请

    Hugging Face 怎么下载模型?本文按官方文档讲清网页下载、hf download 命令行(单个文件、整个仓库、按通配符筛选、下载到指定目录)、访问令牌怎么建、受限模型怎么申请权限,以及缓存目录和超时怎么调。

    其他 AI 工具0
  2. 02

    Claude 提示词缓存(Prompt Caching)入门:缓存时间、价格倍率与命中率

    Claude API 的提示词缓存能把重复的长前缀(系统提示、工具定义、长文档、对话历史)缓存起来,读缓存只收少量费用。本文讲自动缓存与断点写法、5 分钟和 1 小时两种时长、价格倍率、最短长度、怎么看命中率以及命中率低的原因。

    Claude0
  3. 03

    Google AI Studio 怎么用:界面入口、选模型、发第一条提示与获取代码(入门)

    Google AI Studio 是 Google 给开发者试用 Gemini 模型的网页工具。本文讲清它和 Gemini 应用的区别、Playground 与 Build 入口、发第一条提示、运行设置、获取代码,以及免费边界和可用地区。

    Gemini0
  4. 04

    ChatGPT 取消订阅与关闭自动续费:网页、iPhone、安卓分别怎么操作,能退款吗

    ChatGPT Plus / Pro 不想续费了怎么取消?要在哪里买的就在哪里取消。本文按官方帮助中心讲清网页、iPhone、Google Play 和 Business 的取消步骤、要提前多久取消、取消后还能用多久、退款政策,以及重复扣费怎么处理。

    ChatGPT0
  5. 05

    扣子工作流怎么搭建:入口在哪、节点类型、变量引用、试运行与发布

    扣子工作流怎么搭建、入口在哪?本文按扣子官方文档讲清两种做法:新用户在扣子编程里用一段话生成工作流,老用户在旧版低代码画布上拖节点;并说明大模型、代码、选择器节点的配置要点、变量引用写法、试运行和官方限制。

    其他 AI 工具0
  6. 06

    长文档怎么问 AI:资料放前面、问题放最后、先引用再回答(官方长文本提示词技巧)

    把几十页的报告、合同丢给 AI,为什么总是答得笼统或漏掉重点?本文整理 Anthropic、Google、OpenAI 官方文档里针对长文本的提示词建议:资料与问题的摆放顺序、多份文档怎么用标签区分、先摘录原文再作答,并给出可照抄的模板。

    ClaudeGemini0

同产品的其他教程

  1. 01

    ChatGPT 定时任务怎么设置:每天自动提醒、汇总、监控变化与事件触发

    ChatGPT 的定时任务(Scheduled tasks)可以按时提醒、每天推送简报、监控网页或邮箱变化,Plus 起还能由 Gmail、Slack、GitHub 事件触发。本文按官方帮助中心讲清怎么创建、各套餐能建几个、多久能跑一次、通知怎么开、怎么分享。

    ChatGPT0
  2. 02

    ChatGPT 自定义指令怎么设置:个性化设置、回答风格与写法示例

    ChatGPT 的自定义指令、个性(Personality)和特征(Characteristics)分别管什么?本文按官方帮助中心讲清网页和手机的设置入口、字数上限、生效范围,并给出几段可直接改用的自定义指令示例。

    ChatGPT0
  3. 03

    ChatGPT 学习模式怎么用:开启方法、找不到怎么办,配合闪卡和测验复习

    ChatGPT 学习模式(Study mode)不直接给答案,而是一步步提问引导你学懂。本文按官方帮助中心讲清网页和手机怎么开启、为什么找不到、第一条消息怎么写,以及怎么配合 2026 年新增的交互式测验和闪卡复习备考,附可直接复制的提问模板。

    ChatGPT0
  4. 04

    OpenAI API 调用教程(Python):安装 SDK、第一个请求与常见报错

    用 Python 调用 OpenAI API 的入门示例:安装官方 openai 库、用环境变量配置密钥、用 Responses API 发出第一个请求、读取 token 用量、流式输出,以及 401、429、连接失败等报错怎么排查。代码按官方文档 2026-10-07 版本整理。

    ChatGPT0
  5. 05

    提示词 XML 标签怎么用:用标签和 Markdown 给长提示词分区(官方写法与模板)

    提示词里的 XML 标签有什么用?本文按 Anthropic、OpenAI、Google 官方文档讲清为什么要给提示词分区、标签和 Markdown 标题各适合做什么、标签怎么命名和嵌套,并附通用模板。

    ChatGPTClaude0
  6. 06

    AI生成Logo怎么做:提示词模板、透明背景、矢量化与商标注意事项

    用 ChatGPT、Gemini、Midjourney 生成 Logo,提示词怎么写、怎么出透明背景、为什么还要做矢量化、能不能注册商标?本文按 OpenAI、Google、Midjourney 官方指南和《商标法》整理成从构思到落地的完整流程。

    ChatGPT其他 AI 工具0

0 条评论

登录 后参与评论

还没有评论,来抢沙发~