Live API - WebSockets API reference

Live API 是使用 WebSockets 的有狀態 API。本節將進一步說明 WebSockets API。

工作階段

WebSocket 連線會在用戶端和 Gemini 伺服器之間建立工作階段。用戶端啟動新連線後,工作階段即可與伺服器交換訊息,以執行下列操作:

  • 將文字、音訊或影片傳送至 Gemini 伺服器。
  • 接收來自 Gemini 伺服器的音訊、文字或函式呼叫要求。

WebSocket 連線

如要啟動工作階段,請連線至這個 WebSocket 端點:

wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent

工作階段設定

建立 WebSocket 連線後傳送的第一則訊息會設定工作階段設定,包括模型、生成參數、系統指令和工具。

連線開啟時無法更新設定。不過,透過工作階段續傳機制暫停及續傳時,您可以變更設定參數 (模型除外)。

請參閱以下設定範例。請注意,SDK 中的名稱大小寫可能有所不同。您可以在這裡查詢 Python SDK 設定選項。


{
  "model": string,
  "generationConfig": {
    "candidateCount": integer,
    "maxOutputTokens": integer,
    "temperature": number,
    "topP": number,
    "topK": integer,
    "presencePenalty": number,
    "frequencyPenalty": number,
    "responseModalities": [string],
    "speechConfig": object,
    "mediaResolution": object
  },
  "systemInstruction": string,
  "tools": [object]
}

如要進一步瞭解 API 欄位,請參閱 generationConfig

傳送訊息

如要透過 WebSocket 連線交換訊息,用戶端必須透過開啟的 WebSocket 連線傳送 JSON 物件。JSON 物件必須包含下列物件集中的一個欄位:


{
  "setup": BidiGenerateContentSetup,
  "clientContent": BidiGenerateContentClientContent,
  "realtimeInput": BidiGenerateContentRealtimeInput,
  "toolResponse": BidiGenerateContentToolResponse
}

支援的用戶端訊息

下表列出支援的用戶端訊息:

訊息 說明
BidiGenerateContentSetup 要在第一則訊息中傳送的工作階段設定
BidiGenerateContentClientContent 用戶端傳送的目前對話內容增量更新
BidiGenerateContentRealtimeInput 即時音訊、影片或文字輸入
BidiGenerateContentToolResponse 回應伺服器傳回的 ToolCallMessage

接收訊息

如要接收 Gemini 傳送的訊息,請監聽 WebSocket 的「message」事件,然後根據支援的伺服器訊息定義剖析結果。

請參閱以下資訊:

async with client.aio.live.connect(model='...', config=config) as session:
    await session.send(input='Hello world!', end_of_turn=True)
    async for message in session.receive():
        print(message)

伺服器訊息可能會有 usageMetadata 欄位,但會包含其他欄位中的其中一個,且BidiGenerateContentServerMessage訊息中只會有一個欄位。(JSON 中不會表示 messageType 聯集,因此欄位會顯示在訊息的頂層)。

訊息和活動

ActivityEnd

這個類型沒有任何欄位。

標記使用者活動的結束時間。

ActivityHandling

處理使用者活動的不同方式。

列舉
ACTIVITY_HANDLING_UNSPECIFIED 如未指定,預設行為為 START_OF_ACTIVITY_INTERRUPTS
START_OF_ACTIVITY_INTERRUPTS 如果為 true,活動開始時會中斷模型的回覆 (也稱為「插話」)。模型目前的回覆會在您中斷時停止。此為預設行為。
NO_INTERRUPTION 模型不會中斷回覆。

ActivityStart

這個類型沒有任何欄位。

標記使用者活動的開始時間。

AudioTranscriptionConfig

這個類型沒有任何欄位。

音訊轉錄設定。

AutomaticActivityDetection

設定自動偵測活動。

欄位
disabled

bool

(選用步驟) 啟用此設定 (預設為啟用) 後,系統會將偵測到的語音和文字輸入視為活動。如果停用,用戶端必須傳送活動信號。

startOfSpeechSensitivity

StartSensitivity

(選用步驟) 決定偵測到語音的可能性。

prefixPaddingMs

int32

(選用步驟) 系統偵測到語音後,必須經過這段時間才會開始轉錄。這個值越低,語音開始偵測的靈敏度就越高,可辨識的語音長度就越短。但這也會增加誤判的可能性。

endOfSpeechSensitivity

EndSensitivity

