For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
主要導覽

GPT-Live 的委派與工具

連接後端智慧體,將經過驗證的結果傳回即時對話。

GPT-Live 負責管理語音對話,並將推理與工具使用委派給後端。後端工作可透過已設定的 Responses 模型執行,也可使用用戶端委派,交由應用程式運作的任何模型、智慧體或服務執行。無論採用哪種模式,權限、確認程序、業務紀錄及任務狀態都由你的應用程式負責管理。

如要進一步瞭解如何引導即時模型進行委派與使用工具,請參閱提示詞指南。

選擇委派模式

使用 Responses 委派時,GPT-Live 會呼叫你選擇的 Responses 模型、提供對話上下文,並將後端結果傳回即時對話。使用 用戶端委派時,則由你的應用程式準備上下文、執行智慧體或工作流程,再將結果傳回 GPT-Live。

如果 Responses 委派的受管理工作流程符合需求,建議先從這個模式開始。如果你需要更精細地控制後端上下文、執行流程或傳回 GPT-Live 的結果,請選擇用戶端委派。

考量因素適合優先選用 Responses 委派的情況…適合優先選用用戶端委派的情況…
實作所需投入你希望由 GPT-Live 準備後端請求、管理連線,並將結果傳回對話。你希望自行建置並維運這些部分。
審查後端結果後端輸出可以直接傳回 GPT-Live。你的應用程式必須先驗證結果、遮蔽敏感內容、合併或捨棄結果,才能將結果傳給 GPT-Live。
後端能力GPT-Live 支援的 Responses 設定與工具符合你的工作流程需求。你需要其他後端、多個模型,或受管理的設定未涵蓋的 API 能力。
上下文管理責任GPT-Live 提供的對話上下文符合你的應用程式需求。你需要精確選擇每個後端請求接收的歷史紀錄、記憶與應用程式狀態。
執行政策已設定的模型與工具迴圈符合任務需求。你需要自訂程式碼與模型之間的路由、備援方案、檢查點,或統籌各個後端步驟的預算。

例如,旅遊助理可以將航班狀態問題傳送給航空公司服務,並將行程變更交給另一個規劃智慧體。應用程式會決定要呼叫哪個後端,以及要將哪些經過驗證的結果傳回 GPT-Live。

在這兩種模式下,你的應用程式都負責管理任務狀態,並在執行自訂工具前落實權限控管及必要的確認程序。是否審查後端結果是另一項獨立決策:這不代表會逐字核准 GPT-Live 說出的內容,也不保證驗證期間 GPT-Live 會保持安靜。請參閱視需要控制播放

用戶端委派也要求你的應用程式維護對話上下文。委派事件包含的是中繼資料,而非任務文字;請使用轉錄事件與應用程式狀態來準備後端請求。

評估語音智慧體時,請使用自己的工作負載比較延遲、任務成功情況與成本。如需針對現有架構的指引,請參閱遷移至 GPT-Live

請在建立工作階段時選擇模式;如要變更模式,請啟動新的工作階段。

委派模式

設定 Responses 委派

建立 Live 工作階段時,加入以下委派組態。請獨立選擇 Responses 模型,不必與語音模型相同:

export const session = {
  model: "gpt-live-1",
  delegation: {
    type: "responses",
    responses: {
      model: "gpt-5.6-terra",
      instructions: "[Your backend prompt]",
    },
  },
};

可以先使用 GPT-5.6 Terra,若工作負載對成本較敏感,也可以試用 GPT-5.6 Luna。選擇後端模型前,請以您的實際任務比較回答品質與延遲。

delegation.responses.tools 中註冊支援的工具。使用 delegation.responses.tool_choice 控制後端可使用哪些工具:"auto" 讓後端自行選擇,"required" 要求呼叫工具,"none" 則禁止呼叫工具。您也可以指定要使用的函式。將 delegation.responses.parallel_tool_calls 設為 true,即可允許同時執行彼此獨立的查詢;若呼叫必須依序執行,則設為 false。您的應用程式仍負責執行自訂函式,並確保遵守相依關係與核准要求。這些設定不會強制即時模型進行委派。

