OpenAI Realtime 語音
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?:
apiKey?:
speaker?:
語音活動偵測(VAD)設定語音活動偵測(VAD)設定 的直接連結
type?:
threshold?:
prefix_padding_ms?:
silence_duration_ms?:
方法方法 的直接連結
connect()connect 的直接連結
建立與 OpenAI Realtime 服務的連線。使用 speak、listen 或 send 函式前必須先呼叫此方法。
returns:
speak()speak 的直接連結
使用已設定的語音模型發出 speaking 事件。輸入可以是字串或可讀取串流。
input:
options?:
speaker?:
傳回值: Promise<void>
listen()listen 的直接連結
處理音訊輸入以進行語音識別。此方法接收音訊資料的可讀取串流,並發出包含轉錄文字的 'listening' 事件。
audioData:
傳回值: Promise<void>
send()send 的直接連結
將音訊資料即時串流至 OpenAI 服務,適用於咪高峰即時輸入等連續音訊串流情境。
audioData:
傳回值: Promise<void>
updateConfig()updateconfig 的直接連結
更新語音實例的工作階段設定。你可以修改語音設定、對話輪次偵測及其他參數。
sessionConfig:
傳回值: void
addTools()addtools 的直接連結
將一組 Tools 加入語音實例。Tools 讓模型可在對話期間執行其他操作。將 OpenAIRealtimeVoice 加入 Agent 後,為 Agent 設定的所有 Tools 都會自動供語音介面使用。
tools?:
傳回值: void
close()close 的直接連結
中斷與 OpenAI Realtime 工作階段的連線並清理資源。語音實例使用完畢後應呼叫此方法。
傳回值: void
getSpeakers()getspeakers 的直接連結
傳回可用的語音清單。
傳回值: Promise<Array<{ voiceId: string; [key: string]: any }>>
on()on 的直接連結
為語音事件註冊事件監聽器。
event:
callback:
傳回值: void
off()off 的直接連結
移除早前註冊的事件監聽器。
event:
callback:
傳回值: void
事件事件 的直接連結
OpenAIRealtimeVoice 類別會發出以下事件:
speaking:
writing:
error:
OpenAI Realtime 事件OpenAI Realtime 事件 的直接連結
你亦可在事件名稱加上 'openAIRealtime:' 前綴,以監聽 OpenAI Realtime 工具事件:
openAIRealtime:conversation.created:
openAIRealtime:conversation.interrupted:
openAIRealtime:conversation.updated:
openAIRealtime:conversation.item.appended:
openAIRealtime:conversation.item.completed:
可用語音可用語音 的直接連結
可使用以下語音選項:
alloy: 中性而平衡ash: 清晰而精準ballad: 旋律感強而流暢coral: 溫暖而親切echo: 響亮而低沉sage: 平靜而沉著shimmer: 明亮而充滿活力verse: 靈活而富表現力
注意事項注意事項 的直接連結
- API key 可透過建構函式選項或
OPENAI_API_KEY環境變數提供 - OpenAI Realtime Voice API 使用 WebSockets 進行即時通訊
- 伺服器端語音活動偵測(VAD)可提高語音偵測的準確度
- 所有音訊資料均以 Int16Array 格式處理
- 使用其他方法前,必須先透過
connect()連接語音實例 - 使用完畢後,必須呼叫
close()以妥善清理資源 - 記憶體管理由 OpenAI Realtime API 處理