(選用步驟) 決定偵測到的語音結束的可能性。

silenceDurationMs

int32

(選用步驟) 系統偵測到非語音 (例如靜音) 的必要時間長度,之後才會提交語音結尾。這個值越大,語音間隔時間就越長,不會中斷使用者的活動,但會增加模型的延遲時間。

BidiGenerateContentClientContent

用戶端傳送的目前對話增量更新。系統會將這裡的所有內容無條件附加至對話記錄,並做為提示的一部分,供模型生成內容。

如果在這裡輸入訊息,系統就會中斷目前正在生成的模型。

欄位
turns[]

Content

(選用步驟) 附加至目前與模型對話的內容。

如果是單輪查詢,則為單一執行個體。如果是多輪查詢,這個重複欄位會包含對話記錄和最新要求。

turnComplete

bool

(選用步驟) 如果為 true,表示伺服器內容生成作業應從目前累積的提示開始。否則,伺服器會等待其他訊息,再開始生成內容。

BidiGenerateContentRealtimeInput

即時傳送的使用者輸入內容。

系統會將不同模態 (音訊、影片和文字) 視為並行串流處理。我們無法保證這些串流的順序。

這與 BidiGenerateContentClientContent 有幾項不同之處:

  • 可持續傳送,不會中斷模型生成作業。
  • 如果需要混合交錯在 BidiGenerateContentClientContentBidiGenerateContentRealtimeInput 中的資料,伺服器會盡量提供最佳回應,但無法保證。
  • 系統不會明確指定回合結束時間,而是根據使用者活動 (例如語音結束) 推斷。
  • 即使在輪流對話結束前,系統也會逐步處理資料,盡快開始生成模型回覆。
欄位
mediaChunks[]

Blob

(選用步驟) 媒體輸入的內嵌位元組資料。系統不支援多個 mediaChunks,除了第一個以外,其他都會遭到忽略。

已淘汰:請改用 audiovideotext

audio

Blob

(選用步驟) 這些會形成即時音訊輸入串流。

video

Blob

(選用步驟) 這些會構成即時影片輸入串流。

activityStart

ActivityStart

(選用步驟) 標記使用者活動的開始時間。只有在停用自動 (即伺服器端) 活動偵測功能時,才能傳送這項資料。

activityEnd

ActivityEnd

(選用步驟) 標記使用者活動的結束時間。只有在停用自動 (即伺服器端) 活動偵測功能時,才能傳送這項資料。

audioStreamEnd

bool

(選用步驟) 表示音訊串流已結束,例如麥克風已關閉。

只有在啟用自動活動偵測功能 (預設為啟用) 時,才應傳送這項資料。

用戶端可以傳送語音訊息,重新開啟串流。

text

string

(選用步驟) 這些內容會構成即時文字輸入串流。

BidiGenerateContentServerContent

模型根據用戶端訊息產生的伺服器增量更新。

系統會盡快生成內容,但不會即時生成。用戶端可以選擇緩衝處理並即時播放。

欄位
generationComplete

bool

僅供輸出。如為 true,表示模型已完成生成。

如果模型在生成內容時中斷,中斷的回合中不會有「generation_complete」訊息,而是會經歷「interrupted > turn_complete」。

如果模型假設即時播放,模型會等待播放完畢,因此 generation_complete 和 turn_complete 之間會有延遲。

turnComplete

bool

僅供輸出。如為 true,代表模型已完成輪流對話。只有在收到其他用戶端訊息時,系統才會開始生成回覆。

interrupted

bool

僅供輸出。如果為 true,表示用戶端訊息已中斷目前模型生成作業。如果用戶端正在即時播放內容,這就是停止並清空目前播放佇列的好時機。

groundingMetadata

GroundingMetadata

僅供輸出。生成內容的基礎中繼資料。

inputTranscription

BidiGenerateContentTranscription

僅供輸出。輸入音訊轉錄稿。轉錄稿會獨立傳送,不會與其他伺服器訊息一起傳送,且無法保證傳送順序。

outputTranscription

BidiGenerateContentTranscription

僅供輸出。輸出音訊轉錄稿。轉錄稿會獨立傳送,與其他伺服器訊息無關,且無法保證順序,特別是 serverContent 和這個 outputTranscription 之間。

urlContextMetadata

UrlContextMetadata

modelTurn

Content

僅供輸出。模型在與使用者進行目前對話時生成的內容。