建立 Responses 組態時,必須指定後端 model。此組態支援在 tools 中加入 function 定義與 web_search 項目,也提供 max_output_tokens(設定時至少為 16)、service_tier,以及所選後端模型支援的 reasoningtext 設定。可調整的設定請參閱降低後端延遲

如果您的模型與專案可使用快速模式,可以考慮將其用於對延遲敏感的呼叫。在 GPT-Live 中,請透過 delegation.responses.service_tier: "priority" 選用此模式。

隨著對話變化,您可以傳送 session.update,在 session.delegation.responses 中提供變更,以更新後端模型、指示、可用工具、tool_choice 或其他支援的設定,無須啟動新的 Live 工作階段。省略的設定會保留原有值。將 delegation 設為 null 會選擇用戶端模式,無法用來重設正在執行的 Responses 工作階段;切換模式會失敗,並傳回 immutable_field_update

這些設定採用熟悉的 Responses 概念,但 Live 僅支援獨立 Responses API 的部分功能。Live 會提供對話上下文並啟動委派工作。請透過工作階段設定後端;Live 的 response.create 指令會使用該組態,不接受獨立 Responses API 的請求主體。

從您的應用程式引導即時對話

Responses 委派會管理後端工作流程,但您的應用程式仍可直接將上下文傳送給 GPT-Live 模型。如果您透過側頻 WebSocket 或主要事件連線監控通話,可以使用 session.instructions.appendsession.thinking.appendsession.commentary.append,並搭配 delegation_id: null。例如,根據逐字稿運作的防護機制可以附加指示,改變對話方向。這會引導即時模型,但不會變更 Responses 後端的提示詞,也不會取消已在進行的工作。

處理 Responses 委派

對於由 Responses 處理的工作,session.delegation.created 會包含 target: "responses"response_id。後續的 Responses 事件會封裝在 response.event 中傳送:

{
  "type": "response.event",
  "event_id": "event_response_1",
  "delegation_id": "item_9tA2cB6n2V8c4X1z7Q5r9",
  "event": {
    "type": "response.output_text.delta",
    "sequence_number": 4,
    "item_id": "msg_123",
    "output_index": 0,
    "content_index": 0,
    "delta": "The forecast is",
    "logprobs": []
  }
}

根據 envelope.event.type 分派處理,並保留外層的 delegation_id。不要將每個最上層的 response.* 值都當成未封裝的 Responses 事件處理。處理邏輯也應能容納額外的巢狀 Responses 生命週期事件。

即時語音與委派工作會各自獨立持續進行。後端回應完成,本身並不代表使用者已聽到回答。互動中的語音部分,請以 Live 輸出的逐字稿與音訊為依據。

完成可由用戶端執行的函式呼叫

從巢狀的 response.output_item.done 事件讀取已完成的函式呼叫。完成的函式項目包含 call_idnamearguments;僅憑引數完成事件,還不足以識別該呼叫。

追蹤巢狀 response.created 中的回應 ID 及外層的 delegation_id,並從 response.output_item.done 收集該回應的函式呼叫。轉送的生命週期快照會刻意包含 response.output: [],在 response.completed 時也一樣;其中的 tools 陣列為空,instructionsnull,且省略 input。最終狀態的輸出清單為空, 代表沒有待處理的函式呼叫。請根據收集到的呼叫,判斷繼續執行前必須提交哪些結果。

執行已獲授權的操作後,將結果附加為 Responses 項目:

export function sendUpdate(connection) {
  connection.send({
    type: "response.item.create",
    event_id: "tool_result_1",
    item: {
      type: "function_call_output",
      call_id: "call_123",
      output: '{"status":"confirmed","order_id":"order_123"}',
    },
  });
}

接著明確要求繼續執行回應:

export function sendUpdate(connection) {
  connection.send({
    type: "response.create",
    event_id: "continue_1",
  });
}

繼續執行前,請先提交待處理工具呼叫所需的所有結果。附加函式結果不會自動讓回應繼續執行。response.item.create 沒有獨立的成功確認訊息;請持續處理錯誤,以及後續的巢狀回應生命週期事件。

response.create 是 Live 指令,可使用工作階段中設定的後端,建立或繼續執行委派給 Responses 的工作。請勿在此事件中附加 Responses API 的建立請求主體、後端模型覆寫設定或 delegation_id。這兩個指令都必須在 Responses 委派模式下使用。

