Live API 參考資料

Live API 可讓您與 Gemini 展開低延遲的雙向語音/視訊互動。使用 Live API,您可以為使用者提供自然、類似人類語音的對話體驗,並讓使用者透過語音指令中斷模型的回覆。Live API 可處理文字、音訊和影片輸入內容,並提供文字和音訊輸出內容。

如要進一步瞭解 Live API,請參閱這篇文章

功能

Live API 包含下列主要功能:

  • 多模態:模型可以看、聽和說話。
  • 低延遲即時互動:模型可快速回應。
  • 工作階段記憶:模型會保留單一工作階段中的所有互動記錄,並回想先前聽過或看過的資訊。
  • 支援函式呼叫、程式碼執行和 Google 搜尋做為工具: 您可以將模型與外部服務和資料來源整合。

Live API 專為伺服器對伺服器通訊而設計。

如果是網站和行動應用程式,建議使用 Daily 合作夥伴的整合服務。

支援的模型

開始使用

如要試用 Live API,請前往 Vertex AI Studio,然後點選「開始工作階段」

Live API 是使用 WebSockets 的有狀態 API。

本節提供範例,說明如何使用 Python 3.9 以上版本,透過 Live API 生成文字。

Python

安裝

pip install --upgrade google-genai

詳情請參閱 SDK 參考說明文件

設定環境變數,透過 Vertex AI 使用 Gen AI SDK:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_VERTEXAI=True

from google import genai
from google.genai.types import (
    Content,
    LiveConnectConfig,
    HttpOptions,
    Modality,
    Part,
)

client = genai.Client(http_options=HttpOptions(api_version="v1beta1"))
model_id = "gemini-2.0-flash-live-preview-04-09"

async with client.aio.live.connect(
    model=model_id,
    config=LiveConnectConfig(response_modalities=[Modality.TEXT]),
) as session:
    text_input = "Hello? Gemini, are you there?"
    print("> ", text_input, "\n")
    await session.send_client_content(turns=Content(role="user", parts=[Part(text=text_input)]))

    response = []

    async for message in session.receive():
        if message.text:
            response.append(message.text)

    print("".join(response))
# Example output:
# >  Hello? Gemini, are you there?
# Yes, I'm here. What would you like to talk about?

整合指南

本節說明如何整合 Live API。

工作階段

WebSocket 連線會在用戶端和 Gemini 伺服器之間建立工作階段。

用戶端啟動新連線後,工作階段就能與伺服器交換訊息,以執行下列操作:

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

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

請參閱下列設定範例:


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

  "systemInstruction": string,
  "tools": [object]
}

詳情請參閱 BidiGenerateContentSetup

傳送訊息

訊息是透過 WebSocket 連線交換的 JSON 格式物件。

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


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

支援的用戶端訊息

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

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

接收郵件

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

請參閱以下資訊:

ws.addEventListener("message", async (evt) => {
  if (evt.data instanceof Blob) {
    // Process the received data (audio, video, etc.)
  } else {
    // Process JSON response
  }
});

伺服器訊息會包含下列物件集中的一個欄位:


{
  "setupComplete": BidiGenerateContentSetupComplete,
  "serverContent": BidiGenerateContentServerContent,
  "toolCall": BidiGenerateContentToolCall,
  "toolCallCancellation": BidiGenerateContentToolCallCancellation
  "usageMetadata": UsageMetadata
  "goAway": GoAway
  "sessionResumptionUpdate": SessionResumptionUpdate
  "inputTranscription": BidiGenerateContentTranscription
  "outputTranscription": BidiGenerateContentTranscription
}

支援的伺服器訊息

下表列出支援的伺服器訊息:

訊息 說明
BidiGenerateContentSetupComplete 用戶端傳送的 BidiGenerateContentSetup 訊息 (設定完成時傳送)
BidiGenerateContentServerContent 模型根據用戶端訊息生成的回覆內容
BidiGenerateContentToolCall 要求用戶端執行函式呼叫,並傳回相符 ID 的回應
BidiGenerateContentToolCallCancellation 在使用者中斷模型輸出內容時傳送,表示函式呼叫已取消
UsageMetadata 報告工作階段目前使用的權杖數量
GoAway 表示目前的連線即將終止
SessionResumptionUpdate 可繼續執行的工作階段檢查點
BidiGenerateContentTranscription 使用者或模型語音的轉錄稿

