AWS Nova Sonic Voice
NovaSonicVoice 類別提供由 AWS Bedrock Nova 2 Sonic 支援的即時語音對語音功能。它會開啟與模型之間的雙向資料流,並針對助理音訊、轉錄文字、Tool 呼叫、對話輪次邊界與中斷發出事件。
使用範例「使用範例」的直接連結
import { NovaSonicVoice } from '@mastra/voice-aws-nova-sonic'
import { playAudio, getMicrophoneStream } from '@mastra/node-audio'
// Initialize using the default AWS credential provider chain
const voice = new NovaSonicVoice({
region: 'us-east-1',
speaker: 'matthew',
})
// Or pass explicit credentials
const voiceWithCredentials = new NovaSonicVoice({
region: 'us-east-1',
speaker: 'tiffany',
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
},
})
// Establish the bidirectional stream
await voice.connect()
// Listen for assistant audio (Int16Array PCM)
voice.on('speaking', ({ audioData }) => {
if (audioData) playAudio(audioData)
})
// Listen for transcribed text from the user and assistant
voice.on('writing', ({ text, role, generationStage }) => {
console.log(`${role} (${generationStage ?? 'FINAL'}): ${text}`)
})
// Stream microphone audio in real time
const microphoneStream = getMicrophoneStream()
await voice.send(microphoneStream)
// Disconnect when done
voice.close()
驗證「驗證」的直接連結
若未傳入 credentials 選項,NovaSonicVoice 會使用 AWS SDK 認證資訊解析鏈。Mastra 會呼叫 @aws-sdk/credential-provider-node 的 defaultProvider(),依序檢查環境變數、共用認證資訊檔、EC2 的 IAM 角色、ECS、EKS 及其他標準來源。
若要使用靜態認證資訊,請將其傳入建構函式:
new NovaSonicVoice({
region: 'us-east-1',
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
sessionToken: process.env.AWS_SESSION_TOKEN,
},
})
此 Voice Provider 絕不會將認證資訊值寫入記錄。
設定「設定」的直接連結
建構函式選項「建構函式選項」的直接連結
region?:
model?:
credentials?:
speaker?:
languageCode?:
instructions?:
tools?:
sessionConfig?:
debug?:
工作階段設定「工作階段設定」的直接連結
sessionConfig 控制推論參數與對話輪替行為。所有欄位皆為選填。
inferenceConfiguration?:
maxTokens?:
temperature?:
topP?:
topK?:
stopSequences?:
turnDetectionConfiguration?:
endpointingSensitivity?:
toolChoice?:
enableKnowledgeGrounding?:
knowledgeBaseConfig?:
方法「方法」的直接連結
connect()「connect」的直接連結
開啟與 AWS Bedrock 之間的雙向資料流,並傳送初始工作階段、提示與系統事件。請先呼叫此方法,再呼叫 speak、listen 或 send。
options?:
回傳:Promise<void>
speak()「speak」的直接連結
合成文字提示的語音,並在產生音訊時發出 speaking 事件。
input:
options?:
回傳:Promise<void>
send()「send」的直接連結
將麥克風音訊(或任何 PCM 來源)串流傳送至模型。適用於即時且持續的對話。
audioData:
回傳:Promise<void>
listen()「listen」的直接連結
委派給 send() 的便利包裝函式。當您要對有限的音訊資料流執行單次轉錄時使用。
audioData:
回傳:Promise<void>
endAudioInput()「endaudioinput」的直接連結
指示目前音訊輪次結束,讓模型完成回應。當使用者停止說話,且 Provider 未設定伺服器端對話輪次偵測時,請呼叫此方法。
回傳:Promise<void>
addInstructions()「addinstructions」的直接連結
更新作用中工作階段的系統提示。
instructions?:
回傳:void
addTools()「addtools」的直接連結
在 Voice 執行個體註冊 Tools。NovaSonicVoice 附加至 Agent 時,系統會自動加入 Agent 的 Tools。
tools?:
回傳:void
getSpeakers()「getspeakers」的直接連結
回傳 Nova 2 Sonic 支援的語音清單。
回傳:Promise<Array<{ voiceId: string; name: string; language: string; locale: string; gender: 'masculine' | 'feminine'; polyglot: boolean }>>
getListener()「getlistener」的直接連結
回傳 Voice 執行個體目前是否維持開啟的資料流。
回傳:Promise<{ enabled: boolean }>
close()「close」的直接連結
關閉雙向資料流並終止底層 Bedrock 使用者端。對話結束時請呼叫此方法。
回傳:void
on() / off()「on--off」的直接連結
註冊及移除事件監聽器。共用事件 API 請參閱 Voice 事件。
事件「事件」的直接連結
NovaSonicVoice 會發出下列事件:
speaking:
writing:
toolCall:
interrupt:
turnComplete:
session:
usage:
error:
generationStage 可區分暫定轉錄('SPECULATIVE')與最終轉錄('FINAL')。持久儲存請使用 'FINAL' 文字,即時字幕則使用 'SPECULATIVE' 文字。
可用語音「可用語音」的直接連結
Nova 2 Sonic 提供十個語系的語音。Tiffany 與 Matthew 為多語言語音,可說任何支援的語言。
| 語音 ID | 名稱 | 語言 | 語系 | 性別 | 多語言 |
|---|---|---|---|---|---|
tiffany | Tiffany | 英文 | en-US | 女性 | 是 |
matthew | Matthew | 英文 | en-US | 男性 | 是 |
amy | Amy | 英文 | en-GB | 女性 | 否 |
olivia | Olivia | 英文 | en-AU | 女性 | 否 |
kiara | Kiara | 英文 | en-IN | 女性 | 否 |
arjun | Arjun | 英文 | en-IN | 男性 | 否 |
ambre | Ambre | 法文 | fr-FR | 女性 | 否 |
florian | Florian | 法文 | fr-FR | 男性 | 否 |
beatrice | Beatrice | 義大利文 | it-IT | 女性 | 否 |
lorenzo | Lorenzo | 義大利文 | it-IT | 男性 | 否 |
tina | Tina | 德文 | de-DE | 女性 | 否 |
lennart | Lennart | 德文 | de-DE | 男性 | 否 |
lupe | Lupe | 西班牙文 | es-US | 女性 | 否 |
carlos | Carlos | 西班牙文 | es-US | 男性 | 否 |
carolina | Carolina | 葡萄牙文 | pt-BR | 女性 | 否 |
leo | Leo | 葡萄牙文 | pt-BR | 男性 | 否 |
kiara | Kiara | 印地文 | hi-IN | 女性 | 否 |
arjun | Arjun | 印地文 | hi-IN | 男性 | 否 |
注意事項「注意事項」的直接連結
- 音訊以 16 位元 PCM 串流傳送。助理音訊會在
speaking事件上以Int16Array發出。 - Voice 執行個體必須先呼叫
connect(),才能呼叫其他串流方法。 close()會終止底層BedrockRuntimeClient,以釋放 HTTP/2 工作階段。- Nova 2 Sonic 可在
us-east-1、us-west-2與ap-northeast-1使用。其他區域會在建構期間擲回設定錯誤。