從現有的後端提示詞開始

以現有的文字智慧體提示詞為起點。將任務指示與業務規則保留在後端,並調整那些以文字對話或直接控制語音為前提的指示。說明如何處理語音逐字稿,以及如何傳回有用的結果。請在應用程式中強制執行權限限制與必要的確認程序。

## Voice conversation context
You are helping an assistant in a live voice conversation. Transcripts
can contain mistakes, unfinished phrases, and later corrections. Use
the latest context and verified records. If a needed detail is still
unclear, ask for that detail instead of guessing.

## Task instructions
[Your task instructions, business rules, available tools,
and confirmation requirements.]

## Return the result
Return the relevant facts, whether the task is complete, and what comes next.
Use confirmed values. Do not invent a successful action.

將大型結構化酬載、冗長的工具輸出,以及用於顯示的 Markdown 保留在後端。提供相關事實給 GPT-Live,讓它自行決定如何表達。簡潔的工具結果不需要額外呼叫模型來改寫成口語。

使用用戶端委派時,請將結果直接傳回 GPT-Live。使用 Responses 委派時,請依照函式結果流程繼續執行後端工作。

下方的 SDK 事件範例使用 connection,也就是連線指南中已連線的主要 Live WebSocket 或側帶連線。使用主要連線時,請在 session.started 之後呼叫輔助函式;已附加的側帶連線則已屬於執行中的工作階段。

傳送適當類型的更新

根據你希望 GPT-Live 如何使用內容,選擇事件:

要傳送的內容事件
給即時模型的系統層級指示,例如問候語、揭露聲明或停止說話的指示session.instructions.append
供內部推理使用的資訊,附加時不會說出來,但可用於回答使用者的相關問題session.thinking.append
應由模型改述附加文字並說出來的資訊session.commentary.append

這三種事件都使用純字串的 content,每次附加上限為 500 個 Token。請包含 delegation_id:若更新與特定任務有關,請使用原始的用戶端委派 ID;若是一般工作階段上下文,則使用 null。非 null 的 ID 必須指向已知的用戶端委派。指示仍會套用至即時工作階段;附上 ID 不會讓它們變成獨立的後端提示詞。

附加指示可以中斷模型當前的語音或行為。當應用程式需要重新引導對話時,請使用這種方式;任何相關的工具或操作封鎖,都必須透過應用程式狀態強制執行。

若要在用戶端管理的任務期間更新進度而不出聲:

export function sendUpdate(connection) {
  connection.send({
    type: "session.thinking.append",
    event_id: "availability_progress",
    delegation_id: "item_123",
    content: "Checking Thursday availability. No appointment has been booked.",
  });
}

預約確認後,傳送使用者應聽到的結果:

export function sendUpdate(connection) {
  connection.send({
    type: "session.commentary.append",
    event_id: "appointment_result",
    delegation_id: "item_123",
    content: "Your appointment is confirmed for Thursday at 2:00 PM",
  });
}

只有在預約確實成功後,才能傳送該結果。若要傳送適用於整個工作階段的指示,請使用 session.instructions.append,並搭配 delegation_id: null

例如,應用程式透過防護機制封鎖某個請求後,你可以重新引導對話:

export function sendUpdate(connection) {
  connection.send({
    type: "session.instructions.append",
    event_id: "guardrail_block_17",
    delegation_id: null,
    content:
      "Stop speaking about that request. Briefly explain that you cannot help with it, then wait for the user.",
  });
}

這項指示不會取消後端工作。請在應用程式中封鎖受影響的操作,並處理任何已在執行的工作

對應的確認事件為 session.thinking.appendedsession.commentary.appendedsession.instructions.appended。請將它們的 client_event_id 與你傳出事件的 event_id 配對。系統會等到預估上下文已注入後才傳回確認事件,而不會等待語音生成或播放完成。如需了解時序與錯誤處理,請參閱上下文何時到達模型

未說出來的上下文仍可能影響模型之後的發言。這不是存放機密或隱藏推理的私密空間。請傳送有用的事實與簡短的進度摘要。

確保更新準確且有用

