GPT API 迁移教程:Chat Completions 到 Responses API 的最小改造路径
2026/6/6 10:27:47 网站建设 项目流程

如果你的项目只是做单轮问答、简单客服回复、摘要、翻译,Chat Completions 现在通常还能跑,不必为了“看起来更新”连夜重构。

但新项目我会直接从 Responses API 开始。原因很现实:OpenAI 官方迁移文档已经把 Responses API 推荐给所有新项目;GitHub 上 OpenAI 也放出了completions-responses-migration-pack,专门处理从 Completions / Chat Completions 到 Responses 的迁移。换句话说,方向已经很清楚了。

模型层面,示例里建议直接按当前接口选择gpt-5.5,复杂任务再通过 reasoning 配置、上下文预算和工具调用方式调优,不要再照着旧教程写gpt-4ogpt-4.1当主力模型。Claude 侧如果要做备选,可以按 Claude Opus 4.8 或对应的 Sonnet/Haiku 档位做模型路由。

旧写法:Chat Completions

很多项目现在还是这样的结构:

fromopenaiimportOpenAI client=OpenAI(api_key="YOUR_API_KEY")completion=client.chat.completions.create(model="gpt-5.5",messages=[{"role":"system","content":"你是一个严谨的技术助手。"},{"role":"user","content":"解释一下 Responses API 和 Chat Completions 的区别。"}],)print(completion.choices[0].message.content)

这个接口的心智模型很简单:你传messages,模型返回choices[0].message.content。问题也在这里。多模态、工具调用、结构化输出、后台任务、长链路 agent 流程逐步变多以后,Chat Completions 会变成一层不断加字段的旧壳。

新写法:Responses API

Responses API 的最小写法大概是这样:

fromopenaiimportOpenAI client=OpenAI(api_key="YOUR_API_KEY")response=client.responses.create(model="gpt-5.5",input=[{"role":"developer","content":"你是一个严谨的技术助手。"},{"role":"user","content":"解释一下 Responses API 和 Chat Completions 的区别。"}],)print(response.output_text)

迁移时先别急着改业务逻辑。最小改造路径是:

  1. client.chat.completions.create改成client.responses.create
  2. messages改成input
  3. system指令迁移到developer或适合你项目的指令位置。
  4. choices[0].message.content改成output_text或按output数组解析。
  5. 单独处理 stream、tool call、structured output 这三块,不要混在第一次迁移里。

返回结构的坑

Chat Completions 的返回路径比较固定。Responses API 的返回更像一个“事件结果容器”,里面可能有文本、工具调用、推理过程摘要、文件检索结果、多模态结果等。

如果旧项目里到处写着:

completion.choices[0].message.content

建议先封装一层:

defget_model_text(resp):ifhasattr(resp,"output_text")andresp.output_text:returnresp.output_text texts=[]foritemingetattr(resp,"output",[]):forcontentingetattr(item,"content",[]):ifgetattr(content,"type","")=="output_text":texts.append(content.text)return"\n".join(texts)

这样后续要兼容不同模型、不同供应商、不同代理层时,不会把业务代码改得满地都是。

多轮上下文怎么迁

Chat Completions 的典型做法是开发者自己维护一整个messages数组,每次把历史都塞回去。优点是可控,缺点是上下文越来越长,账单越来越不可控。

Responses API 支持通过响应 ID 继续上下文,也适合和官方新的工具、agent、conversation 能力组合。对企业项目来说,我更建议分两层处理:

第一层是业务会话历史,仍然保存在自己的数据库里。
第二层是模型调用上下文,只送当前任务真正需要的内容。

不要把 CRM 里一个客户三年的聊天记录一股脑塞进 GPT-5.5。长上下文不是免费午餐,尤其在调用量上来以后,token 成本会比代码重构更刺眼。

工具调用和结构化输出

如果你以前在 Chat Completions 里用了 function calling,迁移时要重点测这几件事:

  1. 工具定义字段是否能直接平移。
  2. 工具调用结果是否需要回填到下一轮输入。
  3. 结构化输出从旧字段迁移到 Responses API 的新写法后,JSON schema 是否仍然稳定。
  4. 流式输出时,前端是否依赖了旧事件名。

技术上这不是很难,真正麻烦的是旧代码里经常把“模型返回文本”和“工具调用中间态”混在一个函数里。建议先把模型调用层、工具执行层、业务渲染层拆开。拆到这里,后面接 GPT-5.5、Claude Opus 4.8、Gemini 这类多模型路由才有空间。

国内团队会遇到什么限制

国内开发者直接接 OpenAI 官方 API,常见问题不是 SDK 怎么写,而是接入条件:

  1. 中国大陆不在 OpenAI API 官方支持国家和地区列表内,账号、访问、支付和风控都可能卡住。
  2. 海外信用卡、企业账单、发票、报销、额度审批会拖慢上线。
  3. 网络链路不稳定时,流式输出和 agent 工具调用最容易暴露问题。
  4. 用不明来源的“中转站”会带来数据泄露、模型替换、密钥滥用和合规风险。
  5. Claude API 也有官方支持地区限制;Anthropic 近年的地区和所有权政策更严格,国内公司需要特别谨慎。

所以生产环境不建议随便找一个便宜中转域名就上。便宜不等于成本低,尤其是你把用户问题、代码仓库、内部文档都发过去的时候。

词元无忧 API(token5u API)放在哪一层更合适

如果团队已经有 OpenAI SDK 代码,比较务实的做法是保留 SDK 调用习惯,在配置层替换base_url,把模型请求接到 OpenAI 兼容接口。词元无忧 API(token5u API)这类统一接入层的价值主要在三点:

第一,迁移成本低。旧项目从 Chat Completions 到 Responses API 的改造已经够忙了,接入层最好不要再逼业务代码大改。

第二,账单更好管。国内团队更关心人民币充值、企业结算、调用统计、失败重试和成本预估。

第三,多模型切换更顺。今天主力用 GPT-5.5,代码任务备选 Claude Opus 4.8,普通分类任务走更便宜的模型,这些都不应该写死在业务里。

我不会建议所有项目一开始就上模型网关。个人实验、小脚本、低频调用,直接读官方文档就够。进入试点或生产后,再考虑统一 API 层,成本和稳定性才有讨论意义。

迁移检查清单

迁移前先列接口清单:哪些地方调用 Chat Completions,哪些地方解析choices,哪些地方依赖 stream 事件。

迁移时先改最小链路:单轮文本输入、文本输出、错误处理、超时重试。

迁移后再测高级能力:工具调用、结构化输出、多模态输入、上下文续接、流式输出、日志脱敏。

最后压测成本:同样的任务在 GPT-5.5、Claude Opus 4.8 或其他候选模型上的输入 token、输出 token、延迟、失败率分别是多少。

这一步很枯燥,但它决定了项目上线后是“能跑”,还是“能稳定地跑”。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询