

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Gestione della cronologia chat
<a name="sonic-chat-history"></a>

Le risposte di Amazon Nova 2 Sonic includono trascrizioni ASR (Automatic Speech Recognition) per le voci degli utenti e degli assistenti. La memorizzazione della cronologia chat è una buona pratica, non solo per scopi di registrazione, ma anche per riprendere le sessioni quando la connessione viene chiusa inaspettatamente. Ciò consente al client di inviare il contesto a Nova Sonic per continuare la conversazione senza interruzioni.

Per ulteriori informazioni sulla gestione della cronologia chat, consulta le seguenti risorse:

1. [Registrazione della cronologia chat](https://github.com/aws-samples/amazon-nova-samples/tree/main/speech-to-speech/amazon-nova-2-sonic/repeatable-patterns/chat-history-logger)

1. [Ripresa delle conversazioni](https://github.com/aws-samples/amazon-nova-samples/tree/main/speech-to-speech/repeatable-patterns/resume-conversation)

## Invio della cronologia chat
<a name="sonic-chat-history-sending"></a>

La cronologia delle conversazioni può essere inclusa solo una volta, dopo la system/speech richiesta e prima dell'inizio dello streaming audio. La cronologia complessiva della chat non può superare i 40 KB. Il diagramma seguente mostra quando la cronologia chat viene trasmessa durante il ciclo di vita dell'evento:

![Cronologia chat inviata dal client a Bedrock, inserita tra il prompt di sistema e lo streaming audio.](http://docs.aws.amazon.com/it_it/nova/latest/nova2-userguide/images/Sending-Chat-History_4.png)


Ogni messaggio storico richiede tre eventi:`contentStart`, `textInput` e. `contentEnd`

**Schema degli eventi per messaggio:**
+ `contentStart`- Definisce il ruolo e la configurazione del messaggio

  ```
  {
    "event": {
      "contentStart": {
        "promptName": "<prompt-id>",
        "contentName": "<content-id>",
        "type": "TEXT",
        "interactive": true,
        "role": "ASSISTANT",
        "textInputConfiguration": {
          "mediaType": "text/plain"
        }
      }
    }
  }
  ```
+ `textInput`- Contiene il contenuto effettivo del messaggio. Un TextInput non può essere più grande di 1 KB. In tal caso, suddividilo in più TextInput nello stesso blocco di contenuto. Se la conversazione supera i 40 KB, taglia la cronologia generale della chat.

  ```
  {
    "event": {
      "textInput": {
        "promptName": "<prompt-id>",
        "contentName": "<content-id>",
        "content": "Take your time, Don. I'll be here when you're ready."
      }
    }
  }
  ```
+ `contentEnd`- Segna la fine del messaggio

  ```
  {
    "event": {
      "contentEnd": {
        "promptName": "<prompt-id>",
        "contentName": "<content-id>"
      }
    }
  }
  ```

Ripeti questi tre eventi per ogni messaggio nella cronologia chat, alternando i ruoli UTENTE e ASSISTENTE.

**Considerazioni importanti:**
+ La cronologia chat può essere inclusa solo **una volta** per sessione
+ La cronologia chat deve essere inviata **dopo la richiesta del sistema** e **prima dell'inizio dello streaming audio**
+ Tutti i messaggi storici devono essere inviati prima di iniziare lo streaming audio
+ Ogni messaggio deve specificare il ruolo USER o ASSISTANT
+ Utilizza il contenuto della trascrizione memorizzato dagli eventi TextOutput come valore del contenuto in TextInput

## Ricezione di trascrizioni ASR
<a name="sonic-chat-history-receiving"></a>

Durante una conversazione, Amazon Nova 2 Sonic invia trascrizioni ASR tramite eventi di output. Ogni trascrizione viene fornita come una sequenza di tre eventi: contentStart, textOutput e contentEnd.

**Esempio: trascrizione vocale dell'utente:**

1. contentStart: indica l'inizio di una trascrizione:

```
{
  "event": {
    "contentStart": {
      "additionalModelFields": "{\"generationStage\":\"FINAL\"}",
      "completionId": "<completion-id>",
      "contentId": "<content-id>",
      "promptName": "<prompt-id>",
      "role": "USER",
      "sessionId": "<session-id>",
      "textOutputConfiguration": {
        "mediaType": "text/plain"
      },
      "type": "TEXT"
    }
  }
}
```

2. TextOutput: contiene il contenuto effettivo della trascrizione:

```
{
  "event": {
    "textOutput": {
      "completionId": "<completion-id>",
      "content": "hello how are you",
      "contentId": "<content-id>",
      "promptName": "<prompt-id>",
      "role": "USER",
      "sessionId": "<session-id>"
    }
  }
}
```

3. contentEnd - Segna la fine della trascrizione:

```
{
  "event": {
    "contentEnd": {
      "completionId": "<completion-id>",
      "contentId": "<content-id>",
      "promptName": "<prompt-id>",
      "sessionId": "<session-id>",
      "stopReason": "PARTIAL_TURN",
      "type": "TEXT"
    }
  }
}
```

 Lo stesso schema a tre eventi si applica sia ai ruoli USER che ASSISTANT. Estrai il `content` campo dall'`textOutput`evento e il `role` campo dall'`contentStart`evento per creare la cronologia chat.

## Best practice
<a name="sonic-chat-history-best-practices"></a>

Memorizza sempre la cronologia chat per abilitare:
+ Riprese delle sessioni su diversi dispositivi
+ Registrazione e controllo delle conversazioni
+ Conservazione del contesto per le interazioni successive

Importante: quando salvate la cronologia delle chat, utilizzate gli output di testo basati sul relativo GenerationStage:
+ Speculativo: un'anteprima di ciò che Nova 2 Sonic intende dire, generato prima dell'inizio della sintesi audio
+ Finale: l'effettiva trascrizione a livello di frase di ciò che è stato pronunciato nella risposta audio

Salva sempre il testo FINALE in uscita nella cronologia chat, poiché rappresenta la registrazione accurata della conversazione.

Esempio di output FINALE (salvalo nella cronologia chat):

```
ContentStart event: { 
  "additionalModelFields": "{\"generationStage\":\"FINAL\"}", 
  "completionId": "<completion-id>", 
  "contentId": "<content-id>", 
  "role": "ASSISTANT", 
  "sessionId": "<session-id>", 
  "type": "TEXT" 
}
```

Esempio di output SPECULATIVO (anteprima opzionale, non per la cronologia):

```
ContentStart event: { 
  "additionalModelFields": "{\"generationStage\":\"SPECULATIVE\"}", 
  "completionId": "<completion-id>", 
  "contentId": "<content-id>", 
  "role": "ASSISTANT", 
  "sessionId": "<session-id>", 
  "type": "TEXT" 
}
```