分批更新內容

使用增量更新傳送文字輸入內容、建立工作階段情境或還原工作階段情境。如為簡短情境,您可以傳送逐輪互動,代表確切的事件順序。如果脈絡較長,建議提供單一訊息摘要,以便在後續互動中釋放脈絡窗口。

請參閱以下範例情境訊息:

{
  "clientContent": {
    "turns": [
      {
          "parts":[
          {
            "text": ""
          }
        ],
        "role":"user"
      },
      {
          "parts":[
          {
            "text": ""
          }
        ],
        "role":"model"
      }
    ],
    "turnComplete": true
  }
}

請注意,雖然內容部分可以是 functionResponse 型別,但 BidiGenerateContentClientContent 不應用於提供模型發出的函式呼叫回覆。請改用 BidiGenerateContentToolResponseBidiGenerateContentClientContent 只能用於建立先前的脈絡,或在對話中提供文字輸入內容。

串流音訊和影片

程式碼執行

如要進一步瞭解程式碼執行作業,請參閱「程式碼執行」。

函式呼叫

所有函式都必須在工作階段開始時宣告,方法是在 BidiGenerateContentSetup 訊息中傳送工具定義。

您可以使用 JSON 定義函式,具體來說,就是使用OpenAPI 結構定義格式選取子集。單一函式宣告可包含下列參數:

  • name (字串):API 呼叫中函式的專屬 ID。

  • description (字串):詳細說明函式的用途和功能。

  • 參數 (物件):定義函式所需的輸入資料。

    • type (字串):指定整體資料類型,例如物件。

    • properties (物件):列出個別參數,每個參數都包含:

      • type (字串):參數的資料類型,例如字串、整數、布林值。
      • 說明 (字串):清楚說明參數的用途和預期格式。
    • 必要 (陣列):字串陣列,列出函式運作時必須提供的參數名稱。

如需使用 curl 指令宣告函式的程式碼範例,請參閱「使用 Gemini API 呼叫函式」。如要瞭解如何使用 Gemini API SDK 建立函式宣告,請參閱函式呼叫教學課程

模型可以根據單一提示產生多個函式呼叫,以及串連輸出內容所需的程式碼。這段程式碼會在沙箱環境中執行,產生後續的 BidiGenerateContentToolCall 訊息。執行作業會暫停,直到每個函式呼叫的結果都可用為止,確保處理作業依序進行。

用戶端應回覆 BidiGenerateContentToolResponse

詳情請參閱「函式呼叫簡介」。

音訊格式

請參閱支援的音訊格式清單。

系統指示

您可以提供系統指令,進一步控管模型的輸出內容,並指定語音回覆的語調和情緒。

系統指令會在互動開始前加入提示,並在整個工作階段中生效。

系統指令只能在工作階段開始時設定,也就是初始連線後立即設定。如要在工作階段期間為模型提供進一步的輸入內容,請使用增量內容更新。

中斷

使用者隨時可以中斷模型輸出內容。當語音活動偵測 (VAD) 偵測到中斷時,系統會取消並捨棄正在進行的生成作業。工作階段記錄只會保留已傳送給用戶端的資訊。伺服器接著會傳送 BidiGenerateContentServerContent 訊息,回報中斷情形。

此外,Gemini 伺服器會捨棄所有待處理的函式呼叫,並傳送 BidiGenerateContentServerContent 訊息,其中包含已取消呼叫的 ID。

語音

如要指定語音,請在 speechConfig 物件中設定 voiceName,做為工作階段設定的一部分。

請參閱下列 speechConfig 物件的 JSON 表示法:

{
  "voiceConfig": {
    "prebuiltVoiceConfig": {
      "voiceName": "VOICE_NAME"
    }
  }
}