BidiGenerateContentServerMessage

BidiGenerateContent 呼叫的回應訊息。

欄位
usageMetadata

UsageMetadata

僅供輸出。回應的使用情況中繼資料。

聯集欄位 messageType。訊息類型。messageType 只能是下列其中一項:
setupComplete

BidiGenerateContentSetupComplete

僅供輸出。設定完成後,系統會傳送這則訊息,回覆用戶端的 BidiGenerateContentSetup 訊息。

serverContent

BidiGenerateContentServerContent

僅供輸出。模型根據客戶訊息生成的內容。

toolCall

BidiGenerateContentToolCall

僅供輸出。要求用戶端執行 functionCalls,並傳回相符 id 的回應。

toolCallCancellation

BidiGenerateContentToolCallCancellation

僅供輸出。通知用戶端應取消先前發出的 ToolCallMessage,其中包含指定的 id

goAway

GoAway

僅供輸出。伺服器即將中斷連線的通知。

sessionResumptionUpdate

SessionResumptionUpdate

僅供輸出。更新工作階段續傳狀態。

BidiGenerateContentSetup

要在第一個 (也是唯一一個) BidiGenerateContentClientMessage 中傳送的訊息。包含串流 RPC 持續期間適用的設定。

用戶端應等待 BidiGenerateContentSetupComplete 訊息,再傳送任何其他訊息。

欄位
model

string

必填。模型的資源名稱。這是模型使用的 ID。

格式:models/{model}

generationConfig

GenerationConfig

(選用步驟) 生成設定。

系統不支援下列欄位:

  • responseLogprobs
  • responseMimeType
  • logprobs
  • responseSchema
  • stopSequence
  • routingConfig
  • audioTimestamp
systemInstruction

Content

(選用步驟) 使用者為模型提供系統指令。

注意:各部分只能使用文字,且各部分的內容會分別顯示在不同段落。

tools[]

Tool

(選用步驟) Tools 模型可能用來生成下一個回應的清單。

Tool是一段程式碼,可讓系統與外部系統互動,執行模型知識和範圍以外的動作或一連串動作。

realtimeInputConfig

RealtimeInputConfig

(選用步驟) 設定即時輸入的處理方式。

sessionResumption

SessionResumptionConfig

(選用步驟) 設定工作階段續傳機制。

如果包含這類郵件,伺服器就會傳送 SessionResumptionUpdate 郵件。

contextWindowCompression

ContextWindowCompressionConfig

(選用步驟) 設定內容視窗壓縮機制。

如果包含這項參數,伺服器會在脈絡超過設定長度時,自動縮減脈絡大小。

inputAudioTranscription

AudioTranscriptionConfig

(選用步驟) 如果設定此屬性,系統會啟用語音輸入轉錄功能。如果已設定,轉錄內容會與輸入音訊的語言一致。

outputAudioTranscription

AudioTranscriptionConfig

(選用步驟) 如果設定,系統會轉錄模型的音訊輸出內容。如果已設定,轉錄稿會與輸出音訊指定的語言代碼一致。

proactivity

ProactivityConfig

(選用步驟) 設定模型的積極程度。

這樣一來,模型就能主動回應輸入內容,並忽略無關的輸入內容。

BidiGenerateContentSetupComplete

這個類型沒有任何欄位。

用來回應用戶端的 BidiGenerateContentSetup 訊息。

BidiGenerateContentToolCall

要求用戶端執行 functionCalls,並傳回相符 id 的回應。

欄位
functionCalls[]

FunctionCall

僅供輸出。要執行的函式呼叫。

BidiGenerateContentToolCallCancellation

通知用戶端先前發出的 ToolCallMessage (具有指定的 id) 不應執行,且應取消。如果這些工具呼叫產生副作用,用戶端可能會嘗試還原工具呼叫。只有在用戶端中斷伺服器回合時,才會出現這則訊息。

欄位
ids[]

string

僅供輸出。要取消的工具呼叫 ID。

BidiGenerateContentToolResponse

用戶端產生的回應,用來回覆伺服器傳送的 ToolCall。個別 FunctionResponse 物件會透過 id 欄位與對應的 FunctionCall 物件相符。

請注意,在 unary 和 server-streaming GenerateContent API 中,函式呼叫是透過交換 Content 部分進行,而在 bidi GenerateContent API 中,函式呼叫是透過這些專用訊息集進行。

欄位
functionResponses[]

FunctionResponse

