

# 双方向 API を使用した入力イベントの処理
<a name="input-events"></a>

**注記**  
このドキュメントは Amazon Nova バージョン 1 を対象としています。Amazon Nova 2 Sonic ガイドについては、「[双方向 API を使用した入力イベントの処理](https://docs.aws.amazon.com/nova/latest/nova2-userguide/sonic-input-events.html)」を参照してください。

双方向 Stream API は、構造化された入出力イベントを持つイベント駆動型アーキテクチャを使用します。会話型アプリケーションを正常に実装し、インタラクション全体を通して適切な会話状態を維持するには、正しいイベントの順序を理解することが不可欠です。

Nova Sonic の会話は、構造化されたイベントシーケンスに従います。まず、temperature やトークンの制限などの推論設定パラメータを含む `sessionStart` イベントを送信します。次に、`promptStart` を送信してオーディオ出力形式とツール設定を定義し、後続のすべてのイベントに含める必要がある一意の `promptName` 識別子を割り当てます。

インタラクションタイプ (システムプロンプト、オーディオなど) ごとに、3 つの部分からなるパターンに従います。`contentStart` を使用してコンテンツタイプとコンテンツのロール (`SYSTEM`、`USER`、`ASSISTANT`、`TOOL`) を定義し、実際のコンテンツイベントを指定し、`contentEnd` で終了してそのセグメントを閉じます。`contentStart` イベントは、ツールの結果を送信するか、オーディオをストリーミングするか、システムプロンプトを送信するかを指定します。`contentStart` イベントに固有の `contentName` 識別子。

会話履歴は、システムプロンプトの後、音声ストリーミングが開始される前に 1 回のみ含めることができます。同じ `contentStart`/`textInput`/`contentEnd` のパターンに従います。`USER` および `ASSISTANT` ロールは、履歴メッセージごとに `contentStart` イベントで定義する必要があります。これにより、現在の会話に不可欠なコンテキストが提供されますが、新しいユーザー入力が開始される前に完了する必要があります。

オーディオストリーミングは、継続的なマイクサンプリングで動作します。最初の `contentStart` を送信した後、オーディオフレーム (それぞれ約 32 ミリ秒) はマイクから直接キャプチャされ、同じ `contentName` を使用してすぐに `audioInput` イベントとして送信されます。これらのオーディオサンプルは、キャプチャ時にリアルタイムでストリーミングし、会話全体で自然なマイクサンプリング頻度を維持する必要があります。すべてのオーディオフレームは、会話が終了して明示的に閉じられるまで、単一のコンテンツコンテナを共有します。

会話が終了した後、または終了する必要がある場合は、開いているすべてのストリームを適切に閉じ、セッションを正しい順序で終了することが重要です。セッションを適切に終了し、リソースリークを回避するには、特定の終了シーケンスに従う必要があります。

1. `contentEnd` イベントで開いているオーディオストリームをすべて閉じます。

1. 元の `promptName` を参照する `promptEnd` イベントを送信します。

1. `sessionEnd` イベントを送信します。

これらの終了イベントのいずれかをスキップすると、不完全な会話や孤立したリソースが発生する可能性があります。

これらの識別子は階層構造を作成します。`promptName` はすべての会話イベントを結び付け、それぞれの `contentName` は特定のコンテンツブロックの境界を示します。この階層により、モデルはインタラクション全体で適切なコンテキストを維持できます。

![\[Amazon Nova Sonic 入力イベントフローを説明する図。\]](http://docs.aws.amazon.com/ja_jp/nova/latest/userguide/images/input-events.png)


## 入力イベントフロー
<a name="input-event-flow"></a>

入力イベントフローの構造は、このセクションで説明します。

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": {}
       }
   }
   ```