如要查看支援的語音清單,請參閱「變更語音和語言設定」。

限制

規劃專案時,請考量 Live API 和 Gemini 2.0 的下列限制。

用戶端驗證

Live API 僅提供伺服器對伺服器驗證,不建議直接供用戶端使用。用戶端輸入內容應透過中繼應用程式伺服器傳送,以便透過 Live API 進行安全驗證。

工作階段時間上限

對話工作階段的預設時間上限為 10 分鐘。詳情請參閱「工作階段長度」。

語音活動偵測 (VAD)

根據預設,模型會對連續音訊輸入串流自動執行語音活動偵測 (VAD)。VAD 可透過設定訊息RealtimeInputConfig.AutomaticActivityDetection欄位進行設定。

如果音訊串流暫停超過一秒 (例如使用者關閉麥克風時),系統會傳送 AudioStreamEnd 事件,清除所有快取音訊。用戶端隨時可以繼續傳送音訊資料。

或者,您也可以在設定訊息中將 RealtimeInputConfig.AutomaticActivityDetection.disabled 設為 true,關閉自動 VAD。在此設定中,用戶端負責偵測使用者語音,並在適當時間傳送 ActivityStartActivityEnd 訊息。這個設定未傳送 AudioStreamEnd。而是以 ActivityEnd 訊息標示串流中斷。

其他限制

系統不支援手動設定端點。

音訊輸入和輸出會對模型使用函式呼叫功能的能力造成負面影響。

權杖數量

不支援權杖計數。

頻率限制

適用下列頻率限制:

  • 每個 API 金鑰 5,000 個並行工作階段
  • 每分鐘 400 萬個符記

訊息和活動

BidiGenerateContentClientContent

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

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

欄位
turns[]

Content

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

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

turn_complete

bool

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

BidiGenerateContentRealtimeInput

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

這與 ClientContentUpdate 有幾點不同:

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

Blob

(選用步驟) 媒體輸入的內嵌位元組資料。

activity_start

ActivityStart

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

activity_end

ActivityEnd

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

ActivityEnd

這個類型沒有任何欄位。

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

ActivityStart

這個類型沒有任何欄位。

一次只能設定這則訊息中的一個欄位。標記使用者活動的開始時間。

BidiGenerateContentServerContent

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

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

欄位
turn_complete

bool

僅供輸出。如為 true,表示模型已完成生成。系統只會在收到其他用戶端訊息時開始生成內容。可與 content 一併設定,表示 content 是回合中的最後一個動作。

interrupted

bool

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

generation_complete

bool

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

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

如果模型假設為即時播放,則生成完成和回合完成之間會出現延遲,這是因為模型會等待播放完成。

grounding_metadata

GroundingMetadata

僅供輸出。中繼資料會指定用來生成內容的來源。

input_transcription

Transcription

(選用步驟) 輸入轉錄內容。轉錄內容與模型回合無關,因此轉錄內容和模型回合之間沒有任何順序關係。

output_transcription

Transcription

(選用步驟) 輸出轉錄稿。轉錄內容與模型回合無關,因此轉錄內容和模型回合之間沒有任何順序關係。

model_turn

Content

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

語音轉錄

音訊轉錄訊息。

欄位
text

string

(選用步驟) 轉錄稿文字。

finished

bool

(選用步驟) 這個布林值表示轉錄作業已完成。

BidiGenerateContentSetup

要在第一個也是唯一一個用戶端訊息中傳送的訊息。包含串流工作階段期間套用的設定。

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

欄位
model

string

這是必要旗標,發布者模型的完整名稱。

發布商模型格式:projects/{project}/locations/{location}/publishers/\*/models/\*

generation_config

GenerationConfig

(選用步驟) 生成設定。

系統不支援下列欄位:

  • response_logprobs
  • response_mime_type
  • logprobs
  • response_schema
  • stop_sequence
  • routing_config
  • audio_timestamp
system_instruction

Content

(選用步驟) 使用者為模型提供的系統指令。注意:各部分只能使用文字,且各部分的內容會分別顯示在不同段落。

