

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

# Menangani peristiwa masukan dengan API dua arah
<a name="input-events"></a>

**catatan**  
Dokumentasi ini untuk Amazon Nova Versi 1. Untuk panduan Amazon Nova 2 Sonic, kunjungi [Menangani peristiwa masukan dengan API dua arah](https://docs.aws.amazon.com/nova/latest/nova2-userguide/sonic-input-events.html).

API Stream dua arah menggunakan arsitektur berbasis peristiwa dengan peristiwa input dan output terstruktur. Memahami urutan acara yang benar sangat penting untuk menerapkan aplikasi percakapan yang sukses dan mempertahankan status percakapan yang tepat selama interaksi.

Percakapan Nova Sonic mengikuti urutan peristiwa terstruktur. Anda mulai dengan mengirimkan `sessionStart` peristiwa yang berisi parameter konfigurasi inferensi, seperti batas suhu dan token. Selanjutnya, Anda mengirim `promptStart` untuk menentukan format output audio dan konfigurasi alat, menetapkan `promptName` pengidentifikasi unik yang harus disertakan dalam semua acara berikutnya.

Untuk setiap jenis interaksi (prompt sistem, audio, dan sebagainya), Anda mengikuti pola tiga bagian: gunakan `contentStart` untuk menentukan jenis konten dan peran konten (`SYSTEM`,,,`TOOL`) `USER``ASSISTANT`, lalu berikan peristiwa konten yang sebenarnya, dan selesaikan dengan `contentEnd` untuk menutup segmen itu. `contentStart`Acara ini menentukan apakah Anda mengirim hasil alat, streaming audio, atau prompt sistem. `contentStart`Acara ini mencakup `contentName` pengenal unik.

Riwayat percakapan hanya dapat disertakan sekali, setelah prompt sistem dan sebelum streaming audio dimulai. Ini mengikuti `contentEnd` pola`contentStart`/`textInput`/yang sama. `ASSISTANT`Peran `USER` dan harus didefinisikan dalam `contentStart` acara untuk setiap pesan historis. Ini memberikan konteks penting untuk percakapan saat ini tetapi harus diselesaikan sebelum masukan pengguna baru dimulai.

Streaming audio beroperasi dengan pengambilan sampel mikrofon kontinu. Setelah mengirim inisiasi`contentStart`, bingkai audio (masing-masing sekitar 32 ms) ditangkap langsung dari mikrofon dan segera dikirim sebagai `audioInput` acara menggunakan yang sama`contentName`. Sampel audio ini harus dialirkan secara real-time saat ditangkap, mempertahankan irama pengambilan sampel mikrofon alami selama percakapan. Semua bingkai audio berbagi satu wadah konten hingga percakapan berakhir dan ditutup secara eksplisit.

Setelah percakapan berakhir atau perlu dihentikan, penting untuk menutup semua aliran terbuka dengan benar dan mengakhiri sesi dalam urutan yang benar. Untuk mengakhiri sesi dengan benar dan menghindari kebocoran sumber daya, Anda harus mengikuti urutan penutupan tertentu:

1. Tutup semua aliran audio yang terbuka dengan `contentEnd` acara tersebut.

1. Kirim `promptEnd` acara yang mereferensikan aslinya`promptName`.

1. Kirim `sessionEnd` acara.

Melewatkan salah satu acara penutupan ini dapat mengakibatkan percakapan yang tidak lengkap atau sumber daya yatim piatu.

Pengidentifikasi ini membuat struktur hierarkis: `promptName` mengikat semua peristiwa percakapan bersama-sama, sementara masing-masing `contentName` menandai batas-batas blok konten tertentu. Hirarki ini memastikan bahwa model mempertahankan konteks yang tepat di seluruh interaksi.

![\[Diagram yang menjelaskan alur peristiwa input Amazon Nova Sonic.\]](http://docs.aws.amazon.com/id_id/nova/latest/userguide/images/input-events.png)


## Alur acara masukan
<a name="input-event-flow"></a>

Struktur aliran peristiwa masukan disediakan di bagian ini.

1. `RequestStartEvent`

   ```
   {
       "event": {
           "sessionStart": {
               "inferenceConfiguration": {
                   "maxTokens": "int",
                   "topP": "float",
                   "temperature": "float"
               }
           }
       }
   }
   ```

1. `PromptStartEvent`

   ```
   {
       "event": {
           "promptStart": {
               "promptName": "string", // unique identifier same across all events i.e. UUID
               "textOutputConfiguration": {
                   "mediaType": "text/plain"
               },
               "audioOutputConfiguration": {
                   "mediaType": "audio/lpcm",
                   "sampleRateHertz": 8000 | 16000 | 24000,
                   "sampleSizeBits": 16,
                   "channelCount": 1,
                   "voiceId": "matthew" | "tiffany" | "amy" |
                           "lupe" | "carlos" | "ambre" | "florian" |
                           "greta" | "lennart" | "beatrice" | "lorenzo",
                   "encoding": "base64",
                   "audioType": "SPEECH",
               },
               "toolUseOutputConfiguration": {
                   "mediaType": "application/json"
               },
               "toolConfiguration": {
                   "tools": [{
                       "toolSpec": {
                           "name": "string",
                           "description": "string",
                           "inputSchema": {
                               "json": "{}"
                           }
                       }
                   }]
               }
           }
       }
   }
   ```

1. `InputContentStartEvent`
   + `Text`

     ```
     {
         "event": {
             "contentStart": {
                 "promptName": "string", // same unique identifier from promptStart event
                 "contentName": "string", // unique identifier for the content block
                 "type": "TEXT",
                 "interactive": false,
                 "role": "SYSTEM" | "USER" | "ASSISTANT",
                 "textInputConfiguration": {
                     "mediaType": "text/plain"
                 }
             }
         }
     }
     ```
   + `Audio`

     ```
     {
         "event": {
             "contentStart": {
                 "promptName": "string", // same unique identifier from promptStart event
                 "contentName": "string", // unique identifier for the content block
                 "type": "AUDIO",
                 "interactive": true,
                 "role": "USER",
                 "audioInputConfiguration": {
                     "mediaType": "audio/lpcm",
                     "sampleRateHertz": 8000 | 16000 | 24000,
                     "sampleSizeBits": 16,
                     "channelCount": 1,
                     "audioType": "SPEECH",
                     "encoding": "base64"
                 }
             }
         }
     }
     ```
   + `Tool`

     ```
     {
         "event": {
             "contentStart": {
                 "promptName": "string", // same unique identifier from promptStart event
                 "contentName": "string", // unique identifier for the content block
                 "interactive": false,
                 "type": "TOOL",
                 "role": "TOOL",
                 "toolResultInputConfiguration": {
                     "toolUseId": "string", // existing tool use id
                     "type": "TEXT",
                     "textInputConfiguration": {
                         "mediaType": "text/plain"
                     }
                 }
             }
         }
     }
     ```

1. `TextInputContent`

   ```
   {
       "event": {
           "textInput": {
               "promptName": "string", // same unique identifier from promptStart event
               "contentName": "string", // unique identifier for the content block
               "content": "string"
           }
       }
   }
   ```

1. `AudioInputContent`

   ```
   {
       "event": {
           "audioInput": {
               "promptName": "string", // same unique identifier from promptStart event
               "contentName": "string", // same unique identifier from its contentStart
               "content": "base64EncodedAudioData"
           }
       }
   }
   ```

1. `ToolResultContentEvent`

   ```
   "event": {
       "toolResult": {
           "promptName": "string", // same unique identifier from promptStart event
           "contentName": "string", // same unique identifier from its contentStart
           "content": "{\"key\": \"value\"}" // stringified JSON object as a tool result 
       }
   }
   ```

1. `InputContentEndEvent`

   ```
   {
       "event": {
           "contentEnd": {
               "promptName": "string", // same unique identifier from promptStart event
               "contentName": "string" // same unique identifier from its contentStart
           }
       }
   }
   ```

1. `PromptEndEvent`

   ```
   {
       "event": {
           "promptEnd": {
               "promptName": "string" // same unique identifier from promptStart event
           }
       }
   }
   ```

1. `RequestEndEvent`

   ```
   {
       "event": {
           "sessionEnd": {}
       }
   }
   ```