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」的直接連結
將一組 Tool 加入語音執行個體。Tool 可讓模型在對話期間執行其他動作。將 OpenAIRealtimeVoice 加入 Agent 時,為 Agent 設定的所有 Tool 都會自動供語音介面使用。
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 金鑰可透過建構函式選項或
OPENAI_API_KEY環境變數提供 - OpenAI Realtime Voice API 使用 WebSocket 進行即時通訊
- 伺服器端語音活動偵測 (VAD) 可提高語音偵測的準確度
- 所有音訊資料都會以 Int16Array 格式處理
- 語音執行個體必須先透過
connect()建立連線,才能使用其他方法 - 使用完畢後一律呼叫
close(),以妥善清除資源 - 記憶體管理由 OpenAI Realtime API 處理