Voix AWS Nova Sonic
La classe NovaSonicVoice fournit des fonctionnalités de conversation vocale en temps réel reposant sur AWS Bedrock Nova 2 Sonic. Elle ouvre un stream bidirectionnel vers le modèle et émet des événements pour l'audio de l'assistant, le texte transcrit, les appels de Tool, les limites des tours de parole et les interruptions.
Exemple d'utilisationLien direct vers Exemple d'utilisation
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()
AuthentificationLien direct vers Authentification
NovaSonicVoice utilise la chaîne de résolution des identifiants du SDK AWS lorsque l'option credentials n'est pas transmise. Mastra appelle defaultProvider() depuis @aws-sdk/credential-provider-node, qui vérifie, dans l'ordre, les variables d'environnement, les fichiers d'identifiants partagés, les rôles IAM pour EC2, ECS et EKS, ainsi que les autres sources standard.
Pour utiliser des identifiants statiques, transmettez-les au constructeur :
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,
},
})
Le Provider Voice ne journalise jamais les valeurs des identifiants.
ConfigurationLien direct vers Configuration
Options du constructeurLien direct vers Options du constructeur
region?:
model?:
credentials?:
speaker?:
languageCode?:
instructions?:
tools?:
sessionConfig?:
debug?:
Configuration de sessionLien direct vers Configuration de session
sessionConfig contrôle les paramètres d'inférence et le comportement des tours de parole. Tous les champs sont facultatifs.
inferenceConfiguration?:
maxTokens?:
temperature?:
topP?:
topK?:
stopSequences?:
turnDetectionConfiguration?:
endpointingSensitivity?:
toolChoice?:
enableKnowledgeGrounding?:
knowledgeBaseConfig?:
MéthodesLien direct vers Méthodes
connect()Lien direct vers connect
Ouvre le stream bidirectionnel vers AWS Bedrock et envoie les événements initiaux de session, de prompt et de système. Appelez cette méthode avant speak, listen ou send.
options?:
Renvoie : Promise<void>
speak()Lien direct vers speak
Synthétise la parole à partir d'un prompt textuel et émet des événements speaking au fil de la production audio.
input:
options?:
Renvoie : Promise<void>
send()Lien direct vers send
Diffuse l'audio du microphone (ou de toute source PCM) vers le modèle. Utilisez cette méthode pour une conversation continue en direct.
audioData:
Renvoie : Promise<void>
listen()Lien direct vers listen
Wrapper pratique qui délègue à send(). Utilisez-le pour effectuer une seule passe de transcription sur un stream audio fini.
audioData:
Renvoie : Promise<void>
endAudioInput()Lien direct vers endaudioinput
Signale la fin du tour audio actuel afin que le modèle puisse finaliser sa réponse. Appelez cette méthode lorsque l'utilisateur cesse de parler et que le Provider n'est pas configuré pour détecter les tours côté serveur.
Renvoie : Promise<void>
addInstructions()Lien direct vers addinstructions
Met à jour le prompt système de la session active.
instructions?:
Renvoie : void
addTools()Lien direct vers addtools
Enregistre des Tools auprès de l'instance Voice. Lorsque NovaSonicVoice est associé à un Agent, les Tools de cet Agent sont ajoutés automatiquement.
tools?:
Renvoie : void
getSpeakers()Lien direct vers getspeakers
Renvoie la liste des voix prises en charge par Nova 2 Sonic.
Renvoie : Promise<Array<{ voiceId: string; name: string; language: string; locale: string; gender: 'masculine' | 'feminine'; polyglot: boolean }>>
getListener()Lien direct vers getlistener
Indique si l'instance Voice détient actuellement un stream ouvert.
Renvoie : Promise<{ enabled: boolean }>
close()Lien direct vers close
Ferme le stream bidirectionnel et détruit le client Bedrock sous-jacent. Appelez cette méthode à la fin de la conversation.
Renvoie : void
on() / off()Lien direct vers on--off
Enregistre et supprime des écouteurs d'événements. Consultez les événements Voice pour découvrir l'API d'événements partagée.
ÉvénementsLien direct vers Événements
NovaSonicVoice émet les événements suivants :
speaking:
writing:
toolCall:
interrupt:
turnComplete:
session:
usage:
error:
generationStage distingue les transcriptions provisoires ('SPECULATIVE') des transcriptions finalisées ('FINAL'). Utilisez le texte 'FINAL' pour le stockage persistant et le texte 'SPECULATIVE' pour les sous-titres en direct.
Voix disponiblesLien direct vers Voix disponibles
Nova 2 Sonic propose des voix pour dix paramètres régionaux. Tiffany et Matthew sont polyglottes et peuvent parler toutes les langues prises en charge.
| Identifiant de voix | Nom | Langue | Paramètres régionaux | Genre | Polyglotte |
|---|---|---|---|---|---|
tiffany | Tiffany | anglais | en-US | feminine | yes |
matthew | Matthew | anglais | en-US | masculine | yes |
amy | Amy | anglais | en-GB | feminine | no |
olivia | Olivia | anglais | en-AU | feminine | no |
kiara | Kiara | anglais | en-IN | feminine | no |
arjun | Arjun | anglais | en-IN | masculine | no |
ambre | Ambre | français | fr-FR | feminine | no |
florian | Florian | français | fr-FR | masculine | no |
beatrice | Beatrice | italien | it-IT | feminine | no |
lorenzo | Lorenzo | italien | it-IT | masculine | no |
tina | Tina | allemand | de-DE | feminine | no |
lennart | Lennart | allemand | de-DE | masculine | no |
lupe | Lupe | espagnol | es-US | feminine | no |
carlos | Carlos | espagnol | es-US | masculine | no |
carolina | Carolina | portugais | pt-BR | feminine | no |
leo | Leo | portugais | pt-BR | masculine | no |
kiara | Kiara | hindi | hi-IN | feminine | no |
arjun | Arjun | hindi | hi-IN | masculine | no |
RemarquesLien direct vers Remarques
- L'audio est diffusé en PCM 16 bits. L'audio de l'assistant est émis sous la forme d'un
Int16Arraylors de l'événementspeaking. - L'instance Voice doit appeler
connect()avant toute autre méthode de streaming. close()détruit leBedrockRuntimeClientsous-jacent afin de libérer la session HTTP/2.- Nova 2 Sonic est disponible dans les régions
us-east-1,us-west-2etap-northeast-1. Les autres régions provoquent une erreur de configuration lors de la construction.