

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Mengelola riwayat obrolan
<a name="sonic-chat-history"></a>

Respons Amazon Nova 2 Sonic mencakup transkrip ASR (Automatic Speech Recognition) untuk suara pengguna dan asisten. Menyimpan riwayat obrolan adalah praktik terbaik—tidak hanya untuk tujuan pencatatan tetapi juga untuk melanjutkan sesi ketika koneksi tiba-tiba ditutup. Hal ini memungkinkan klien untuk mengirim konteks kembali ke Nova Sonic untuk melanjutkan percakapan dengan mulus.

Lihat sumber daya berikut untuk informasi selengkapnya tentang mengelola riwayat obrolan:

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

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

## Mengirim riwayat obrolan
<a name="sonic-chat-history-sending"></a>

Riwayat percakapan hanya dapat disertakan sekali, setelah prompt sistem/ucapan dan sebelum streaming audio dimulai. Riwayat obrolan keseluruhan tidak boleh lebih besar dari 40KB. Diagram berikut menunjukkan kapan riwayat obrolan diteruskan selama siklus hidup acara:

![\[alt text not found\]](http://docs.aws.amazon.com/id_id/nova/latest/nova2-userguide/images/Sending-Chat-History_4.png)


Setiap pesan sejarah membutuhkan tiga peristiwa:`contentStart`, `textInput` dan`contentEnd`.

**Skema acara per pesan:**
+ `contentStart`- Mendefinisikan peran pesan dan konfigurasi

  ```
  {
    "event": {
      "contentStart": {
        "promptName": "<prompt-id>",
        "contentName": "<content-id>",
        "type": "TEXT",
        "interactive": true,
        "role": "ASSISTANT",
        "textInputConfiguration": {
          "mediaType": "text/plain"
        }
      }
    }
  }
  ```
+ `textInput`- Berisi konten pesan yang sebenarnya. Satu TextInput tidak boleh lebih besar dari 1KB. Jika demikian, bagi menjadi beberapa TextInputs di blok konten yang sama. Jika percakapan lebih besar dari 40KB, potong riwayat obrolan secara keseluruhan.

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

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

Ulangi ketiga peristiwa ini untuk setiap pesan dalam riwayat obrolan Anda, bergantian antara peran USER dan ASSISTANT.

**Pertimbangan penting:**
+ Riwayat obrolan hanya dapat disertakan **sekali** per sesi
+ Riwayat obrolan harus dikirim **setelah prompt sistem** dan **sebelum streaming audio dimulai**
+ Semua pesan historis harus dikirim sebelum memulai streaming audio
+ Setiap pesan harus menentukan peran USER atau ASSISTANT
+ Gunakan konten transkrip yang disimpan dari peristiwa TextOutput sebagai nilai konten di TextInput

## Menerima transkrip ASR
<a name="sonic-chat-history-receiving"></a>

Selama percakapan, Amazon Nova 2 Sonic mengirimkan transkrip ASR melalui acara keluaran. Setiap transkrip dikirimkan sebagai urutan dari tiga peristiwa: ContentStart, TextOutput, dan ContentEnd.

**Contoh: Transkrip ucapan pengguna:**

1. ContentStart - Menunjukkan awal transkrip:

```
{
  "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 - Berisi konten transkrip yang sebenarnya:

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

3. ContentEnd - Menandai akhir transkrip:

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

 Pola tiga peristiwa yang sama berlaku untuk peran USER dan ASSISTANT. Ekstrak `content` bidang dari `textOutput` acara dan `role` bidang dari `contentStart` acara untuk membangun riwayat obrolan Anda.

## Praktik terbaik
<a name="sonic-chat-history-best-practices"></a>

Selalu simpan riwayat obrolan untuk mengaktifkan:
+ Dimulainya kembali sesi di seluruh perangkat yang berbeda
+ Pencatatan dan audit percakapan
+ Pelestarian konteks untuk interaksi tindak lanjut

Penting: Saat menyimpan riwayat obrolan, gunakan output teks berdasarkan GenerationStage mereka:
+ Spekulatif - Pratinjau dari apa yang direncanakan Nova 2 Sonic, dihasilkan sebelum sintesis audio dimulai
+ Final - Transkripsi tingkat kalimat aktual dari apa yang diucapkan dalam respons audio

Selalu simpan output teks FINAL ke riwayat obrolan Anda, karena ini mewakili catatan percakapan yang akurat.

Contoh output FINAL (simpan ini ke riwayat obrolan):

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

Contoh output SPEKULATIF (pratinjau opsional, bukan untuk riwayat):

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