本文根據 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、現在調用失敗的人。
結論先說
- Responses API 是 OpenAI 現在的主力接口:官方原話是 Chat Completions 仍然支持,但所有新項目都推薦用 Responses。openai-python README 也把 Chat Completions 稱為「上一代標準(將長期支持)」。
- 最大的區別:輸入輸出從「消息數組 messages / choices」變成了「帶類型的條目(Items)」;內置網頁搜尋、文件搜尋、代碼解釋器、遠程 MCP 等工具,一次請求裏模型可以連續調用多個工具;可以由服務端儲存對話狀態。
- Assistants API 已於 2026-08-26 正式下線,不能再用,要遷到 Responses API + Conversations API。
- 老項目不必一次全遷:官方建議從一個純文本生成流程開始,逐個流程切換,對比效果、延遲、token 用量後再放量。
Responses 和 Chat Completions 對照
| 項目 | Chat Completions | Responses |
|---|---|---|
| 接口地址 | POST /v1/chat/completions | POST /v1/responses |
| 輸入 | messages 數組 | input:一段字符串,或條目數組 |
| 系統級指令 | system / developer 消息 | 頂層參數 instructions(也可保留兼容的消息條目) |
| 輸出 | choices[0].message | output 數組,裏面是不同類型的條目(消息、推理、函數調用……) |
| 取文字的捷徑 | 無 | SDK 的 output_text |
| 一次生成多個候選 | 支持 n | 不支持,需要多發幾次請求 |
| 多輪對話 | 自己維護完整歷史 | previous_response_id、手動回傳條目,或 Conversations API |
| 預設是否存儲 | 新帳號預設存儲 | 預設存儲 |
| 結構化輸出 | response_format | text.format |
| 函數定義 | 外層套 function 對象,預設非嚴格 | 字段平鋪在工具對象裏;不寫 strict 時會嘗試嚴格模式 |
| 流式返回 | 帶 delta 的增量塊 | 帶類型的事件,如 response.output_text.delta |
| token 用量字段 | prompt_tokens / completion_tokens | input_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
0 條評論
還沒有評論,來搶沙發~