Gemini Live API 教程:3 大概念打造实时语音 AI Agent,WebSocket 架构 + 官方代码

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 的语音回应,再传回给浏览器播放

两个任务互相独立运行,所以 agent 说话的同时你也可以即时打断。

核心循环只有 4 步:Open → Send → Receive → Play

实际写代码的时候,整个对话就是 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 的起点和终点 — 即知道你什么时候开始说、什么时候停。

也正因为这样,你的麦克风需要在你没有说话的时候也持续串流音频到模型,因为模型需要那段“持续的 stream”去捕捉你开口的瞬间。

好消息是:Gemini Live 的 VAD 是内建的,你不需要自己写。

概念 2:Barge-in,可以打断 agent 说话

Barge-in 的意思是:你在 agent 说话的时候插嘴,agent 即时停。对讲机做不到这一点,但真正的人与人对话可以。

Gemini Live 内部就是用同一个 VAD 机制,去探测你是否“开始在 agent 上面抢话”。当探测到你打断,模型会立即停下自己,并发出一个“interrupted”信号回后端。

让打断感觉即时的关键技巧:

  • 不要等 interrupted 信号跨越网络再停本地音讯
  • 浏览器一旦从麦克风“听到”你开始说,就立即暂停现有的 agent 语音播放
  • 等你的声音输入完了,再由模型的 interrupted 信号确认状态同步

这个“本地即停”的设计就是让打断感觉自然的秘密。

概念 3:Tools,给 agent 的实际技能

Gemini Live 模型本身只会说话 — 它没有能力播放音乐、跳过当前歌曲、按按钮。所以你要给它 tools — 一些 function call,每个 tool 都有自己的名、描述和代表一个 action。

教学中的示范 tool 例子:

  • play_playlist:播放一个 playlist
  • skip_current_track:跳过当前歌曲
  • pause_music:暂停音乐

运作模式是:模型决定要用哪个 tool 之后,它不会单纯“说”要做什么,而是会直接 emit“用这个 tool + 这些 arguments”的指示,由你的后端代码执行之后再回报结果。

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

原创内容
本文是 TechRitual 原创内容的简体中文版本。
Stein Yep
Stein Yep