OpenAI Realtime voice
OpenAIRealtimeVoice 类使用 OpenAI 基于 WebSocket 的 API 提供实时语音交互功能。它支持实时语音到语音、语音活动检测以及基于事件的音频流。
使用示例使用示例的直接链接
import { OpenAIRealtimeVoice } from '@mastra/voice-openai-realtime'
import { playAudio, getMicrophoneStream } from '@mastra/node-audio'
// Initialize with default configuration using environment variables
const voice = new OpenAIRealtimeVoice()
// Or initialize with specific configuration
const voiceWithConfig = new OpenAIRealtimeVoice({
apiKey: 'your-openai-api-key',
model: 'gpt-5.1-realtime-preview-2024-12-17',
speaker: 'alloy', // Default voice
})
voiceWithConfig.updateSession({
turn_detection: {
type: 'server_vad',
threshold: 0.6,
silence_duration_ms: 1200,
},
})
// Establish connection
await voice.connect()
// Set up event listeners
voice.on('speaker', ({ audio }) => {
// Handle audio data (Int16Array) pcm format by default
playAudio(audio)
})
voice.on('writing', ({ text, role }) => {
// Handle transcribed text
console.log(`${role}: ${text}`)
})
// Convert text to speech
await voice.speak('Hello, how can I help you today?', {
speaker: 'echo', // Override default voice
})
// Process audio input
const microphoneStream = getMicrophoneStream()
await voice.send(microphoneStream)
// When done, disconnect
voice.connect()
配置配置的直接链接
构造函数选项构造函数选项的直接链接
model?:
string
= 'gpt-5.1-realtime-preview-2024-12-17'
用于实时语音交互的模型 ID。
apiKey?:
string
OpenAI API key。未提供时使用 OPENAI_API_KEY 环境变量。
speaker?:
string
= 'alloy'
用于语音合成的默认音色 ID。
语音活动检测(VAD)配置语音活动检测(VAD)配置的直接链接
type?:
string
= 'server_vad'
要使用的 VAD 类型。服务端 VAD 的准确率更高。
threshold?:
number
= 0.5
语音检测灵敏度(0.0–1.0)。
prefix_padding_ms?:
number
= 1000
检测到语音前要包含的音频毫秒数。
silence_duration_ms?:
number
= 1000
结束一个轮次前的静音毫秒数。
方法方法的直接链接
connect()connect的直接链接
建立与 OpenAI Realtime 服务的连接。使用 speak、listen 或 send 函数前必须调用此方法。
returns:
Promise<void>
连接建立后 resolve 的 Promise。
speak()speak的直接链接
使用已配置的语音模型触发 speaking 事件。输入可以是字符串或可读流。
input:
string | NodeJS.ReadableStream
要转换为语音的文本或文本流。
options?:
Options
配置选项。
Options
speaker?:
string
用于本次特定语音请求的音色 ID。
返回: Promise<void>
listen()listen的直接链接
处理音频输入以进行语音识别。接收音频数据的可读流,并通过 listening 事件发出转写文本。
audioData:
NodeJS.ReadableStream
要转写的音频流。
返回: Promise<void>
send()send的直接链接
将音频数据实时流式传输到 OpenAI 服务,适用于麦克风实时输入等连续音频流场景。
audioData:
NodeJS.ReadableStream
要发送到服务的音频流。
返回: Promise<void>
updateConfig()updateconfig的直接链接
更新语音实例的 session 配置。此方法可修改音色设置、轮次检测及其他参数。
sessionConfig:
Realtime.SessionConfig
要应用的新 session 配置。
返回: void
addTools()addtools的直接链接
向语音实例添加一组 Tool。Tool 允许模型在对话期间执行其他操作。将 OpenAIRealtimeVoice 添加到 Agent 后,为 Agent 配置的所有 Tool 都会自动提供给语音接口。
tools?:
ToolsInput
要配备的 Tool 配置。
返回: void
close()close的直接链接
断开 OpenAI Realtime session 并清理资源。使用完语音实例后应调用此方法。
返回: void
getSpeakers()getspeakers的直接链接
返回可用 speaker 列表。
返回: Promise<Array<{ voiceId: string; [key: string]: any }>>
on()on的直接链接
注册语音事件监听器。
event:
string
要监听的事件名称。
callback:
Function
事件发生时要调用的函数。
返回: void
off()off的直接链接
移除之前注册的事件监听器。
event:
string
要停止监听的事件名称。
callback:
Function
要移除的特定回调函数。
返回: void
事件事件的直接链接
OpenAIRealtimeVoice 类会触发以下事件:
speaking:
event
从模型收到音频数据时触发。回调接收 { audio: Int16Array }。
writing:
event
转写文本可用时触发。回调接收 { text: string, role: string }。
error:
event
发生错误时触发。回调接收错误对象。
OpenAI Realtime 事件OpenAI Realtime 事件的直接链接
还可以添加 openAIRealtime: 前缀来监听 OpenAI Realtime 实用事件:
openAIRealtime:conversation.created:
event
创建新对话时触发。
openAIRealtime:conversation.interrupted:
event
对话被中断时触发。
openAIRealtime:conversation.updated:
event
对话更新时触发。
openAIRealtime:conversation.item.appended:
event
向对话追加项目时触发。
openAIRealtime:conversation.item.completed:
event
对话中的项目完成时触发。
可用音色可用音色的直接链接
可使用以下音色选项:
alloy: 中性且均衡ash: 清晰且准确ballad: 悦耳且流畅coral: 温暖且亲切echo: 浑厚且低沉sage: 沉稳且富有思考感shimmer: 明亮且充满活力verse: 多变且富有表现力
注意事项注意事项的直接链接
- 可以通过构造函数选项或
OPENAI_API_KEY环境变量提供 API key - OpenAI Realtime Voice API 使用 WebSocket 进行实时通信
- 服务端语音活动检测(VAD)可提高语音检测准确率
- 所有音频数据都以 Int16Array 格式处理
- 使用其他方法前,必须通过
connect()连接语音实例 - 完成后始终调用
close(),以正确清理资源 - 内存管理由 OpenAI Realtime API 处理