

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Behandlung von Eingabeereignissen mit der bidirektionalen API
<a name="sonic-input-events"></a>

Die bidirektionale Stream-API verwendet eine ereignisgesteuerte Architektur mit strukturierten Eingabe- und Ausgabeereignissen. Das Verständnis der richtigen Reihenfolge der Ereignisse ist entscheidend für die Implementierung erfolgreicher Konversationsanwendungen und die Aufrechterhaltung des richtigen Konversationsstatus während der gesamten Interaktionen.

## -Übersicht
<a name="sonic-input-overview"></a>

Die Nova-Sonic-Konversation folgt einer strukturierten Ereignissequenz. Sie senden zunächst ein `sessionStart`-Ereignis, das die Konfigurationsparameter der Inferenz wie Temperatur- und Token-Grenzwerte enthält. Anschließend senden Sie `promptStart`, um das Audioausgabeformat und die Toolkonfigurationen zu definieren, und weisen eine eindeutige `promptName`-ID zu, die in allen nachfolgenden Ereignissen enthalten sein muss.

Für jeden Interaktionstyp (Systemaufforderung, Audio usw.) folgen Sie einem dreiteiligen Muster: Definieren Sie `contentStart` damit den Inhaltstyp und die Rolle des Inhalts (`SYSTEM`,,,,`SYSTEM_SPEECH`) `USER` `ASSISTANT``TOOL`, geben Sie dann das eigentliche Inhaltsereignis an und schließen Sie mit, `contentEnd` um das Segment zu schließen. Das `contentStart`-Ereignis gibt an, ob Sie Toolergebnisse, Streaming-Audio oder einen System-Prompt senden. Das `contentStart`-Ereignis enthält eine eindeutige `contentName`-ID.

## Verlauf der Konversationen
<a name="sonic-conversation-history"></a>

Ein Konversationsverlauf kann nur einmal hinzugefügt werden, nämlich nach dem System-Prompt und bevor das Audio-Streaming beginnt. Er folgt demselben `contentStart`/`textInput`/`contentEnd`-Muster. Die Rollen `USER` und `ASSISTANT` müssen im `contentStart`-Ereignis für jede historische Nachricht definiert werden. Dies bietet einen wichtigen Kontext für die aktuelle Konversation, muss jedoch abgeschlossen sein, bevor eine neue Benutzereingabe beginnt.

## Audio-Streaming
<a name="sonic-audio-streaming"></a>

Das Audio-Streaming arbeitet mit kontinuierlicher Mikrofonabtastung. Nach dem Senden eines ersten `contentStart`, werden Audioframes (jeweils ca. 32 ms) direkt vom Mikrofon aufgenommen und mit demselben `contentName` sofort als `audioInput`-Ereignisse gesendet. Diese Audiosamples sollten in Echtzeit gestreamt werden, sobald sie aufgenommen werden, wobei die natürliche Abtastkadenz des Mikrofons während des gesamten Gesprächs beibehalten werden sollte. Alle Audioframes teilen sich einen einzigen Inhaltscontainer, bis die Konversation endet und dieser explizit geschlossen wird.

## Die Sitzung wird geschlossen
<a name="sonic-closing-session"></a>

Nach Beendigung oder Abbruch des Gesprächs ist es unerlässlich, alle offenen Streams ordnungsgemäß zu schließen und die Sitzung in der richtigen Reihenfolge zu beenden. Um eine Sitzung ordnungsgemäß zu beenden und Ressourcenlecks zu vermeiden, müssen Sie eine bestimmte Schlusssequenz befolgen:
+ Schließen Sie alle geöffneten Audio-Streams mit dem `contentEnd`-Ereignis.
+ Senden Sie ein `promptEnd`-Ereignis, das auf den Original-`promptName` verweist.
+ Senden Sie das `sessionEnd`-Ereignis.

Wenn Sie eines dieser abschließenden Ereignisse überspringen, kann dies zu unvollständigen Konversationen oder verwaisten Ressourcen führen.

Diese Identifikatoren bilden eine hierarchische Struktur: Der `promptName` verbindet alle Konversationsereignisse miteinander, während jeder einzelne `contentName` die Grenzen bestimmter Inhaltsblöcke markiert. Diese Hierarchie stellt sicher, dass das Modell während der gesamten Interaktion den richtigen Kontext beibehält.

