AWS Nova Sonic 語音
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 role、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,
},
})
此語音 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 的雙向串流,並傳送初始工作階段、prompt 及 system 事件。請在 speak、listen 或 send 前呼叫此方法。
options?:
傳回值:Promise<void>
speak()speak 的直接連結
為文字 prompt 合成語音,並在產生音訊時發出 speaking 事件。
input:
options?:
傳回值:Promise<void>
send()send 的直接連結
將咪高峰音訊(或任何 PCM 來源)串流至模型。此方法適用於實時連續對話。
audioData:
傳回值:Promise<void>
listen()listen 的直接連結
委派至 send() 的便利 wrapper。如要對有限長度的音訊串流進行單次轉錄,請使用此方法。
audioData:
傳回值:Promise<void>
endAudioInput()endaudioinput 的直接連結
表示目前的音訊對話輪次已結束,讓模型完成其回應。如用戶停止說話,而 Provider 未設定伺服器端對話輪次偵測,請呼叫此方法。
傳回值:Promise<void>
addInstructions()addinstructions 的直接連結
更新使用中工作階段的 system prompt。
instructions?:
傳回值:void
addTools()addtools 的直接連結
向語音實例註冊 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 的直接連結
傳回語音實例目前是否持有開啟的串流。
傳回值: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形式發出。 - 語音實例必須先呼叫
connect(),才能呼叫任何其他串流方法。 close()會銷毀底層BedrockRuntimeClient,以釋放 HTTP/2 工作階段。- Nova 2 Sonic 可在
us-east-1、us-west-2及ap-northeast-1使用。使用其他區域會在建構期間拋出設定錯誤。