AGTCloud API Docs
文件指南API Reference整合與資源更新與幫助

Chat Completions → Responses

將 Messages、Choices 和 Chat 串流增量移轉到 Responses Input、Output Items 與事件。

Chat Completions 使用 messages 和 choices 組織對話;Responses 使用 input、Typed Items 和 output 表達輸入、工具呼叫與結果。移轉時不僅要更換端點,還要調整輸入結構、回應解析、工具循環和串流狀態機。

先確認模型支援 Responses

目標模型對 Responses 欄位、事件和工具的支援範圍可能不同。移轉前請從模型廣場確認模型,並先執行最小文字請求。

是否需要移轉

適合移轉到 Responses 的情況:

  • 新專案希望使用統一的 Typed Input 和 Output Items;
  • 需要 previous_response_id 等多輪狀態能力;
  • 需要 Responses 已支援的內建工具;
  • 應用程式願意按照 Item 類型處理文字、工具呼叫和其他輸出。

可以繼續使用 Chat Completions 的情況:

  • 現有應用程式穩定依賴 messages、choices 和 Chat Delta;
  • 目標模型或所需工具只支援 Chat Completions;
  • 目前沒有足夠迴歸測試覆蓋工具、多輪和 Streaming;
  • 移轉收益不足以覆蓋回應解析和狀態管理的改造成本。

核心變化

Chat CompletionsResponses移轉動作
POST /v1/chat/completionsPOST /v1/responses更換 Client 方法或請求路徑
messagesinput / Input Items保留角色和內容語義,改為 Responses 輸入結構
系統或開發者訊息instructions 或 Typed Input決定指令與對話歷史的邊界
max_completion_tokensmax_output_tokens更換欄位名
response_formattext.format移動結構化輸出設定
choices[].messageoutput[] Items按 Item 和 Content 類型遍歷
tool_callsfunction_call Item保留函式名、參數和呼叫 ID
Tool Messagefunction_call_output Item使用對應 call_id 回傳結果
Chat Deltaresponse.* 事件重寫串流事件分派
prompt_tokens / completion_tokensinput_tokens / output_tokens更新 Usage 讀取邏輯

最小請求 Before / After

{
  "model": "MODEL_ID",
  "messages": [
    {
      "role": "system",
      "content": "回答要簡潔、準確。"
    },
    {
      "role": "user",
      "content": "請用一句話介紹 AGTCloud。"
    }
  ]
}

使用 OpenAI SDK 時,Client 的 Base URL 仍為 https://api.agtcloud.cn/v1。方法從 client.chat.completions.create(...) 改為 client.responses.create(...)。完整 Python 和 TypeScript 初始化方式請參閱 OpenAI SDK。

移轉回應讀取

Chat Completions 通常從第一條 Choice 讀取助手訊息:

choices[0].message.content

Responses 傳回有序的 output[]。其中可能同時包含訊息、函式呼叫、搜尋呼叫或其他 Item。SDK 的 output_text 可以用於讀取彙整文字,但需要處理工具或其他輸出時,應遍歷完整 output。

response.output_text
response.output[]

不要假設 output[0] 一定是文字

工具呼叫或其他 Item 可能出現在文字訊息之前。請按照 type 分派,並為暫不辨識的 Item 保留記錄或相容分支。

移轉多輪狀態

方式使用方法注意事項
用戶端重播將歷史 Input 和 Output Items 繼續放入下一次 input應用程式自行控制儲存、裁剪和隱私策略
回應關聯下一次請求傳入 previous_response_id先確認目標模型和介面支援該能力

使用 previous_response_id 時,上一輪 instructions 不會自動繼承。每一輪仍需要根據應用程式需要重新設定指令。

移轉後不要同時完整重播同一段歷史並再次透過 previous_response_id 引用它,否則可能造成重複上下文。

移轉 Function Calling

工具定義

Chat Completions 將函式定義放在 tools[].function 中:

{
  "type": "function",
  "function": {
    "name": "get_weather",
    "description": "查詢城市天氣",
    "parameters": {
      "type": "object",
      "properties": {
        "city": { "type": "string" }
      },
      "required": ["city"]
    }
  }
}

