Gestion des événements de sortie avec l'API bidirectionnelle - Amazon Nova

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 sessionIdpromptName, 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.

Schéma expliquant le flux d'événements de sortie d'Amazon Nova Sonic.

Flux d'événements de sortie

La structure du flux d'événements en sortie est décrite dans cette section.

  1. 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 } }
  2. CompleteStartEvent

    "event": { "completionStart": { "sessionId": "string", // unique identifier "promptName": "string", // same unique identifier from promptStart event "completionId": "string", // unique identifier } }
  3. 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" } }
  4. ToolUse

    1. 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" } } }
    2. 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" } }
    3. 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" } }
  5. AudioOutputContent

    1. 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 } } }
    2. 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 } }
    3. 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" } }
  6. CompletionEndEvent

    "event": { "completionEnd": { "sessionId": "string", // unique identifier "promptName": "string", // same unique identifier from promptStart event "completionId": "string", // unique identifier "stopReason": "END_TURN" } }