(選用步驟) 函式呼叫的回應。

BidiGenerateContentTranscription

音訊 (輸入或輸出) 的轉錄稿。

欄位
text

string

轉錄稿文字。

ContextWindowCompressionConfig

啟用脈絡窗口壓縮功能,管理模型脈絡窗口,確保不會超過指定長度。

欄位
聯集欄位 compressionMechanism。使用的脈絡窗口壓縮機制。compressionMechanism 只能是下列其中一項:
slidingWindow

SlidingWindow

滑動視窗機制。

triggerTokens

int64

觸發脈絡窗口壓縮所需的權杖數量 (執行回合前)。

這可用於平衡品質與延遲,因為較短的脈絡窗口可能會加快模型回覆速度。不過,任何壓縮作業都會導致暫時延遲增加,因此不應頻繁觸發。

如未設定,預設值為模型內容視窗限制的 80%。這表示下一個使用者要求/模型回應會佔用 20% 的配額。

EndSensitivity

決定如何偵測語音結束。

列舉
END_SENSITIVITY_UNSPECIFIED 預設值為 END_SENSITIVITY_HIGH。
END_SENSITIVITY_HIGH 自動偵測功能會更頻繁地結束語音。
END_SENSITIVITY_LOW 自動偵測功能較少會中斷語音。

GoAway

伺服器即將中斷連線的通知。

欄位
timeLeft

Duration

連線終止為 ABORTED 前的剩餘時間。

這段時間絕不會低於模型專屬的最低時間,且會與模型的速率限制一併指定。

ProactivityConfig

主動式功能設定。

欄位
proactiveAudio

bool

(選用步驟) 啟用後,模型可以拒絕回應最後一個提示。舉例來說,這可讓模型忽略語音內容,或在使用者尚未提出要求時保持靜默。

RealtimeInputConfig

設定 BidiGenerateContent 中的即時輸入行為。

欄位
automaticActivityDetection

AutomaticActivityDetection

(選用步驟) 如果未設定,系統預設會啟用自動活動偵測功能。如果停用自動語音偵測功能,用戶端必須傳送活動信號。

activityHandling

ActivityHandling

(選用步驟) 定義活動的影響。

turnCoverage

TurnCoverage

(選用步驟) 定義使用者回合中包含哪些輸入內容。

SessionResumptionConfig

工作階段恢復設定。

這則訊息已納入工作階段設定,顯示為 BidiGenerateContentSetup.sessionResumption。如果已設定,伺服器會傳送 SessionResumptionUpdate 訊息。

欄位
handle

string

先前工作階段的控制代碼。如果沒有,系統就會建立新工作階段。

工作階段控制代碼來自先前連線中的 SessionResumptionUpdate.token 值。

SessionResumptionUpdate

更新工作階段續傳狀態。

只有在設定 BidiGenerateContentSetup.sessionResumption 時才會傳送。

欄位
newHandle

string

代表可恢復狀態的新控制代碼。如果 resumable=false,則為空白。

resumable

bool

如果目前工作階段可在此時繼續,則為 True。

在某些時間點無法繼續進行課程。例如模型執行函式呼叫或生成內容時。在這種狀態下繼續工作階段 (使用先前的工作階段權杖),會導致部分資料遺失。在這些情況下,newHandle 會是空白,而 resumable 則為 false。

SlidingWindow

SlidingWindow 方法的運作方式是捨棄情境視窗開頭的內容。產生的內容一律會從 USER 角色回合的開頭開始。系統指令和任何 BidiGenerateContentSetup.prefixTurns 一律會顯示在結果開頭。

欄位
targetTokens

int64

要保留的目標權杖數量。預設值為 trigger_tokens/2。

捨棄部分內容視窗會導致暫時延遲時間增加,因此應校準這個值,避免頻繁執行壓縮作業。

StartSensitivity

決定如何偵測語音的開始。

列舉
START_SENSITIVITY_UNSPECIFIED 預設值為 START_SENSITIVITY_HIGH。
START_SENSITIVITY_HIGH 自動偵測功能會更頻繁地偵測語音開始時間。
START_SENSITIVITY_LOW 自動偵測功能會減少偵測到語音的次數。

TurnCoverage

選項:使用者回合中包含哪些輸入內容。

