Google Gemini Live Voice
GeminiLiveVoice 类使用 Google Gemini Live API 提供实时语音交互功能。它支持双向音频流、Tool 调用、会话管理,以及标准 Google API 和 Vertex AI 两种身份验证方法。
使用示例使用示例的直接链接
import { GeminiLiveVoice } from '@mastra/voice-google-gemini-live'
import { playAudio, getMicrophoneStream } from '@mastra/node-audio'
// Initialize with Gemini API (using API key)
const voice = new GeminiLiveVoice({
apiKey: process.env.GOOGLE_API_KEY, // Required for Gemini API
model: 'gemini-2.0-flash-exp',
speaker: 'Puck', // Default voice
debug: true,
})
// Or initialize with Vertex AI (using OAuth)
const voiceWithVertexAI = new GeminiLiveVoice({
vertexAI: true,
project: 'your-gcp-project',
location: 'us-central1',
serviceAccountKeyFile: '/path/to/service-account.json',
model: 'gemini-2.0-flash-exp',
speaker: 'Puck',
})
// Or use the VoiceConfig pattern (recommended for consistency with other providers)
const voiceWithConfig = new GeminiLiveVoice({
speechModel: {
name: 'gemini-2.0-flash-exp',
apiKey: process.env.GOOGLE_API_KEY,
},
speaker: 'Puck',
realtimeConfig: {
model: 'gemini-2.0-flash-exp',
apiKey: process.env.GOOGLE_API_KEY,
options: {
debug: true,
sessionConfig: {
interrupts: { enabled: true },
},
},
},
})
// Establish connection (required before using other methods)
await voice.connect()
// Set up event listeners
voice.on('speaker', audioStream => {
// Handle audio stream (NodeJS.ReadableStream)
playAudio(audioStream)
})
voice.on('writing', ({ text, role }) => {
// Handle transcribed text
console.log(`${role}: ${text}`)
})
voice.on('turnComplete', ({ timestamp }) => {
// Handle turn completion
console.log('Turn completed at:', timestamp)
})
// Convert text to speech
await voice.speak('Hello, how can I help you today?', {
speaker: 'Charon', // Override default voice
responseModalities: ['AUDIO', 'TEXT'],
})
// Process audio input
const microphoneStream = getMicrophoneStream()
await voice.send(microphoneStream)
// Update session configuration
await voice.updateSessionConfig({
speaker: 'Kore',
instructions: 'Be more concise in your responses',
})
// When done, disconnect
await voice.disconnect()
// Or use the synchronous wrapper
voice.close()
配置配置的直接链接
构造函数选项构造函数选项的直接链接
apiKey?:
model?:
speaker?:
vertexAI?:
project?:
location?:
serviceAccountKeyFile?:
serviceAccountEmail?:
instructions?:
sessionConfig?:
interrupts?:
interrupts.enabled?:
interrupts.allowUserInterruption?:
contextCompression?:
debug?:
方法方法的直接链接
connect()connect的直接链接
建立与 Gemini Live API 的连接。使用 speak、listen 或 send 方法之前必须调用此方法。
requestContext?:
returns:
speak()speak的直接链接
将文本转换为语音并发送给模型。输入可以是字符串或可读流。
input:
options?:
speaker?:
languageCode?:
responseModalities?:
返回:Promise<void>(响应通过 speaker 和 writing 事件发出)
sendContext()sendcontext的直接链接
将对话历史发送到实时会话中,而不触发模型响应。在冷连接时,可用此方法注入之前的对话轮次(例如来自 Mastra Memory),让模型在用户发言前就获得上下文。
await voice.sendContext([
{ role: 'user', content: 'What is the weather?' },
{ role: 'assistant', content: 'It is 72°F in San Francisco.' },
])
// Model stays silent until the user actually speaks.
await voice.send(micStream)
turns:
role("user" 或 "assistant")和一个 content 字符串。较新的模型(例如 gemini-2.5-flash-native-audio-preview-12-2025)支持这两种角色。部分旧模型仅接受 user 角色的轮次。options?:
turnComplete?:
返回:Promise<void>
listen()listen的直接链接
处理用于语音识别的音频输入。接收音频数据的可读流,并返回转录文本。
audioStream:
options?:
返回:Promise<string> —— 转录文本
send()send的直接链接
将音频数据实时流式传输到 Gemini 服务,适用于实时麦克风输入等连续音频流场景。
audioData:
返回:Promise<void>
updateSessionConfig()updatesessionconfig的直接链接
在运行时更新会话配置。此方法可修改声音设置、speaker 选择以及其他运行时配置。
config:
返回:Promise<void>
addTools()addtools的直接链接
向 Voice 实例添加一组 Tool。Tool 允许模型在对话期间执行其他操作。将 GeminiLiveVoice 添加到 Agent 时,为该 Agent 配置的所有 Tool 都会自动对 Voice 接口可用。
tools:
返回:void
addInstructions()addinstructions的直接链接
添加或更新模型的系统指令。
instructions?:
返回:void
answer()answer的直接链接
触发模型响应。此方法主要在与 Agent 集成时供内部使用。
options?:
返回:Promise<void>
getSpeakers()getspeakers的直接链接
返回 Gemini Live API 的可用语音 speaker 列表。
返回:Promise<Array<{ voiceId: string; description?: string }>>
disconnect()disconnect的直接链接
断开与 Gemini Live 会话的连接并清理资源。这是用于正确处理清理操作的异步方法。
返回:Promise<void>
close()close的直接链接
disconnect() 的同步封装。在内部调用 disconnect(),但不等待其完成。
返回:void
on()on的直接链接
为 Voice 事件注册事件监听器。
event:
callback:
返回:void
off()off的直接链接
移除先前注册的事件监听器。
event:
callback:
返回:void
事件事件的直接链接
GeminiLiveVoice 类会发出以下事件:
speaker:
speaking:
writing:
output_audio_transcription 通道驱动,而非 modelTurn.parts.text。thinking:
modelTurn.parts.text 的模型思维链/推理文本。回调接收 { text: string }。不会在非 native-audio 模型上发出;在这些模型中,modelTurn.parts.text 是口语响应,会改为通过 writing 发出。session:
turnComplete:
toolCall:
usage:
error:
interrupt:
Native-audio 行为Native-audio 行为的直接链接
Native-audio Gemini Live 模型(ID 中包含 native-audio 的任何模型,例如 gemini-2.5-flash-native-audio-preview-12-2025)会将文本输出拆分到两个通道:
- 模型的口语回复以音频和
output_audio_transcription转录的形式传递,并以writing事件公开,其role: 'assistant'。 - 模型的内部推理以
modelTurn.parts.text的形式传递,并以thinking事件公开。
非 native-audio 模型没有 output_audio_transcription 通道,因此 modelTurn.parts.text 就是口语响应本身,并以 writing 事件发出。此时不会发出 thinking 事件。
输入转录、输出转录和插话检测 (realtime_input_config.activity_handling = 'START_OF_ACTIVITY_INTERRUPTS') 会在设置 payload 中自动启用,无需额外配置。
可用模型可用模型的直接链接
可使用以下 Gemini Live 模型:
gemini-2.0-flash-exp(默认)gemini-2.0-flash-exp-image-generationgemini-2.0-flash-live-001gemini-live-2.5-flash-preview-native-audiogemini-2.5-flash-exp-native-audio-thinking-dialoggemini-live-2.5-flash-previewgemini-2.6.flash-preview-tts
可用声音可用声音的直接链接
可使用以下声音选项:
Puck(默认):自然亲切的对话风格Charon:深沉、权威Kore:中性、专业Fenrir:温暖、平易近人
身份验证方法身份验证方法的直接链接
Gemini API(开发)Gemini API(开发)的直接链接
最简单的方法是使用 Google AI Studio 提供的 API 密钥:
const voice = new GeminiLiveVoice({
apiKey: 'your-api-key', // Required for Gemini API
model: 'gemini-2.0-flash-exp',
})
Vertex AI(生产)Vertex AI(生产)的直接链接
在生产环境中使用 OAuth 身份验证和 Google Cloud Platform:
// Using service account key file
const voice = new GeminiLiveVoice({
vertexAI: true,
project: 'your-gcp-project',
location: 'us-central1',
serviceAccountKeyFile: '/path/to/service-account.json',
})
// Using Application Default Credentials
const voice = new GeminiLiveVoice({
vertexAI: true,
project: 'your-gcp-project',
location: 'us-central1',
})
// Using service account impersonation
const voice = new GeminiLiveVoice({
vertexAI: true,
project: 'your-gcp-project',
location: 'us-central1',
serviceAccountEmail: 'service-account@project.iam.gserviceaccount.com',
})
高级功能高级功能的直接链接
会话管理会话管理的直接链接
Gemini Live API 支持恢复会话,以应对网络中断:
voice.on('sessionHandle', ({ handle, expiresAt }) => {
// Store session handle for resumption
saveSessionHandle(handle, expiresAt)
})
// Resume a previous session
const voice = new GeminiLiveVoice({
sessionConfig: {
enableResumption: true,
maxDuration: '2h',
},
})
Tool 调用Tool 调用的直接链接
让模型能够在对话期间调用函数:
import { z } from 'zod'
voice.addTools({
weather: {
description: 'Get weather information',
parameters: z.object({
location: z.string(),
}),
execute: async ({ location }) => {
const weather = await getWeather(location)
return weather
},
},
})
voice.on('toolCall', ({ name, args, id }) => {
console.log(`Tool called: ${name} with args:`, args)
})
说明说明的直接链接
- Gemini Live API 使用 WebSocket 进行实时通信
- 输入音频以 16kHz PCM16 处理,输出音频以 24kHz PCM16 处理
- 使用其他方法前,必须通过
connect()连接 Voice 实例 - 完成后始终调用
close(),以正确清理资源 - Vertex AI 身份验证需要适当的 IAM 权限(
aiplatform.user角色) - 会话恢复功能可从网络中断中恢复
- API 支持文本和音频的实时交互