Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Gestion des événements de sortie avec l'API bidirectionnelle
Lorsque le modèle Amazon Nova Sonic répond, il suit une séquence d'événements structurée. Le flux commence par un completionStart
événement contenant des identifiants uniques tels que sessionId
promptName
, etcompletionId
. Ces identifiants sont cohérents tout au long du cycle de réponse et unissent tous les événements de réponse ultérieurs.
Chaque type de réponse suit un schéma cohérent en trois parties : contentStart
définit le type et le format du contenu, l'événement de contenu réel et contentEnd
ferme ce segment. La réponse inclut généralement plusieurs blocs de contenu en séquence : transcription par reconnaissance vocale automatique (ASR) (ce que l'utilisateur a dit), utilisation d'outils facultatifs (lorsque des informations externes sont nécessaires), réponse textuelle (ce que le modèle prévoit de dire) et réponse audio (sortie vocale).
La transcription ASR apparaît en premier, fournissant au modèle la compréhension du discours de l'utilisateur avec role: "USER"
et "additionalModelFields":
"{\"generationStage\":\"FINAL\"}"
dans lecontentStart
. Lorsque le modèle a besoin de données externes, il envoie des événements liés à l'outil avec des noms et des paramètres d'outil spécifiques. La réponse textuelle fournit un aperçu du discours prévu avec role:
"ASSISTANT"
et"additionalModelFields":
"{\"generationStage\":\"SPECULATIVE\"}"
. La réponse audio fournit ensuite des fragments vocaux codés en base64 partageant les mêmes éléments contentId
tout au long du flux.
Lors de la génération audio, Amazon Nova Sonic permet un flux de conversation naturel grâce à sa fonctionnalité intégrée. Lorsqu'un utilisateur interrompt Amazon Nova Sonic pendant qu'il parle, Nova Sonic arrête immédiatement de générer de la voix, passe en mode écoute et envoie une notification de contenu indiquant que l'interruption s'est produite. Comme Nova Sonic fonctionne plus rapidement qu'en temps réel, il se peut que certains fichiers audio aient déjà été diffusés mais qu'ils n'aient pas encore été écoutés. La notification d'interruption permet à l'application cliente d'effacer sa file d'attente audio et d'arrêter immédiatement la lecture, créant ainsi une expérience conversationnelle réactive.
Une fois la génération audio terminée (ou interrompue par une barge-in), Amazon Nova Sonic fournit une réponse textuelle supplémentaire contenant une transcription au niveau de la phrase de ce qui a été réellement prononcé. Cette réponse textuelle inclut un contentStart
événement avec role:
"ASSISTANT"
et"additionalModelFields":
"{\"generationStage\":\"FINAL\"}"
.
Tout au long du traitement des réponses, usageEvent
des événements sont envoyés pour suivre la consommation de jetons. Ces événements contiennent des mesures détaillées sur les jetons d'entrée et de sortie (vocaux et textuels), ainsi que leurs totaux cumulés. Chacun usageEvent
conserve les mêmes sessionId
événements et promptName
les mêmes completionId
que les autres dans le flux de conversation. La section des détails fournit à la fois les modifications incrémentielles (delta) et le total cumulé de l'utilisation des jetons, ce qui permet un suivi précis de l'utilisation au cours de la conversation.
Le modèle envoie un completionEnd
événement avec les identifiants d'origine et un stopReason
qui indique comment la conversation s'est terminée. Cette hiérarchie d'événements permet à votre application de savoir quelles parties de la réponse vont de pair et de les traiter en conséquence, en maintenant le contexte de la conversation pendant plusieurs tours.
Le flux d'événements en sortie commence par l'entrée dans la phase de génération de réponses. Il commence par la reconnaissance vocale automatique, sélectionne un outil à utiliser, transcrit le discours, génère du son, finalise la transcription et termine la session.

Flux d'événements de sortie
La structure du flux d'événements en sortie est décrite dans cette section.
-
UsageEvent
"event": { "usageEvent": { "completionId": "string", // unique identifier for completion "details": { "delta": { // incremental changes since last event "input": { "speechTokens": number, // input speech tokens "textTokens": number // input text tokens }, "output": { "speechTokens": number, // speech tokens generated "textTokens": number // text tokens generated } }, "total": { // cumulative counts "input": { "speechTokens": number, // total speech tokens processed "textTokens": number // total text tokens processed }, "output": { "speechTokens": number, // total speech tokens generated "textTokens": number // total text tokens generated } } }, "promptName": "string", // same unique identifier from promptStart event "sessionId": "string", // unique identifier "totalInputTokens": number, // cumulative input tokens "totalOutputTokens": number, // cumulative output tokens "totalTokens": number // total tokens in the session } }
-
CompleteStartEvent
"event": { "completionStart": { "sessionId": "string", // unique identifier "promptName": "string", // same unique identifier from promptStart event "completionId": "string", // unique identifier } }
-
TextOutputContent
-
ContentStart
"event": { "contentStart": { "additionalModelFields": "{\"generationStage\":\"FINAL\"}" | "{\"generationStage\":\"SPECULATIVE\"}", "sessionId": "string", // unique identifier "promptName": "string", // same unique identifier from promptStart event "completionId": "string", // unique identifier "contentId": "string", // unique identifier for the content block "type": "TEXT", "role": "USER" | "ASSISTANT", "textOutputConfiguration": { "mediaType": "text/plain" } } }
-
TextOutput
"event": { "textOutput": { "sessionId": "string", // unique identifier "promptName": "string", // same unique identifier from promptStart event "completionId": "string", // unique identifier "contentId": "string", // same unique identifier from its contentStart "content": "string" // User transcribe or Text Response } }
-
ContentEnd
"event": { "contentEnd": { "sessionId": "string", // unique identifier "promptName": "string", // same unique identifier from promptStart event "completionId": "string", // unique identifier "contentId": "string", // same unique identifier from its contentStart "stopReason": "PARTIAL_TURN" | "END_TURN" | "INTERRUPTED", "type": "TEXT" } }
-
-
ToolUse
-
ContentStart
"event": { "contentStart": { "sessionId": "string", // unique identifier "promptName": "string", // same unique identifier from promptStart event "completionId": "string", // unique identifier "contentId": "string", // unique identifier for the content block "type": "TOOL", "role": "TOOL", "toolUseOutputConfiguration": { "mediaType": "application/json" } } }
-
ToolUse
"event": { "toolUse": { "sessionId": "string", // unique identifier "promptName": "string", // same unique identifier from promptStart event "completionId": "string", // unique identifier "contentId": "string", // same unique identifier from its contentStart "content": "json", "toolName": "string", "toolUseId": "string" } }
-
ContentEnd
"event": { "contentEnd": { "sessionId": "string", // unique identifier "promptName": "string", // same unique identifier from promptStart event "completionId": "string", // unique identifier "contentId": "string", // same unique identifier from its contentStart "stopReason": "TOOL_USE", "type": "TOOL" } }
-
-
AudioOutputContent
-
ContentStart
"event": { "contentStart": { "sessionId": "string", // unique identifier "promptName": "string", // same unique identifier from promptStart event "completionId": "string", // unique identifier "contentId": "string", // unique identifier for the content block "type": "AUDIO", "role": "ASSISTANT", "audioOutputConfiguration": { "mediaType": "audio/lpcm", "sampleRateHertz": 8000 | 16000 | 24000, "sampleSizeBits": 16, "encoding": "base64", "channelCount": 1 } } }
-
AudioOutput
"event": { "audioOutput": { "sessionId": "string", // unique identifier "promptName": "string", // same unique identifier from promptStart event "completionId": "string", // unique identifier "contentId": "string", // same unique identifier from its contentStart "content": "base64EncodedAudioData", // Audio } }
-
ContentEnd
"event": { "contentEnd": { "sessionId": "string", // unique identifier "promptName": "string", // same unique identifier from promptStart event "completionId": "string", // unique identifier "contentId": "string", // same unique identifier from its contentStart "stopReason": "PARTIAL_TURN" | "END_TURN", "type": "AUDIO" } }
-
-
CompletionEndEvent
"event": { "completionEnd": { "sessionId": "string", // unique identifier "promptName": "string", // same unique identifier from promptStart event "completionId": "string", // unique identifier "stopReason": "END_TURN" } }