列舉
TURN_COVERAGE_UNSPECIFIED 如未指定,系統會根據模型選取預設行為。
TURN_INCLUDES_ONLY_ACTIVITY 包括自上次輪流發言以來的活動,但不包括閒置狀態 (例如音訊串流靜音)。
TURN_INCLUDES_ALL_INPUT 包括自上次輪流發言以來的所有即時輸入內容,包括無活動 (例如音訊串流中的靜音)。
TURN_INCLUDES_AUDIO_ACTIVITY_AND_ALL_VIDEO 包括音訊活動和上次輪到你時的所有影片。系統會自動偵測活動,音訊活動是指語音,不包括無聲狀態。

UrlContextMetadata

與網址內容擷取工具相關的中繼資料。

欄位
urlMetadata[]

UrlMetadata

網址環境清單。

UsageMetadata

有關回覆的使用情況中繼資料。

欄位
promptTokenCount

int32

僅供輸出。提示中的權杖數量。設定 cachedContent 時,這仍是有效提示的總大小,也就是說,這包括快取內容中的權杖數量。

cachedContentTokenCount

int32

提示快取部分 (快取內容) 中的權杖數量

responseTokenCount

int32

僅供輸出。所有生成的候選回覆的詞元總數。

toolUsePromptTokenCount

int32

僅供輸出。工具使用提示中的權杖數量。

thoughtsTokenCount

int32

僅供輸出。思考模型思考時的權杖數量。

totalTokenCount

int32

僅供輸出。生成要求 (提示 + 回覆候選項目) 的權杖總數。

promptTokensDetails[]

ModalityTokenCount

僅供輸出。要求輸入內容中處理的模態清單。

cacheTokensDetails[]

ModalityTokenCount

僅供輸出。要求輸入中快取內容的模式清單。

responseTokensDetails[]

ModalityTokenCount

僅供輸出。回應中傳回的模態清單。

toolUsePromptTokensDetails[]

ModalityTokenCount

僅供輸出。處理工具使用要求輸入內容的模態清單。

暫時性驗證權杖

您可以呼叫 AuthTokenService.CreateToken 取得暫時性驗證權杖,然後搭配 GenerativeService.BidiGenerateContentConstrained 使用,方法是將權杖傳遞至 access_token 查詢參數,或傳遞至 HTTP Authorization 標頭,並在權杖前加上「Token」。

CreateAuthTokenRequest

建立臨時驗證權杖。

欄位
authToken

AuthToken

必填。要建立的權杖。

AuthToken

要求建立臨時驗證權杖。

欄位
name

string

僅供輸出。ID。權杖本身。

expireTime

Timestamp

(選用步驟) 僅限輸入。不可變動。這個時間是選填項目,如果使用產生的符記,系統會拒絕 BidiGenerateContent 工作階段中的訊息。(Gemini 可能會在時間到期後預先關閉工作階段)。

如未設定,預設值為 30 分鐘。設定的值必須在 20 小時內。

newSessionExpireTime

Timestamp

(選用步驟) 僅限輸入。不可變動。使用此要求產生的權杖建立新的 Live API 工作階段時,如果時間超過這個值,系統就會拒絕要求。

如未設定,系統日後會預設為 60 秒。設定的值必須在 20 小時內。

fieldMask

FieldMask

(選用步驟) 僅限輸入。不可變動。如果 field_mask 為空,且沒有 bidiGenerateContentSetup,則有效 BidiGenerateContentSetup 訊息會取自 Live API 連線。

如果 field_mask 為空,且存在 bidiGenerateContentSetup is,則有效 BidiGenerateContentSetup 訊息會完全取自這項要求中的 bidiGenerateContentSetup。系統會忽略 Live API 連線的設定訊息。

如果 field_mask 不為空白,則 bidiGenerateContentSetup 中的對應欄位會覆寫 Live API 連線中設定訊息的欄位。

聯集欄位 config。產生權杖的方法專屬設定。config 只能是下列其中一項:
bidiGenerateContentSetup

BidiGenerateContentSetup

(選用步驟) 僅限輸入。不可變動。BidiGenerateContent 的專屬設定。

uses

int32

(選用步驟) 僅限輸入。不可變動。代幣可使用的次數。如果這個值為零,系統就不會套用任何限制。繼續使用 Live API 工作階段不會計入用量。如未指定,則預設值為 1。

常見類型說明

如要進一步瞭解常用的 API 資源類型 BlobContentFunctionCallFunctionResponseGenerationConfigGroundingMetadataModalityTokenCountTool,請參閱「生成內容」。