![](http://docs.aws.amazon.com/de_de/nova/latest/nova2-userguide/images/Closing-the-session_2.png)


## Ablauf des Eingabeereignisses
<a name="sonic-input-event-flow"></a>

In diesem Abschnitt wird die Struktur des Ablaufs der Eingabeereignisse erläutert.

### 1. RequestStartEvent (Beginn der Sitzung)
<a name="sonic-session-start-event"></a>

Das Sitzungsstartereignis initialisiert die Konversation mit den Einstellungen für die Inferenzkonfiguration und die Erkennung von Abbiegungen.

**Konfiguration der Inferenz:**
+ `maxTokens`: Maximale Anzahl von Token, die in der Antwort generiert werden sollen
+ `topP`: Nukleus-Probenahmeparameter (0,0 bis 1,0) zur Steuerung der Zufälligkeit
+ `temperature`: Steuert die Zufälligkeit bei der Generierung (0,0 bis 1,0)

**Konfiguration der Abbiegerkennung:** Der `endpointingSensitivity` Parameter steuert, wie schnell Nova Sonic erkennt, wenn ein Benutzer mit dem Sprechen fertig ist:
+ `HIGH`: Erkennt Pausen schnell und ermöglicht so schnellere Reaktionen, kann aber dazu führen, dass langsamere Lautsprecher ausgeschaltet werden
+ `MEDIUM`: Ausgewogene Empfindlichkeit für die meisten Konversationsszenarien (empfohlene Standardeinstellung)
+ `LOW`: Wartet länger, bis das Ende der Rede erkannt wird. Dies ist besser für nachdenkliche oder zögernde Sprecher

```
{
    "event": {
        "sessionStart": {
            "inferenceConfiguration": {
                "maxTokens": "int",
                "topP": "float",
                "temperature": "float"
            },
            "turnDetectionConfiguration": {
                "endpointingSensitivity": "HIGH" | "MEDIUM" | "LOW"
            }
        }
    }
}
```

**Beispiel:**

```
{
    "event": {
        "sessionStart": {
            "inferenceConfiguration": {
                "maxTokens": 2048,
                "topP": 0.9,
                "temperature": 0.7
            },
            "turnDetectionConfiguration": {
                "endpointingSensitivity": "MEDIUM"
            }
        }
    }
}
```

### 2. PromptStartEvent
<a name="sonic-prompt-start-event"></a>

Das Ereignis zum Starten der Aufforderung definiert die Konversationskonfiguration, einschließlich der Ausgabeformate, der Sprachauswahl und der verfügbaren Tools.

Eine Liste der verfügbaren Sprach-IDs finden Sie unter [Sprachunterstützung und mehrsprachige Funktionen](https://docs.aws.amazon.com/nova/latest/nova2-userguide/sonic-language-support.html)

```
{
    "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" | "olivia" | "lupe" | "carlos" | "ambre" | "florian" | "lennart" | "beatrice" | "lorenzo" |
                        "tina" | "carolina" | "leo" | "kiara" | "arjun",
                "encoding": "base64",
                "audioType": "SPEECH"
            },
            "toolUseOutputConfiguration": {
                "mediaType": "application/json"
            },
            "toolConfiguration": {
                "tools": [
                    {
                        "toolSpec": {
                            "name": "string",
                            "description": "string",
                            "inputSchema": {
                                "json": "{}"
                            }
                        }
                    }
                ]
            }
        }
    }
}
```

### 3. InputContentStartEvent
<a name="sonic-content-start-event"></a>

#### Text
<a name="sonic-content-start-text"></a>

Das Startereignis für Textinhalte wird für Systemaufforderungen, den Konversationsverlauf und die modalübergreifende Texteingabe verwendet.

**Interaktiver Parameter:**
+ `true`: Ermöglicht modalübergreifende Eingabe und ermöglicht Textnachrichten während einer aktiven Sprachsitzung
+ `false`: Standardtexteingabe für Systemaufforderungen und Gesprächsverlauf

**Rollentypen:**
+ `SYSTEM`: Systemanweisungen und Eingabeaufforderungen
+ `USER`: Benutzernachrichten im Konversationsverlauf oder modalübergreifende Eingabe
+ `ASSISTANT`: Antworten des Assistenten im Konversationsverlauf
+ `SYSTEM_SPEECH`: Steuert die Transkriptionsformatierung für die Umschaltung zwischen Hindi-Codes (Skripte) Latin/Devanagari/mixed 

```
{
    "event": {
        "contentStart": {
            "promptName": "string", // same unique identifier from promptStart event
            "contentName": "string", // unique identifier for the content block
            "type": "TEXT",
            "interactive": "boolean", // true for cross-modal input
            "role": "SYSTEM" | "USER" | "ASSISTANT" | "TOOL" | "SYSTEM_SPEECH",
            "textInputConfiguration": {
                "mediaType": "text/plain"
            }
        }
    }
}
```

**Beispiel — Systemaufforderung:**

```
{
    "event": {
        "contentStart": {
            "promptName": "conv-12345",
            "contentName": "system-prompt-1",
            "type": "TEXT",
            "interactive": false,
            "role": "SYSTEM",
            "textInputConfiguration": {
                "mediaType": "text/plain"
            }
        }
    }
}
```

**Beispiel — Cross-modal Eingabe:**

```
{
    "event": {
        "contentStart": {
            "promptName": "conv-12345",
            "contentName": "user-text-1",
            "type": "TEXT",
            "interactive": true,
            "role": "USER",
            "textInputConfiguration": {
                "mediaType": "text/plain"
            }
        }
    }
}
```

#### Audio
<a name="sonic-content-start-audio"></a>

```
{
    "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
<a name="sonic-content-start-tool"></a>

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

### 4. TextInputContent
<a name="sonic-text-input-event"></a>

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

### 5. AudioInputContent
<a name="sonic-audio-input-event"></a>

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

### 6. ToolResultContentEvent
<a name="sonic-tool-result-event"></a>

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

### 7. InputContentEndEvent
<a name="sonic-content-end-event"></a>

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

### 8. PromptEndEvent
<a name="sonic-prompt-end-event"></a>

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

### 9. RequestEndEvent
<a name="sonic-session-end-event"></a>

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