AWS Nova Sonic voice
NovaSonicVoice 类由 AWS Bedrock Nova 2 Sonic 提供支持,可实现实时语音到语音交互。它会打开通向模型的双向 stream,并为助理音频、转录文本、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()
身份验证身份验证的直接链接
NovaSonicVoice 在未传入 credentials 选项时使用 AWS SDK 凭据解析链。Mastra 会调用 defaultProvider()(来自 @aws-sdk/credential-provider-node),依次检查环境变量、共享凭据文件、EC2、ECS、EKS 的 IAM role 以及其他标准来源。
要使用静态凭据,请将其传入构造函数:
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?:
Session 配置Session 配置的直接链接
sessionConfig 控制推理参数和轮次交互行为。所有字段均为可选。
inferenceConfiguration?:
maxTokens?:
temperature?:
topP?:
topK?:
stopSequences?:
turnDetectionConfiguration?:
endpointingSensitivity?:
toolChoice?:
enableKnowledgeGrounding?:
knowledgeBaseConfig?:
方法方法的直接链接
connect()connect的直接链接
打开通向 AWS Bedrock 的双向 stream,并发送初始 Session、提示词和系统事件。请在 speak、listen 或 send 前调用此方法。
options?:
返回:Promise<void>
speak()speak的直接链接
为文本提示词合成语音,并在生成音频时发出 speaking 事件。
input:
options?:
返回:Promise<void>
send()send的直接链接
将麦克风音频(或任意 PCM 来源)流式传输到模型。此方法适用于实时连续对话。
audioData:
返回:Promise<void>
listen()listen的直接链接
委托给 send() 的便捷封装。需要对有限音频 stream 执行一次转录时可使用此方法。
audioData:
返回:Promise<void>
endAudioInput()endaudioinput的直接链接
发出当前音频轮次结束的信号,以便模型完成响应。当用户停止说话且 Provider 未配置服务端轮次检测时,请调用此方法。
返回:Promise<void>
addInstructions()addinstructions的直接链接
更新活动 Session 的系统提示词。
instructions?:
返回:void
addTools()addtools的直接链接
向语音实例注册 Tool。当 NovaSonicVoice 附加到 Agent 时,会自动添加该 Agent 的 Tool。
tools?:
返回:void
getSpeakers()getspeakers的直接链接
返回 Nova 2 Sonic 支持的语音列表。
返回:Promise<Array<{ voiceId: string; name: string; language: string; locale: string; gender: 'masculine' | 'feminine'; polyglot: boolean }>>
getListener()getlistener的直接链接
返回语音实例当前是否持有打开的 stream。
返回:Promise<{ enabled: boolean }>
close()close的直接链接
关闭双向 stream 并销毁底层 Bedrock client。请在对话结束时调用此方法。
返回:void
on() / off()on--off的直接链接
注册和移除事件 listener。有关共享事件 API,请参阅语音事件。
事件事件的直接链接
NovaSonicVoice 会发出以下事件:
speaking:
writing:
toolCall:
interrupt:
turnComplete:
session:
usage:
error:
generationStage 用于区分临时转录('SPECULATIVE')和最终转录('FINAL')。持久化存储请使用 'FINAL' 文本,实时字幕请使用 'SPECULATIVE' 文本。
可用语音可用语音的直接链接
Nova 2 Sonic 提供十种 locale 的语音。Tiffany 和 Matthew 是多语言语音,可以使用任何受支持的语言说话。
| 语音 ID | 名称 | 语言 | Locale | 性别 | 多语言 |
|---|---|---|---|---|---|
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 的形式流式传输。助理音频以
Int16Array的形式在speaking事件上发出。 - 语音实例必须先调用
connect(),然后才能调用其他流式方法。 close()会销毁底层BedrockRuntimeClient,以释放 HTTP/2 Session。- Nova 2 Sonic 在
us-east-1、us-west-2和ap-northeast-1中可用。其他区域会在构造期间抛出配置错误。