Gemini 3.8 Live 是即時對話模型,專為低延遲雙向語音和影片互動,以及面對面即時虛擬化身合成而設計。3.8 Live 專為連續交談工作流程設計,預設啟用情感對話、主動判斷式語音過濾、自動取消封鎖工具,以及動態多語言切換功能。
本文涵蓋下列主題:
- 3.8 Live 在 Gemini 模型系列中的定位。
- 3.8 Live 的主要功能。
- 與 Google Gen AI SDK 整合。
- 必要的 API 規則和慣例。
- 從舊版 Gemini Live API 模型遷移。
Gemini 系列產品中的角色
3.8 Live 專為即時串流互動而設計。這項技術透過雙向 WebSocket 運作,可處理語音、即時攝影機畫面和螢幕廣播,延遲時間不到一秒,同時生成 24 kHz 音訊和同步的 24 FPS 視訊虛擬人偶。
模型規格和比較
下表比較 3.8 Live 和早期 Gemini Live API 模型的規格:
| 屬性 | Gemini 3.8 Live | Gemini 2.5 Flash Live API 原生音訊 (正式發布基準) |
|---|---|---|
| 模型 ID | gemini-3.8-live |
gemini-live-2.5-flash-native-audio |
| 推出階段 | 正式發布 (GA) | 正式發布 (GA) |
| 輸入模態 | 音訊 (16 kHz PCM)、影片 (1 FPS JPEG)、文字 | 音訊 (16 kHz PCM)、影片 (1 FPS JPEG)、文字 |
| 輸出模態 | 音訊 (24 kHz PCM)、影片 (24 FPS MP4 即時虛擬化身)、文字 | 音訊 (24 kHz PCM)、文字 |
| 即時虛擬化身合成 | 24 FPS 同步影片輸出 | 不支援 |
| 情緒感知對話 | 預設為啟用 | 需要明確設定 |
| 主動判斷式語音 | 預設為啟用 | 需要明確設定 |
| 執行函式呼叫 | 非同步非阻斷和自動取消封鎖 (behavior="BLOCKING") |
非同步和同步 |
| 插話處理 | 禮貌性中斷降級 (使用者說話時等待) | 立即中斷 (可與使用者音訊重疊) |
| 語言支援 | 在支援的語言之間動態切換 | 支援的語言 |
| 網域偏誤 | 支援AudioTranscriptionConfig的custom_vocabulary |
標準基準轉錄 |
| 視覺化權杖控制項 | 可設定的 media_resolution (LOW、MEDIUM、HIGH) |
每個影格的固定權杖額度 |
Gemini 3.8 Live 的使用時機
在下列情況下使用 3.8 Live:
- 您需要低對話延遲、自然輪流對話,以及在使用者打斷對話時快速恢復。
- 應用程式會呼叫外部工具,且需要非阻塞執行,以便在後端系統處理要求時,繼續輸出音訊。
- 您想以 24 FPS 的速度,呈現會說話的數位虛擬化身,並同步臉部動畫和對嘴,不使用外部算繪管道。
- 使用者會以多種語言交談,因此需要偵測語言並在支援的語言之間切換。
- 您需要針對技術術語、SKU 或品牌名稱,使用特定領域的詞彙偏誤。
如需完整規格和配額限制,請參閱 3.8 Live 模型頁面。
Gemini 3.8 Live 的主要功能
3.8 版 Live 推出下列功能:
24 FPS 即時虛擬化身影片合成:3.8 Live 直接根據模型輸出內容,生成同步的 24 FPS MP4 影片串流 (
response_modalities=["VIDEO"])。生成的臉部表情和嘴唇動作會與合成語音即時同步。您可以使用預先建立的現成虛擬化身,或提供自訂參考圖像,打造數位服務專員、客服專員、虛擬家教或互動角色。如需設定詳細資料,請參閱「設定即時虛擬化身」。
預設啟用情緒感知對話和主動判斷式語音:
- 情緒感知對話:在 3.8 Live 版中預設為啟用。模型會處理使用者音訊輸入中的聲學韻律、語音提示、停頓和語音語調,調整語音語調和對話節奏。
- 主動判斷式語音:3.8 Live 預設啟用。模型會過濾環境噪音和背景語音,只有在使用者說話時才會生成音訊回覆。
非同步和自動取消的封鎖函式呼叫:3.8 Live 提供專為即時語音設計的工具呼叫行為:
- 非封鎖非同步執行:模型產生工具呼叫時,音訊工作階段會保持啟用狀態,因此代理程式可以串流對話確認訊息 (例如「讓我調出你的帳戶詳細資料...」),並在用戶端應用程式呼叫後端 API 時處理後續輸入內容。
- 自動取消封鎖呼叫 (
behavior="BLOCKING"):當函式宣告設定behavior="BLOCKING"時,生成作業會暫停,直到工具回覆為止。如果封鎖呼叫正在執行時收到新的使用者輸入內容,Gemini Live API 伺服器會取消待處理的呼叫。 - 禮貌中斷處理:在早期模型中,如果使用者說話時,系統使用
scheduling="INTERRUPT"傳回工具回應,會與使用者音訊重疊。在 3.8 Live 中,當使用者說話時,伺服器會將排程降級為WHEN_IDLE,並在使用者說完後播放回覆。
動態切換語言和自訂詞彙:
- 多語言支援:在工作階段中偵測並切換支援的語言,不需重新啟動或重新設定連線。
- 自訂詞彙偏誤:接受
AudioTranscriptionConfig中的特定領域關鍵字、專有名詞、醫療術語和產品代碼 (透過input_audio_transcription),並使用custom_vocabulary提高轉錄準確率。
使用
media_resolution控制項的多模態視覺基準:接受即時影片串流 (1 FPS JPEG 影格,建議解析度768x768),並可設定media_resolution(MEDIA_RESOLUTION_LOW、MEDIA_RESOLUTION_MEDIUM、MEDIA_RESOLUTION_HIGH),平衡每個影格的權杖用量和視覺細節。
快速入門導覽課程
開始之前,請使用應用程式預設憑證 (ADC) 向 Cloud de Confiance by S3NS 進行驗證。
在下列程式碼範例中,將 PROJECT_ID 替換為您的 Cloud de Confiance 專案 ID。
安裝 SDK
安裝或更新 Google Gen AI SDK 和音訊依附元件:
pip install --upgrade google-genai websockets numpy
使用非同步工具呼叫啟動雙向工作階段
以下範例會與 gemini-3.8-live 建立即時工作階段、設定自訂詞彙偏誤,並執行非阻塞非同步函式呼叫:
import asyncio
from google import genai
from google.genai import types
PROJECT_ID = "PROJECT_ID"
LOCATION = "us-central1"
MODEL_ID = "gemini-3.8-live"
# Initialize the Gen AI client for enterprise.
client = genai.Client(enterprise=True, project=PROJECT_ID, location=LOCATION)
# Define a tool for asynchronous execution.
order_lookup_tool = types.FunctionDeclaration(
name="lookup_order_status",
description="Fetches real-time shipping status for a customer order ID.",
parameters=types.Schema(
type="OBJECT",
properties={
"order_id": types.Schema(
type="STRING",
description="The order ID, for example, ORD-8472",
),
},
required=["order_id"],
),
)
# Configure the live connection.
config = types.LiveConnectConfig(
response_modalities=["AUDIO"],
system_instruction=types.Content(
parts=[
types.Part.from_text(
text=(
"You are an enterprise concierge. When you call a tool, "
"briefly acknowledge the request and tell the user what you're doing. "
"If a tool returns no results, inform the user before trying again. "
"Never issue more than two consecutive tool calls without speaking."
)
)
]
),
speech_config=types.SpeechConfig(
voice_config=types.VoiceConfig(
prebuilt_voice_config=types.PrebuiltVoiceConfig(voice_name="Aoede")
),
),
input_audio_transcription=types.AudioTranscriptionConfig(
custom_vocabulary=["ORD-8472", "Gemini Live", "Express Shipping"]
),
output_audio_transcription=types.AudioTranscriptionConfig(),
tools=[types.Tool(function_declarations=[order_lookup_tool])],
)
async def handle_tool_call(session, function_call):
"""Executes backend calls asynchronously without blocking incoming audio."""
order_id = function_call.args.get("order_id", "")
await asyncio.sleep(2.0) # Simulate backend API latency.
if not order_id.startswith("ORD-"):
result = {
"status": "invalid_argument",
"retryable": False,
"message": f"Order ID '{order_id}' is invalid. Ask the user to verify.",
}
else:
result = {
"status": "ok",
"retryable": False,
"order_id": order_id,
"shipping_status": "Out for delivery by 4:00 PM",
}
# Send tool response matching the call ID.
await session.send_tool_response(
function_responses=[
types.FunctionResponse(
id=function_call.id,
name=function_call.name,
response=result,
)
]
)
async def main():
async with client.aio.live.connect(model=MODEL_ID, config=config) as session:
print(f"Connected to {MODEL_ID}")
# Send initial text or stream 16 kHz PCM audio chunks.
await session.send_realtime_input(
text="Hi! Can you check the status of order ORD-8472?"
)
async for message in session.receive():
# Handle asynchronous tool calls.
if message.tool_call:
for call in message.tool_call.function_calls:
asyncio.create_task(handle_tool_call(session, call))
# Process audio output chunks and transcriptions.
if message.server_content:
if (
message.server_content.output_transcription
and message.server_content.output_transcription.text
):
print(
f"Agent: {message.server_content.output_transcription.text}",
end="",
flush=True,
)
if __name__ == "__main__":
asyncio.run(main())
必要的 API 規則和慣例
使用 3.8 Live 建構系統時,請遵循下列 API 慣例:
- 提供實用的函式回應:請勿從工具處理常式傳回空白字典 (
{}) 或None。如果工具傳回錯誤或空白酬載,3.8 Live 可能會產生重複的函式呼叫,並修改引數,除非回覆包含狀態欄位。在每個工具回覆中傳回結構化欄位:status:機器可讀取的狀態字串,例如"ok"、"no_results"或"invalid_argument"。retryable:如果重複呼叫會傳回相同結果,請設為false。message或guidance:指定要向使用者回報的狀態的文字。
- 提示層級的工具重試次數限制:在
system_instruction中加入重試次數限制。例如:「如果工具呼叫未傳回任何結果,請通知使用者,不要使用不同的參數重複搜尋。Never run more than two consecutive tool calls without speaking to the user." - 嚴格
FunctionResponse比對:- 每個
FunctionResponse回合都必須提供前一個FunctionCall的確切id。 - 直接在
FunctionResponse.response中傳遞回應物件。
- 每個
- 串流音訊格式:
- 輸入音訊:16 kHz、16 位元、小端序、單聲道 PCM (
audio/pcm;rate=16000),以 20 毫秒至 100 毫秒的區塊串流。 - 輸出音訊:24 kHz 單聲道 PCM。
- 輸入音訊:16 kHz、16 位元、小端序、單聲道 PCM (
- 移除舊版參數:請勿在設定中傳遞
enable_affective_dialog或proactivity;3.8 Live 預設會啟用這些功能。 - 植入對話記錄:如果使用
send_client_content植入多輪對話記錄,請等到用戶端應用程式收到setup_complete伺服器框架,再設定HistoryConfig(initial_history_in_client_content=True)。
遷移至 Gemini 3.8 Live
如要進一步瞭解如何從 gemini-live-2.5-flash-native-audio 遷移至 gemini-3.8-live,請參閱「從 Gemini 2.5 Flash Live API 原生音訊遷移至 Gemini 3.8 Live」。
開發人員檢查清單
部署應用程式前,請先確認下列事項:
其他資源
詳情請參閱下列資源: