Google Gemini Live API 嘅最大賣點,唔止係語音合成咁簡單:佢可以一邊聽你講嘢、一邊即時回答,仲可以畀你隨時打斷,感覺就似真正嘅電話對話。Google 最近發佈咗一段詳盡教學,將整個 live voice agent 拆解成 3 部分:Gemini Live 同傳統 TTS 嘅差異、三層架構同一個 web socket 核心循環、以及令個 agent「有生命」嘅 3 個關鍵概念。本文整理呢段教學嘅核心內容、附上 Google 官方提供嘅程式碼連結同文件,畀有興趣建立自家實時語音 AI agent 嘅開發者一個完整概覽。
Gemini Live 同傳統 TTS 嘅 3 大差異:audio-to-audio + 雙向 + 即時串流
傳統嘅 text-to-speech(TTS)系統運作好直接:你輸入文字,佢輸出語音,一個方向嘅 pipeline。TTS 系統識講嘢,但聽唔到你,佢根本唔知你係咪喺度。
Gemini Live 走嘅係完全唔同嘅方向:audio-to-audio,雙向同時進行。佢直接收你嘅語音訊號、檢測語氣、停頓、能量同你講嘢嘅方式,再即時生成並串流輸出語音。
核心 3 大差異:
- 方向:TTS 係 text → audio 單向;Gemini Live 係 audio ↔ audio 雙向
- 感知:TTS 唔知你喺度;Gemini Live 識聽 tone、pause、energy 等語音線索
- 時序:TTS 等晒整個 response 先開始讀;Gemini Live 邊諗邊講,可以喺生成答案嘅同時已經開始串流音訊
換句話講:「TTS reads, Live hears」 — 傳統 TTS 會讀出嚟,Gemini Live 真係會聽你講嘢。
3 層架構:瀏覽器 + 後端 + Gemini Live,配 WebSocket 連接
整個 live voice agent 嘅架構由 3 個部分組成:
- 瀏覽器:負責擷取你嘅咪高峰音訊、播放 Gemini 嘅回應
- Gemini Live:live 語音模型本身
- 後端:保留同 Gemini 嘅長連線,作為瀏覽器同 Gemini 之間嘅音訊通道
瀏覽器同後端之間嘅通訊用 WebSocket,而唔係一般嘅 HTTP request。原因係:一般 HTTP request 只能「問一次就斷」,但 live voice 需要雙向持續音訊流量,所以一定要用 WebSocket 維持長連線。
後端實際做緊 2 個並行任務:
- 任務 A:將你嘅咪高峰音訊持續串流上傳到 Gemini
- 任務 B:接收 Gemini 嘅語音回應,再傳返畀瀏覽器播放
兩個 task 互相獨立運行,所以 agent 講嘢嘅同時你都可以即時打斷。
核心循環只有 4 步:Open → Send → Receive → Play
實際寫 code 嘅時候,整個對話就係 4 個步驟嘅循環:
- Open:開啟同 Gemini Live 嘅 session
- Send:將瀏覽器擷取嘅咪高峰音訊送到後端
- Receive:後端收到 Gemini 嘅語音回應,再傳返去瀏覽器
- Play:瀏覽器即時播放 Gemini 嘅回應
Google 喺教學入面強調:「呢個循環好簡單 — Open、Send、Receive、Play,其他全部都係 plumbing(接駁細節)。」搞掂呢個循環,你已經有咗一個可運作嘅 voice agent。
令 agent「有生命」嘅 3 個核心概念:VAD、Barge-in、Tools
搞掂 4 步循環之後,技術上 agent 已經行得通,但係同真正嘅對話經驗仲有好大距離。要令佢感覺「活生生」,需要 3 個進階概念。
概念 1:Voice Activity Detection(VAD),點樣知道你講完?
VAD(Voice Activity Detection)係模型持續問自己嘅問題:而家係有人喺度講嘢,定係靜音?呢個判斷令模型可以搵到你嘅 turn 嘅起點同終點 — 即係知道你幾時開始講、幾時停。
亦因為咁,你嘅咪高峰需要喺你冇講嘢嘅時候都持續串流 audio 落模型,因為模型需要嗰段「持續嘅 stream」去捕捉你開口嘅一刻。
好消息係:Gemini Live 嘅 VAD 係內建嘅,你唔需要自己寫。
概念 2:Barge-in,可以打斷 agent 講嘢
Barge-in 嘅意思係:你喺 agent 講緊嘢嘅時候插嘴,agent 即時停。對講機做唔到呢樣嘢,但真正嘅人與人對話可以。
Gemini Live 內部就係用同一個 VAD 機制,去探測你係咪「開始喺 agent 上面搶話」。當探測到你打斷,模型會即刻停低自己,並發出一個「interrupted」訊號返後端。
令打斷感覺即時嘅關鍵技巧:
- 唔好等個 interrupted 訊號跨越網絡先停本地音訊
- 瀏覽器一旦從咪高峰「聽到」你開始講,就即刻暫停現有嘅 agent 語音播放
- 等你嘅聲音輸入完咗,再由 model 嘅 interrupted 訊號確認狀態同步
呢個「本地即停」嘅設計就係令打斷感覺自然嘅秘密。
概念 3:Tools,畀 agent 嘅實際技能
Gemini Live 模型本身淨係識講嘢 — 佢冇能力播歌、skip 緊嘅歌、撳掣。所以你要畀佢 tools — 一啲 function call,每個 tool 都有自己嘅名、描述同代表一個 action。
教學入面嘅示範 tool 例子:
- play_playlist:播放一個 playlist
- skip_current_track:跳過當前歌曲
- pause_music:暫停音樂
運作模式係:模型決定要用邊個 tool 之後,佢唔會單純「講」要做乜,而係會直接 emit「用呢個 tool + 呢啲 arguments」嘅指示,由你嘅後端 code 執行之後再回報結果。
Google 特別強調一條 voice 限定嘅規則:「tool-latency rule」:「當 tool 執行緊嘅時候,模型係 waiting 嘅。」如果 tool 太耐先 return,個對話就會入靜音狀態。所以你嘅音樂 tool 應該搵到指令即 return,唔好等成首歌播完先答。
總結 3 大概念一句講晒:VAD 捉你嘅 turn、Barge-in 畀你打斷、Tools 令個 agent 可以做事。
小結:raw API vs Google ADK 嘅選擇
今次教學嘅實作示範刻意用 raw GenAI SDK — 開發者可以睇到每個部分(session、stream、audio loop、tools)嘅運作原理,完全冇 framework 隱藏。但就係要寫多啲 plumbing code。
Google 提到嘅下一集將會用嘅 Google ADK(Agent Development Kit),就係為咗呢類 voice agent 提供 framework:
- Agent、session、streaming loop 都由 framework 管理
- 內置 queue 維持 live call 流暢
- 開發者只係寫 high-level 業務邏輯(tools、prompts)
如果你只係想快啲試到 live voice agent,ADK 會係更易入手嘅選擇;如果你想了解底下運作原理或者做大量客製,今次教學嘅 raw API 更加清晰。
官方完整資源
- Demo 程式碼:[g.dev/cloud/voicedemo1](https://g.dev/cloud/voicedemo1)
- Gemini Live API 文件:[g.dev/cloud/gemini-live](https://g.dev/cloud/gemini-live)
- Agent Development Kit 文件:[g.dev/cloud/adk-docs](https://g.dev/cloud/adk-docs)
- Google Cloud 路線圖:[g.dev/cloud/mma-roadmap](https://g.dev/cloud/mma-roadmap)
- 下一集預告:用 Google ADK 重建同一個 voice agent app