執行較長的任務時,請在有值得告知的變化時傳送更新,例如某個步驟完成、延遲已造成影響,或需要使用者回答問題。

在用戶端模式中,使用 session.thinking.append 提供背景進度。若更新值得說出來,請使用 session.commentary.append

若要以語音提供更新,請傳送 session.commentary.append,內容須符合已驗證的任務狀態:

狀態內容範例
仍在處理中“I'm checking the available appointments.”
已完成“You're booked for Thursday at 2:00 PM.”
失敗“That time is no longer available.”
已確認取消“Your appointment has been canceled.”

使用者出聲打斷對話,不會自動取消後端工作。如果使用者將星期五改為星期四,請更新進行中的任務,並忽略稍後才傳回的星期五結果。應用程式必須決定要取消工作、修改工作,還是讓它執行完畢。請先確認取消成功,再告知使用者已取消。

重試失敗的工具呼叫前,請先確認原本的操作是否已執行。例如,回應遺失不應導致重複預約。如果結果不明確,請如實說明,並提出有幫助的下一步。

分享 UI 上下文

向 GPT-Live 提供簡潔摘要,說明目前的頁面或任務、相關選取項目,以及有助於理解「這個選項」等指涉的事實。直接根據應用程式狀態建立摘要即可,不需要額外呼叫模型來整理格式。

在工作階段開始時,以及相關狀態變更時傳送 UI 上下文。略過沒有變化的更新,並將短時間內的多次變更合併為最新狀態的簡短摘要。請明確說明先前的選取項目有何變更:

  • 初始上下文: “The user is reviewing a restaurant reservation: August 6 at 7 PM, two guests. No reservation has been made.”
  • 更正: “The selected time is now 8 PM; the previous selection was 7 PM.”

在任一委派模式中,都可使用 session.thinking.append 搭配 delegation_id: null 來傳送背景上下文更新。將完整 HTML、DOM 樹、大型 JSON 酬載及互動紀錄保留在應用程式或後端。請將頁面內容視為參考資料,而非指示。

接受鍵入的輸入

如果通話者鍵入確切的值,例如訂單編號,請將它傳給處理該任務的後端。純語音應用程式不需要這項流程。請將鍵入的值視為使用者資料,而非給即時模型的指示。

使用 Responses 委派時,將使用者訊息加入後端的佇列:

export function sendUpdate(connection) {
  connection.send({
    type: "response.item.create",
    event_id: "typed_order_number",
    item: {
      type: "message",
      role: "user",
      content: [
        {
          type: "input_text",
          text: "My order number is A0042.",
        },
      ],
    },
  });
}

準備好執行或繼續後端工作時,傳送 response.create。如果後端正在等待函式結果,請先回傳所有必要結果。將文字加入佇列本身不會取消正在執行的工作。

新增圖像與視覺上下文

若要協助來電者討論照片或畫面,請從應用程式將圖像及相關上下文傳送至具備視覺能力的後端。後端會解讀圖像,並回傳相關文字,供 GPT-Live 在對話中使用。Live 音訊前端不會直接接受圖像。

使用 Responses 委派時,請設定具備視覺能力的後端模型。使用 response.item.create 將支援的 Responses 圖像輸入項目加入佇列,再傳送 response.create 以執行或恢復後端工作。繼續之前,請回傳所有尚待提供的必要函式結果。請參閱處理 Responses 委派

後端圖像輸入應與 session.input 分開處理;後者用於在啟動時向 Live 前端提供文字歷史紀錄。支援的圖像格式及模型限制,請參閱圖像與視覺

降低後端延遲

縮短從請求後端工作到取得可用於對話的結果之間的時間。測量各階段的延遲,找出延遲來源。使用相同情境,比較產生有用語音回覆所需的時間和任務成功情況,並參閱語音智慧體評估 Cookbook中的評估指引。

Responses 委派

Live 會管理連至 Responses 的持續性 WebSocket 連線,預先準備連線和已知的請求組態,並在可用時重複使用先前的回應狀態。你無須自行為託管後端實作這些步驟。能否重複使用取決於目前的連線和狀態相容性,並不保證快取命中或特定的延遲時間。

透過 delegation.responses 調整後端:

  • model:獨立於語音模型,另行選擇負責推理和工具選擇的模型。
  • reasoning.effort:使用該模型支援的值,在推理時間和任務品質之間取得平衡。
  • service_tier:依模型支援情況和專案存取權,使用 autodefaultflexpriorityauto 會沿用專案的組態。請評估所選層級的效能與成本。

在工作階段期間,使用 session.update 更新支援的設定。自訂工具仍在你的應用程式中執行,因此即使 Live 管理 Responses 連線,緩慢的服務呼叫、佇列和工具結果緩衝仍可能延遲回答。請及時回傳每個必要的工具結果,並繼續後端回應

回應逐字稿片段

你可以選擇在應用程式中處理逐字稿片段,兩種委派模式都適用。使用者與助理的逐字稿片段會透過 WebSocket 或 WebRTC 資料通道傳入。你可以利用應用程式邏輯或輕量模型處理這些片段,在委派事件抵達前就開始工作,也可以直接以逐字稿觸發由應用程式負責的工作。

這種做法可用於:

  • 減少等待。 掌握足夠資訊後,就根據推測提前開始查詢。例如,在使用者繼續描述偏好時,先檢查可預訂情況。
  • 執行防護機制。 檢查持續增加的逐字稿,找出需要介入的請求或回應。請參閱套用對話防護機制
  • 適時調整對話。 留意透露困惑或挫折的措辭,再調整互動體驗,或傳送有針對性的指令。
  • 更新介面。 醒目標示相關控制項、填入建議欄位,或在結果可用時立即顯示。

瀏覽器應用程式可使用 WebRTC 資料通道提供字幕及更新本機 UI。若在伺服器上處理逐字稿,例如執行防護機制、以輕量模型進行檢查,或根據推測提前呼叫工具,請使用側通道 WebSocket 接收事件,並直接引導同一個 GPT-Live 工作階段。

收到有意義的新資訊時,再處理累積的文字。片段可能不完整,而後續的話語也可能改變請求。請捨棄過時的結果,與後續委派工作協調,避免重複執行動作,並在執行會造成實質影響的動作前,套用平常的權限與確認檢查。

若要將資訊回傳至對話中:

目的事件
變更即時模型的行為,或重新引導對話session.instructions.append
提供不立即朗讀的上下文,供後續回應使用session.thinking.append
提供模型應朗讀的資訊session.commentary.append

若更新不屬於某次用戶端委派,請使用 delegation_id: null。這些附加內容會引導即時模型;UI 變更、工具執行和取消操作則由你的應用程式控制。附加內容的範例請參閱傳送適當類型的更新

共通的最佳化方式

以下後端改善方式對兩種委派模式都有幫助:

  • 依任務選擇模型與推理強度。 比較符合準確度要求的組態。如果較低的推理強度也能可靠地完成任務,就使用較低的設定。
  • 保持回答精簡。 回傳 GPT-Live 繼續對話所需的事實與狀態。避免冗長的說明,也不要僅為了將結果改寫成適合口述的內容而額外呼叫模型。
  • 減少工具延遲和不必要的呼叫。 輸入就緒後即開始執行已授權的工作,在結果仍有效時重複使用,並避免重複執行已完成的查詢。
  • 並行執行互不相依的工作。 互不相依的查詢呼叫可以同時執行。請遵守相依關係,並完成動作所需的確認。parallel_tool_calls 讓模型能請求多個呼叫;自訂函式仍由你的應用程式排程及執行。

如需 Responses 的一般指引,請參閱延遲最佳化;如需了解如何重複使用固定不變的輸入,請參閱提示詞快取

驗證完整互動

測試時,應同時檢查應用程式中作為依據的實際狀態,以及用戶端播放的音訊。後端回應可能已完成,但結果的語音播放卻遭到中斷;上下文確認訊息也只代表內容已被接受,不代表已播放。請將操作 ID、任務修訂版本與委派 ID 分開管理,以免重新連線、重試或延遲抵達的結果導致動作重複執行或遭到撤銷。

使用評估語音智慧體中的方法進行可重複的測試。若已有 Realtime 工具迴圈或串接式後端,請遵循遷移至 GPT-Live 的指引。