tools[]

Tool

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

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

session_resumption

SessionResumptionConfig

(選用步驟) 設定工作階段恢復機制。如有提供,伺服器會定期傳送 SessionResumptionUpdate 訊息給用戶端。

context_window_compression

ContextWindowCompressionConfig

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

如果包含,伺服器會壓縮內容視窗,以符合指定長度。

realtime_input_config

RealtimeInputConfig

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

input_audio_transcription

AudioTranscriptionConfig

(選用步驟) 輸入內容的轉錄稿與輸入音訊的語言一致。

output_audio_transcription

AudioTranscriptionConfig

(選用步驟) 輸出內容的轉錄稿會與輸出音訊指定的語言代碼一致。

AudioTranscriptionConfig

這個類型沒有任何欄位。

音訊轉錄設定。

BidiGenerateContentSetupComplete

這個類型沒有任何欄位。

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

BidiGenerateContentToolCall

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

欄位
function_calls[]

FunctionCall

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

BidiGenerateContentToolCallCancellation

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

欄位
ids[]

string

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

BidiGenerateContentToolResponse

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

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

欄位
function_responses[]

FunctionResponse

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

RealtimeInputConfig

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

欄位
automatic_activity_detection

AutomaticActivityDetection

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

activity_handling

ActivityHandling

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

turn_coverage

TurnCoverage

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

ActivityHandling

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

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

AutomaticActivityDetection

設定自動偵測活動。

欄位
start_of_speech_sensitivity

StartSensitivity

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

end_of_speech_sensitivity

EndSensitivity

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

prefix_padding_ms

int32

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

silence_duration_ms

int32

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

disabled

bool

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

EndSensitivity

語音感測結束處。

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

StartSensitivity

語音感測起始處。

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

TurnCoverage

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

列舉
TURN_COVERAGE_UNSPECIFIED 如未指定,預設行為為 TURN_INCLUDES_ALL_INPUT
TURN_INCLUDES_ONLY_ACTIVITY 使用者回合只包含上一個回合後的活動,不包括閒置狀態 (例如音訊串流中的無聲狀態)。
TURN_INCLUDES_ALL_INPUT 使用者回合包含自上一個回合以來的所有即時輸入內容,包括閒置狀態 (例如音訊串流中的靜音)。這是預設行為。

UsageMetadata

快取內容的使用中繼資料。

欄位
total_token_count

int32

快取內容消耗的權杖總數。

text_count

int32

文字字元數。

image_count

int32

圖片數量。

video_duration_seconds

int32

影片長度 (以秒為單位)。

audio_duration_seconds

int32

音訊長度 (以秒為單位)。

GoAway

伺服器即將無法為用戶端提供服務。

欄位
time_left

Duration

連線終止 (ABORTED) 前的剩餘時間。這裡傳回的最低時間會與特定模型的速率限制一起指定。

SessionResumptionUpdate

更新工作階段續傳狀態。

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

欄位
new_handle

string

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

resumable

bool

如果可以在這個時間點繼續工作階段,則為 True。

在某些時間點,可能無法繼續執行工作階段。在這種情況下,我們會傳送更新,其中 new_handle 為空,且 resumable=false。舉例來說,模型可能會執行函式呼叫或只是生成內容。在這種狀態下繼續工作階段 (使用先前的工作階段權杖),會導致部分資料遺失。

last_consumed_client_message_index

int64

用戶端傳送的最後一則訊息的索引,包含在這個 SessionResumptionToken 代表的狀態中。只有在設定 SessionResumptionConfig.transparent 時才會傳送。

有了這個索引,使用者就能以透明方式重新連線,避免遺失部分即時音訊輸入/影片。如果用戶端想暫時中斷連線 (例如收到 GoAway),可以緩衝自上次 SessionResmumptionTokenUpdate 傳送的訊息,不必失去狀態。這個欄位可讓他們限制緩衝處理 (避免將所有要求保留在 RAM 中)。

不會用於稍後「恢復以還原狀態」-- 在這些情況下,可能不需要部分音訊和視訊影格。

後續步驟