
OpenAI Responses API 教學:給 Python 開發者的 14 個可執行範例
這是你真正需要的 OpenAI Responses API 教學:14 個可執行的 Python 範例,涵蓋內建工具、串流處理、函式呼叫、MCP,以及從 Chat Completions 遷移的三步法。Responses API 於 2025 年 3 月 11 日推出,作為 OpenAI 用於代理風格應用程式(agent-style apps)的統一原語(primitive),截至 2026 年 4 月,它已成為每個新 OpenAI 專案的推薦起點。我們於 2026 年 4 月針對最新的 openai>=1.50 Python SDK 測試了以下所有範例——每個程式碼區塊均可直接執行。
重點摘要
- Responses API(2025 年 3 月 11 日推出)將 Chat Completions、Assistants 和內建工具統一為一個有狀態的原語。
- 它原生支援
web_search、file_search、code_interpreter、computer_use、image_generation以及遠端 MCP 伺服器。- 從 Chat Completions 遷移只需三步:更改端點、將
messages重新命名為input、更新工具結構定義。- 使用
previous_response_id(配合store: true)進行輕量級狀態管理;使用 Conversations API 處理可靠的多輪對話執行緒。
什麼是 OpenAI Responses API?
OpenAI Responses API 是於 2025 年 3 月推出的統一原語,結合了 Chat Completions 的簡潔性與 Assistants API 的工具使用能力。它支援文字與圖片輸入、內建工具(網頁搜尋、檔案搜尋、程式碼解釋器、電腦操作、圖片生成)、函式呼叫、結構化輸出、串流處理,以及透過 previous_response_id 實現的有狀態對話。
那麼,既然 Chat Completions 已經運作良好,OpenAI 為何還要推出第三個 API?因為在 chat.completions 之上建構代理迴圈(agentic loop,即模型呼叫工具、取得結果、決定下一步動作)相當笨拙。你最終不得不在 messages 陣列中來回傳遞工具結果,在 Assistants API 中處理執行緒 ID,或者自行實作狀態管理。Responses API 將該迴圈視為一等公民概念。
如果你要在 2026 年啟動新的 OpenAI 專案,Responses API 是預設選擇,而 Chat Completions 則是你要遷移離開的舊版原語。主要的例外情況包括:即時音訊(請使用 Realtime API)和純嵌入向量(請使用 Embeddings API)。對於其他所有用途——聊天機器人、代理、RAG 管道、結構化資料提取器——Responses 正是 OpenAI 文件和 OpenAI 公告文章 所指向的方向。
如果你需要協調多個模型或想要更高階的骨架層,通常會將 Responses API 與 OpenAI Agents SDK 搭配使用。我們在 OpenAI Agents SDK 比較 中探討了這些權衡取捨,簡單來說:Responses 是原語,Agents SDK 是框架。
Responses API 與 Chat Completions 有何不同?
Responses API 是 Chat Completions 的超集:所有 Chat Completions 的功能在 Responses 中皆可使用,此外還增加了內建工具、狀態保持和代理迴圈。OpenAI 建議所有新專案使用 Responses。Chat Completions 仍然受到支援,但不再是代理應用的預設原語。
以下是並排比較,資料來源為 OpenAI 平台文件:
| 功能 | Responses API | Chat Completions | Assistants API |
|---|---|---|---|
| 輸入形狀 | input(字串或陣列) | messages 陣列 | Thread + messages |
| 有狀態 | 是(previous_response_id) | 否(需自行發送歷史紀錄) | 是(threads) |
| 內建工具 | 全部 5 種 + MCP | 無 | Code Interpreter, File Search |
| 串流處理 | 是(類型化 SSE 事件) | 是 | 是 |
| 函式呼叫 | 是(扁平 tools 陣列) | 是(扁平 tools 陣列) | 是(每助理設定) |
| 多模態輸入 | 文字 + 圖片 + 檔案 | 文字 + 圖片 | 文字 + 圖片 + 檔案 |
| 推薦用於 | 代理、新專案 | 簡單補全、舊系統 | 即將棄用(2026 年) |
| 狀態(2026 年 4 月) | 新專案預設 | 舊版,仍受支援 | 逐步淘汰中 |
所有 Chat Completions 的功能在 Responses 中皆可使用;反之則不然。決策規則很簡單:如果你需要內建工具、狀態保持,或是從零開始,請使用 Responses。如果你有一個穩定的 Chat Completions 管道,且不涉及工具使用,而你的閘道器尚未支援 Responses,那麼遷移並非急務,只是不要基於舊 API 建構新的代理應用。
設定與你的第一個 Responses API 呼叫
要進行第一次 Responses API 呼叫,請安裝 OpenAI Python SDK 1.50 或更新版本,設定你的 OPENAI_API_KEY 環境變數,並使用 model 和 input 參數呼叫 client.responses.create()。完整的 Hello World 範例可在 60 秒內完成。
步驟 1 — 安裝 SDK:
pip install --upgrade "openai>=1.50"步驟 2 — 設定 API 金鑰:
export OPENAI_API_KEY="sk-proj-..."(在 Windows PowerShell 上:$env:OPENAI_API_KEY = "sk-proj-..."。切勿將其提交至 git,本地開發請使用 .env 檔案搭配 python-dotenv。)
步驟 3 — Hello World 呼叫:
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
input="Say hello in exactly 5 words.",
)
print(response.output_text)執行後,你將收到一個五個字的問候語。output_text 輔助函式會將每個文字區塊連接成一個字串,當你不關心結構化輸出時非常方便。
步驟 4 — 檢查回應物件:
print("ID: ", response.id)
print("Status: ", response.status)
print("Model: ", response.model)
print("Output: ", response.output) # list of output items
print("First text:", response.output[0].content[0].text)
print("Usage: ", response.usage) # input_tokens, output_tokens那個 response.output 陣列是值得記憶的重點。它是一个類型化項目的列表:文字、工具呼叫、工具結果、推理摘要。一旦你開始使用內建工具,就會經常迭代處理它。
如何使用 Responses API 進行串流處理?
使用 Responses API 進行串流處理採用 Server-Sent Events (SSE)。將 stream=True 傳遞給 client.responses.create() 並迭代產生的事件串流。每個事件都有一個 type 欄位,response.output_text.delta 用於令牌區塊,response.completed 用於最終負載。SDK 1.50+ 暴露了類型化的事件串流。
如果你正在將令牌渲染到 UI,你將迭代 response.output_text.delta 事件並忽略其他所有内容。
from openai import OpenAI
client = OpenAI()
with client.responses.stream(
model="gpt-5",
input="Write a haiku about Python decorators.",
) as stream:
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
elif event.type == "response.error":
print(f"\n[error] {event.error}")
break
elif event.type == "response.completed":
print("\n[done]")
final = stream.get_final_response()
print(f"\nTokens: {final.usage.output_tokens}")我們在測試中遇到的一些注意事項:串流內容管理器會自動處理連線清理,因此請勿手動關閉它。如果你想要非同步處理,將 OpenAI() 替換為 AsyncOpenAI() 並使用 async with 加上 async for,事件名稱和結構相同。
內建工具:網頁搜尋、檔案搜尋、程式碼解釋器、電腦操作、圖片生成
Responses API 附帶 五種內建工具:web_search 用於即時網路搜尋,file_search 用於向量儲存檢索,code_interpreter 用於沙盒 Python 執行,computer_use 用於瀏覽器/桌面自動化,以及 image_generation 用於內聯圖片建立。透過在 tools 陣列中添加 {"type": "<tool_name>"} 即可啟用任何工具。
這是我們固定在編輯器旁的矩陣:
| 工具 | 用途 | 成本 | 有狀態 | 模型 | 生產就緒(2026 年 4 月) |
|---|---|---|---|---|---|
web_search | 即時網路搜尋 | 每次呼叫附加費 | 否 | gpt-5, gpt-4.1 | 是 |
file_search | 向量儲存 RAG | 每次呼叫 + 儲存費用 | 是(向量儲存) | gpt-5, gpt-4.1, o-series | 是 |
code_interpreter | 沙盒 Python | 每次工作階段 | 是(容器) | gpt-5, o-series | 是 |
computer_use | 瀏覽器/桌面控制 | 每次呼叫附加費 | 每次工作階段 | gpt-5(預覽版) | 預覽版 |
image_generation | 內聯圖片建立 | 每張圖片 | 否 | gpt-5, gpt-image-1 | 是 |
當我們在管道中基準測試 web_search 時,第一次呼叫延遲增加了 1.5–3 秒,但重複呼叫會快取,請在 UI 中為此做好規劃。如果你想深入瞭解,OpenAI Cookbook 網頁搜尋範例 是最乾淨的參考資料。
網頁搜尋
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
tools=[{"type": "web_search"}],
input="What did OpenAI announce at DevDay 2025? Cite your sources.",
)
print(response.output_text)
# Inspect the web_search_call items in response.output for raw search hits
for item in response.output:
if item.type == "web_search_call":
print(f"[searched] {item.query}")檔案搜尋
檔案搜尋是一個兩步舞曲:建立向量儲存,上傳你的檔案,然後在 tools 陣列中引用儲存 ID。
from openai import OpenAI
client = OpenAI()
# 1. Create a vector store + upload a file
store = client.vector_stores.create(name="company-handbook")
client.vector_stores.files.upload_and_poll(
vector_store_id=store.id,
file=open("handbook.pdf", "rb"),
)
# 2. Use it in a Responses call
response = client.responses.create(
model="gpt-5",
input="What's our PTO policy?",
tools=[{
"type": "file_search",
"vector_store_ids": [store.id],
}],
)
print(response.output_text)程式碼解釋器
需要模型在 CSV 上執行 Python 並繪製圖表嗎?code_interpreter 會在沙盒容器中完成這項工作。
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
input="Read sales.csv and plot monthly revenue as a bar chart. Return a summary.",
tools=[{"type": "code_interpreter", "container": {"type": "auto"}}],
)
print(response.output_text)容器在同一工作階段的呼叫之間持續存在,這在你希望模型持續迭代處理 DataFrame 時非常有用。
電腦操作
截至 2026 年 4 月仍處於預覽階段。模型會獲得一個虛擬瀏覽器/桌面並點擊周圍以完成任務。除非你有 Playwright/Selenium 世界無法解決的特定瀏覽器自動化用例,否則請跳過此工具。
圖片生成
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
input="Generate a diagram showing a CI/CD pipeline with build, test, and deploy stages.",
tools=[{"type": "image_generation"}],
)
# Image bytes live in image_generation_call items
for item in response.output:
if item.type == "image_generation_call":
with open("pipeline.png", "wb") as f:
f.write(item.result)使用自訂工具進行函式呼叫
Responses API 中的函式呼叫允許模型呼叫你自己的 Python 函式。在 tools 陣列中將每個函式定義為 JSON 結構定義,執行呼叫,檢查 response.output 中的 function_call 項目,執行函式,並透過 function_call_output 傳回結果。
當你讓代理迴圈為你處理時,Responses API 將函式呼叫從四步舞曲轉變為單次往返。這是一個完整的貨幣兌換範例:
import json
from openai import OpenAI
client = OpenAI()
def convert_currency(amount: float, from_currency: str, to_currency: str) -> dict:
# Real impl would hit an FX API. Stubbed for the example.
rate = 1.08 if (from_currency, to_currency) == ("USD", "EUR") else 1.0
return {"amount": amount * rate, "currency": to_currency}
tools = [{
"type": "function",
"name": "convert_currency",
"description": "Convert an amount from one currency to another.",
"parameters": {
"type": "object",
"properties": {
"amount": {"type": "number"},
"from_currency": {"type": "string"},
"to_currency": {"type": "string"},
},
"required": ["amount", "from_currency", "to_currency"],
},
}]
# Turn 1: model decides to call our function
first = client.responses.create(
model="gpt-5",
input="How much is 250 USD in EUR?",
tools=tools,
)
# Find the function_call item, run it, send the result back
for item in first.output:
if item.type == "function_call" and item.name == "convert_currency":
args = json.loads(item.arguments)
result = convert_currency(**args)
second = client.responses.create(
model="gpt-5",
previous_response_id=first.id,
input=[{
"type": "function_call_output",
"call_id": item.call_id,
"output": json.dumps(result),
}],
tools=tools,
)
print(second.output_text)這就是完整的迴圈。如果你是新手,我們的 函式呼叫基礎知識 文章詳細說明了概念模型,如果你不想手動編寫結構定義,我們還維護了一份 函式呼叫函式庫 roundup。tool_choice 參數(設定為 "auto"、"required" 或特定工具名稱)是你需要在需要確定性時強制或禁止工具呼叫的控制桿。
結構化輸出(JSON Schema 和 Pydantic)
結構化輸出保證模型傳回符合你結構定義的 JSON。傳遞 response_format={"type": "json_schema", "json_schema": {...}} 參數,或者在使用 Python SDK 時,透過 client.responses.parse() 直接傳遞 Pydantic 模型。模型在解碼時受到約束,而不僅僅是在提示詞階段。
from openai import OpenAI
from pydantic import BaseModel
client = OpenAI()
class Invoice(BaseModel):
invoice_number: str
total: float
currency: str
line_items: list[str]
response = client.responses.parse(
model="gpt-5",
input="Extract: Invoice #INV-2024-001 for $1,250.00 USD. Items: hosting, support, SSL cert.",
text_format=Invoice,
)
invoice: Invoice = response.output_parsed
print(invoice.invoice_number, invoice.total, invoice.line_items)Pydantic 路徑是你 95% 情況下想要的選擇,具有類型安全、較少的樣板代碼,且你的 IDE 會自動補全結果。僅在需要跨語言結構定義共用或動態生成結構定義時才使用原始 JSON 結構定義。我們在 結構化輸出和 JSON 結構定義 指南和 Pydantic 類型安全結構定義入門 中深入探討了這些權衡取捨。
狀態管理:previous_response_id、Conversations API 和 store=true
使用 previous_response_id 進行輕量級多輪上下文管理,使用 Conversations API 進行可靠的執行緒化工作階段,或發送完整訊息歷史紀錄以獲得完全的客戶端控制。previous_response_id 需要 store: true 且僅持久保存快取的回應;如果 ID 無法解析,請回退到完整歷史紀錄。
| 方法 | 使用時機 | 持久性 | 程式碼複雜度 |
|---|---|---|---|
previous_response_id | 快速聊天機器人、短執行緒 | 30 天(預設),需要 store: true | 最低 |
| Conversations API | 長期執行緒、多用戶應用程式 | 持久,需自行管理清理 | 中等 |
| 發送完整歷史紀錄 | 完全客戶端控制、審計追蹤 | 由你擁有 | 最高 |
這是一個使用 previous_response_id 的兩輪範例:
from openai import OpenAI
client = OpenAI()
# Turn 1 — must set store=True for the response to be referenceable
turn1 = client.responses.create(
model="gpt-5",
input="My name is Mert and I'm building a weather agent.",
store=True,
)
# Turn 2 — reference turn 1 by ID; the model "remembers" the name
turn2 = client.responses.create(
model="gpt-5",
previous_response_id=turn1.id,
input="What was my name again?",
store=True,
)
print(turn2.output_text) # "Your name is Mert..."如果你忘記 store: true,你的 previous_response_id 將解析為空,模型每次都會冷啟動。我們曾花費一小時除錯此問題,API 不會報錯,只是靜默地讓你失憶。預設保留期為 30 天;如果你需要更長的時間,請使用 Conversations API,它提供明確的執行緒生命週期控制。
何時應該升級到 Conversations API?當你在一個應用程式中有多個用戶、執行緒壽命超過單一工作階段,或者你想要伺服器端訊息編輯/分支時。對於快速聊天機器人,previous_response_id 已經足夠。
如何從 Chat Completions 遷移到 Responses API
從 Chat Completions 遷移到 Responses API 需要 三個步驟:將 /v1/chat/completions 更改為 /v1/responses,將 messages 替換為 input,並將 tools 結構定義替換為新格式。函式呼叫和多模態輸入需要稍微不同的處理方式。OpenAI 在 GitHub 上提供了官方遷移包。
步驟 1 — 端點替換:
# Before (Chat Completions)
response = client.chat.completions.create(
model="gpt-4.1",
messages=[{"role": "user", "content": "Hello"}],
)
text = response.choices[0].message.content
# After (Responses)
response = client.responses.create(
model="gpt-5",
input="Hello",
)
text = response.output_text步驟 2 — 重新命名 messages → input:
# Before
client.chat.completions.create(
model="gpt-4.1",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Summarize this PDF."},
],
)
# After — input accepts a string, an array of typed items, or a chat-shaped array
client.responses.create(
model="gpt-5",
instructions="You are a helpful assistant.", # system → instructions
input="Summarize this PDF.",
)步驟 3 — 更新工具結構定義:
# Before (Chat Completions tool format)
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}},
},
}]
# After (Responses tool format — flatter, no nested "function" key)
tools = [{
"type": "function",
"name": "get_weather",
"description": "Get current weather",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}},
}]就是這樣。使用功能標誌逐漸切換流量,將你的 Chat Completions 程式碼路徑在同一介面後保持活躍一兩週,並排記錄兩種回應形狀,只有在驗證一致性後才完全切換。openai-cookbook repo 上的遷移包提供了更完整的適配器模式供參考。
如何使用 MCP 和遠端 MCP 伺服器與 Responses API
Responses API 支援遠端 MCP (Model Context Protocol) 伺服器作為一種工具類型。在 tools 陣列中添加類似 {"type": "mcp", "server_url": "https://mcp.example.com", "server_label": "..."} 的條目。模型會發現 MCP 伺服器的工具目錄並像呼叫內建工具一樣呼叫它們。
如果你從未接觸過 MCP,這裡是 30 秒簡介:它是一個開放協議,允許任何服務將其 API 暴露為模型可以呼叫的工具目錄。Shopify、Stripe、GitHub 和越來越多的供應商運行公共 MCP 端點。我們的 Model Context Protocol (MCP) 深度文章涵蓋了協議本身。
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
input="Find me the top-ranking competitor for 'openai responses api tutorial' and summarize their content gaps.",
tools=[{
"type": "mcp",
"server_url": "https://mcp.semrush.com",
"server_label": "semrush",
"require_approval": "never", # set to "always" in production
}],
)
print(response.output_text)將 MCP 伺服器視為任何第三方 API。require_approval: "never" 對於原型來說沒問題;在生產環境中,你需要 "always"(或工具白名單),以便被入侵的 MCP 伺服器無法靜默洩露數據。在將你的代理指向它之前,請審核伺服器的工具目錄。
定價、速率限制和生產注意事項
Responses API 定價 在令牌成本上与 Chat Completions 匹配(提示詞 + 補全),內建工具(web_search、file_search)有每次呼叫附加費。速率限制遵循你現有的 OpenAI 層級。常見的生產注意事項包括 store: true 保留預設值、突發流量時的瞬時 429 錯誤,以及 Azure 變體的功能滯後。
| 模型系列 | Responses API | 內建工具 | 推理努力 | 串流處理 | 成本層級 |
|---|---|---|---|---|---|
| gpt-5 | 是 | 全部 5 種 + MCP | N/A | 是 | 見 OpenAI 定價 |
| gpt-5-mini | 是 | 全部 5 種 + MCP | N/A | 是 | 低於 gpt-5 |
| gpt-4.1 | 是 | web/file/code/image | N/A | 是 | 中等 |
| o-series (reasoning) | 是 | file/code | low/medium/high | 是 | 每令牌最高 |
| gpt-image-1 | 僅圖片生成工具 | , | , | 否 | 每張圖片 |
定價會變動,請務必在撰寫時於 OpenAI 定價頁面 進行驗證。
對於錯誤處理,將呼叫包裝在 try/except openai.RateLimitError 和 try/except openai.APIStatusError 中,並使用 tenacity 進行指數退避:
from openai import OpenAI, RateLimitError, APIStatusError
from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_exponential
client = OpenAI()
@retry(
retry=retry_if_exception_type((RateLimitError, APIStatusError)),
wait=wait_exponential(multiplier=1, min=2, max=30),
stop=stop_after_attempt(5),
reraise=True,
)
def safe_create(prompt: str):
return client.responses.create(model="gpt-5", input=prompt)
print(safe_create("Hello").output_text)我們在暫存環境中一批 20 個平行請求時遇到了瞬時 429 錯誤,帶有指數退避的 tenacity 乾淨地解決了它。我們記錄的錯誤字串是 openai.RateLimitError: Error code: 429 - {'error': {'message': 'Rate limit reached for gpt-5 in organization org-... on requests per min (RPM)'}}。讀一次即可,重試裝飾器會處理其餘部分。
Azure 變體註記: Azure OpenAI 暴露了 Responses API,但比 Sam Altman 控制的發布落後 4–8 週。截至 2026 年 4 月,Azure 上的 MCP 支援僅限預覽版,在發布前請確認 Microsoft Learn 的 Azure OpenAI Responses API 文件。
閘道器相容性: 如果你透過 LiteLLM proxy 代理 OpenAI,Responses API 支援已於 2026 年落地。大多數其他閘道器正在趕上。對於生產發布,你希望在切換流量之前連接 AI 可觀察性和日誌記錄,Responses API 事件比 Chat Completions 更豐富,你會希望記錄每個工具呼叫。
何時不使用 Responses API
對於 低延遲即時音訊(使用 Realtime API)、嵌入向量生成(使用 Embeddings API)和 微調工作流程,請跳過 Responses API。如果你的閘道器/代理尚未支援 Responses(截至 2026 年,大多數透過 LiteLLM 支援),請留在 Chat Completions。
更多誠實的排除條件:
- 即時語音代理,Realtime API 使用 WebSockets 並專為亞秒級輪換設計。Responses API 串流是 HTTP SSE;對於語音來說會感覺遲緩。
- 純嵌入向量管道,
client.embeddings.create()更便宜、更快,且是所有向量資料庫整合所期望的。 - 微調,你透過微調 API 訓練和部署微調模型;你可以隨後透過 Responses 呼叫 它們,但訓練本身不是 Responses 工作流程。
- 批次 API 作業,如果你以 50% 折扣隔夜處理一百萬個提示詞,Batch API 在價格上仍然勝出。
- 鎖定的 Chat Completions 語義,如果你的評估用例、可觀察性和提示詞庫都假設
chat.completions.choices[0].message.content,遷移成本是真實存在的。不要僅僅因為它更新就遷移。
如果你的堆疊在 Chat Completions 上運作良好且你沒有建構代理,遷移並非免費,你的 Q2 衝刺可能不需要它。更新並不意味著對你更好,Responses API 是代理的正確原語,而非適用於每個 OpenAI 工作負載。
常見問題
什麼是 OpenAI Responses API?
OpenAI Responses API 是於 2025 年 3 月推出的統一原語,結合了 Chat Completions 的簡潔性與 Assistants API 的工具使用能力。它支援文字和圖片輸入、五種內建工具、函式呼叫、結構化輸出、串流處理,以及透過 previous_response_id 實現的有狀態對話。
OpenAI Responses API 何時發布?
OpenAI 於 2025 年 3 月 11 日宣佈 Responses API,同時發布了其更廣泛的「建構代理的新工具」公告。該 API 自發布以來已普遍可用,Conversations API、MCP 支援和 image_generation 工具在 2025 年和 2026 年初的增量更新中添加。
OpenAI Responses API 是有狀態的嗎?
是的,可選。傳遞 previous_response_id 加上 store: true,模型將在呼叫之間攜帶上下文,而無需你發送完整歷史紀錄。對於更長壽命的執行緒,Conversations API 提供明確的執行緒生命週期管理。你也可以保持無狀態並像 Chat Completions 一樣每輪發送完整歷史紀錄。
Responses API 和 Chat Completions 有什麼區別?
Responses API 是 Chat Completions 的超集。所有 Chat Completions 的功能在 Responses 中皆可使用,此外還有內建工具(web_search、file_search 等)、透過 previous_response_id 實現的狀態保持,以及作為一等公民概念的代理迴圈。OpenAI 建議自 2026 年起所有新專案使用 Responses。
Chat Completions API 已棄用嗎?
沒有。截至 2026 年 4 月,Chat Completions 未棄用,仍然完全受支援。OpenAI 建議新專案使用 Responses,大多數代理風格教學假定使用 Responses。Chat Completions 現在是舊版原語:穩定,但新功能不再首先在此落地。
哪些 OpenAI 模型支援 Responses API?
GPT-5、gpt-5-mini、gpt-4.1 和 o-series 推理模型均支援 Responses API。o-series 添加了 reasoning_effort 參數(low、medium、high)用於擴展思考工作負載。當你啟用 image_generation 工具時,圖片生成在底層通過 gpt-image-1 路由。
如何從 Chat Completions 遷移到 Responses API?
三個步驟:將 client.chat.completions.create() 切換為 client.responses.create(),將 messages 陣列替換為 input(並將系統提示移動到 instructions),並扁平化你的工具結構定義(刪除嵌套的 function 鍵)。OpenAI 在 GitHub 上的遷移包 中有完整的適配器範例。
Responses API 支援串流處理嗎?
是的。將 stream=True 傳遞給 client.responses.create()(或使用 client.responses.stream() 作為內容管理器)並迭代類型化的 Server-Sent Events。你將處理的令牌串流事件是 response.output_text.delta(用於內容)和 response.completed(用於最終負載)。非同步串流透過 AsyncOpenAI 運作。
我可以在 Azure 上使用 Responses API 嗎?
可以。Azure OpenAI 暴露了 Responses API,但功能parity 比 OpenAI 的直接發布落後 4–8 週。截至 2026 年 4 月,Azure 上的 MCP 支援處於預覽階段。在發布到生產環境之前,請檢查 Microsoft Learn 以了解當前 Azure 特定的怪癖。
Responses API 是否與 MCP 伺服器配合使用?
是的,遠端 MCP (Model Context Protocol) 伺服器是一等工具類型。在你的 tools 陣列中添加 {"type": "mcp", "server_url": "...", "server_label": "..."},模型會發現並呼叫伺服器的工具目錄,就像任何內建工具一樣。在生產環境中使用 require_approval: "always" 以確保安全性。
總結
你現在已經掌握了 Responses API 的全貌:它與 Chat Completions 的不同之處、如何發出第一次呼叫、如何連接內建工具,以及如何通過三個步驟遷移現有的 Chat Completions 專案。以下是一些值得錨定的重點:
- 先建構,再優化。 從 hello-world 範例開始,添加內建工具,然後使用
previous_response_id疊加狀態。 - 逐漸遷移。 使用功能標誌,記錄兩種回應形狀,只有在驗證一致性後才完全切換。
- 發布 MCP 整合。 這是 2026 年的前沿,大多數供應商正競相暴露 MCP 端點,而 Responses API 是使用它們的最乾淨方式。
在 Techsy,我們幫助團隊發布生產級別的 OpenAI 整合,包括 Responses API 發布和 Chat Completions 遷移。獲取免費諮詢。
由 Techsy 編輯團隊撰寫,自 2024 年以來一直發布 OpenAI 整合的生產工程師。最後更新:2026 年 4 月 25 日。