Responses 將函式資訊直接放在 Function Tool 物件中:

{
  "type": "function",
  "name": "get_weather",
  "description": "查詢城市天氣",
  "parameters": {
    "type": "object",
    "properties": {
      "city": { "type": "string" }
    },
    "required": ["city"]
  }
}

結果回傳

  • Chat:從 assistant.tool_calls[] 讀取呼叫,並追加帶 tool_call_id 的 Tool Message。
  • Responses:從 output[] 讀取 function_call,再傳送 function_call_output,其中 call_id 必須與原呼叫一致。

無論使用哪種協議,函式都由你的應用程式執行。不要直接執行未經驗證的參數,也不要把工具異常偽裝成正常結果。

移轉 Streaming

Chat Completions 透過每個 Chunk 的 choices[].delta 傳回增量,通常以 [DONE] 結束。

Responses 使用具名事件,例如:

  • response.created;
  • response.output_item.added;
  • response.content_part.added;
  • response.output_text.delta;
  • response.output_text.done;
  • response.completed。

移轉時應將原來的“只串接文字”邏輯改成事件分派器:先按事件類型處理,再根據 output_index、content_index、item_id 等識別碼更新對應狀態。

斷流不等於完成

只有收到完成事件並確認回應狀態後,才應把本輪標記為成功。連線中斷、失敗事件和不完整狀態需要獨立處理。

移轉 Structured Outputs

Chat Completions 將輸出格式設定放在 response_format;Responses 將對應設定放在 text.format。移轉時需要同步修改:

  1. 請求欄位位置;
  2. JSON Schema 封裝結構;
  3. SDK 的解析輔助方法;
  4. 拒絕、不完整回應和 Schema 驗證失敗的處理。

詳細欄位請分別檢視 Chat Completions 和 OpenAI Responses。

兩種協議的搜尋入口不同:

  • Chat Completions 使用 web_search_options,並要求選擇支援搜尋的模型;
  • Responses 在 tools 中啟用支援的 Web Search Tool,並可能傳回搜尋呼叫 Item 和引用。

域名過濾、來源清單、使用者位置和即時互聯網存取等設定取決於所選協議與模型。完整範例請參閱 OpenAI Web Search。

Usage、錯誤與中斷

移轉監控與計費讀取邏輯時,至少調整:

Chat CompletionsResponses
usage.prompt_tokensusage.input_tokens
usage.completion_tokensusage.output_tokens
usage.total_tokensusage.total_tokens
finish_reasonResponse、Item 和內容的狀態或錯誤資訊

同時保留 HTTP 狀態碼、錯誤物件和 Request ID。不要只捕獲 SDK 異常文字;應用程式記錄應能區分身分驗證失敗、模型不可見、限流、服務錯誤和連線中斷。

分階段移轉

移轉最小文字流程

先完成請求建立和文字讀取,不啟用 Streaming、工具或多輪狀態。

改造 Output Item 分派

支援訊息與函式呼叫,並對未知 Item 保持相容,不直接丟棄。

移轉狀態與串流事件

分別驗證用戶端歷史重播、previous_response_id、文字增量、工具參數增量和結束事件。

恢復進階能力

按照結構化輸出、Web Search 和多模態輸入的順序逐項啟用,每項都保留獨立迴歸測試案例。

迴歸與回退清單

  • 一般文字、空輸出、拒絕、不完整和失敗狀態;
  • 單工具、多工具、工具失敗和參數驗證失敗;
  • 無狀態歷史重播與 previous_response_id;
  • Streaming 正常完成、斷流和重複事件;
  • Structured Outputs 驗證失敗;
  • Usage、錯誤資訊、Request ID、逾時和限流;
  • 目標模型不支援某項 Responses 能力時,能夠切回 Chat Completions。

在正式環境切換前,為 Chat 與 Responses 保留獨立設定和可控開關。確認業務指標、記錄和錯誤處理穩定後,再清理舊解析路徑。

下一步

本頁目錄