Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel ist die vollständige Ereignisreferenz für GPT-Live. Eine aufgabenbasierte Anleitung finden Sie unter Verwenden von GPT-Live für Echtzeitstimme und Stellvertretungsarbeit in GPT-Live.
Basisnamespace
GPT-Live Sitzungen befinden sich unter /openai/v1/live Ihrem Foundry-Ressourcenendpunkt. Ein WebSocket-Client stellt eine Verbindung mit /openai/v1/live/sessions und sendet .session.start WebRTC-Sitzungen werden mit POST /openai/v1/live/sessions. Ein Server fügt eine Sidebandverbindung an./openai/v1/live/sessions/{session_id}/attach
Sitzungskonfiguration
Eine Sitzung beginnt mit einem strengen Konfigurationsobjekt, das unbekannte Felder ablehnt. Ein WebSocket-Client sendet ihn in session.start; Die WebRTC-Sitzungserstellung sendet sie als session Feld der Erstellungsanforderung. Beide geben model das Sitzungsobjekt an.
{
"model": "gpt-live-1",
"instructions": "Answer briefly and ask before taking an external action.",
"audio": {
"output": { "voice": "marin" }
},
"delegation": {
"type": "responses",
"responses": {
"model": "gpt-5.5",
"instructions": "Use tools when current information is required.",
"max_output_tokens": 2048,
"service_tier": "priority",
"reasoning": { "effort": "medium", "summary": "auto" },
"text": { "verbosity": "low" },
"tools": [
{ "type": "web_search" },
{
"type": "function",
"name": "get_weather",
"description": "Get current weather for a location.",
"parameters": {
"type": "object",
"properties": { "location": { "type": "string" } },
"required": ["location"],
"additionalProperties": false
}
}
],
"tool_choice": "auto",
"parallel_tool_calls": true
}
}
}
| Field | Hinweise |
|---|---|
model |
Required. Legen Sie das Sitzungsobjekt sowohl für die WebSocket session.start - als auch für die WebRTC-Erstellung fest. Nach dem Start unveränderlich. |
instructions |
Systemanweisungen. Unveränderlich nach dem Start; weitere hinzufügen mit session.instructions.append. |
audio.output.voice |
Ausgabestimme.
marin Der Standardwert ist nach dem Start unveränderlich. |
delegation |
Entweder { type: "client" } oder { type: "responses", responses: {...} }. Ausgelassen oder null ausgewählt Clientdelegierung. |
delegation.responses.service_tier |
Akzeptiert auto, , default, flexoder priority. |
delegation.responses.tools |
Funktionen und gehostete Tools, einschließlich web_search, die als gewöhnliche Tooleinträge konfiguriert sind. |
Aktualisieren einer Livesitzung
Nach dem Start session.update ist nur noch wenig vorhanden: Ausgelassene Felder behalten ihre aktuellen Werte bei, und nur delegation.responses Einstellungen können sich ändern. Delegierung wird als ein vollständiges Objekt ersetzt – geschachtelte Delegierungsfelder werden nicht unabhängig voneinander gepatcht. Die Startfelder model, instructions, inputund audio nicht aktualisieren Felder.
Ein erfolgreiches Update erzeugt session.updated mit der vollständigen öffentlichen Sitzungsressource. Erfolgreiche Bestätigungen echon event_idnicht; nur Fehler, die für Korrelation verwendet werden client_event_id .
Audioformat
WebSocket-Eingabe und -Ausgabe verwenden rohe, headerlose, mono, signierte 16-Bit-Little-End-PCM mit 24.000 Hz. Base64-codieren die unformatierten PCM-Bytes – keine WAV-Datei oder einen anderen Audiocontainer. Jedes Beispiel ist zwei Bytes, sodass die decodierte Nutzlast eine gerade Anzahl von Bytes enthalten muss.
In WebRTC verwendet Audio die ausgehandelte Medienspur anstelle von JSON-Audioereignissen und enthält keine JSON-Anzeigedauerfelder.
Clientereignisse
| Ereignis | Transport | Description |
|---|---|---|
session.start |
WebSocket | Sendet die anfängliche Sitzungskonfiguration und erzeugt session.started. |
session.update |
Beliebiger JSON-Stream | Wendet ein geringes Update auf delegation.responses und erzeugt session.updateddiese. |
session.input_audio.append |
Nur WebSocket | Fügt nicht leere Base64 PCM16-Monoaudio an. Nicht bestätigt. |
session.input_audio.mute / session.input_audio.unmute |
Beliebiger JSON-Stream | Stummschalten oder Aufheben der Stummschaltung der Anrufereingabe und erzeugt session.input_audio.muted / session.input_audio.unmuted. |
session.instructions.append |
Beliebiger JSON-Stream | Fügt vertrauenswürdige Anweisungen an und erzeugt session.instructions.appended. |
session.thinking.append |
Beliebiger JSON-Stream | Fügt stillen Kontext an und erzeugt session.thinking.appended. |
session.commentary.append |
Beliebiger JSON-Stream | Fügt Inhalt für das zu sprechende Und erzeugt session.commentary.appendeddas Modell an. |
response.item.create |
Beliebiger JSON-Stream | Sendet mit der Antwortdelegierung ein Funktionsergebnis oder eine Benutzernachricht für das Back-End. |
response.create |
Beliebiger JSON-Stream | Mit der Antwortdelegierung wird die Back-End-Antwort ausgeführt oder fortgesetzt. |
session.close |
Beliebiger JSON-Stream | Beginnt mit dem ordnungsgemäßen Herunterfahren, erzeugt session.closedund schließt dann den Transport. |
Die session.instructions.append, session.thinking.appendund session.commentary.append Ereignisse nehmen jeweils eine einfache Zeichenfolge content von bis zu 500 Token und eine erforderliche .delegation_id Wird null für den allgemeinen Sitzungskontext oder eine Clientdelegierungs-ID verwendet, um diese Aufgabe zu aktualisieren.
Serverereignisse
| Ereignis | Description |
|---|---|
session.started |
Startkonfiguration. |
session.updated |
Es wurde ein später spärlicher Update angewendet; enthält die vollständige öffentliche Sitzungsressource. |
session.output_audio.delta |
Zeitgesteuerte base64-codierte unformatierte mono 24 kHz signierte PCM16-Little-Endian-Ausgabeaudio (nur WebSocket). |
session.input_transcript.delta / session.output_transcript.delta |
Ein zeit- oder ausgabefähiges Transkriptfragment. |
session.instructions.appended / session.thinking.appended / session.commentary.appended |
Eine Kontextanfügung wurde zur Einfügung akzeptiert. |
session.input_audio.muted / session.input_audio.unmuted |
Ein Befehl zum Stummschalten oder Aufheben der Stummschaltung wurde angewendet. |
session.delegation.created |
GPT-Live eine client- oder antwortorientierte Einheit delegierter Arbeit erstellt. |
response.event |
Ein Umschlag mit einem geschachtelten Antwortdelegierungsereignis; Verteiler auf dem geschachtelten event.type und beibehalten die äußere .delegation_id |
session.usage.updated |
Kumulierte Sitzungsnutzung, die ungefähr einmal pro Minute ausgegeben wird. |
session.closed |
Ordnungsgemäßes Schließen abgeschlossen, einschließlich der endgültigen kumulativen Nutzung und einer reason. |
error |
Fehler beim Starten, Überprüfen, Befehl oder delegierten Antworten; error.client_event_id korreliert mit dem fehlgeschlagenen Befehl. |
session.started
{
"type": "session.started",
"session": {
"id": "sess_123",
"expires_at": 1782518400,
"model": "gpt-live-1",
"instructions": "Be concise.",
"audio": { "output": { "voice": "marin" } },
"delegation": { "type": "client" }
}
}
session.output_audio.delta
start_ms und end_ms verwenden Sie die Serverzeitachse, sodass eine Lücke zwischen Bereichen keine Stille darstellt. Es gibt kein Ausgabeaudioereignis.
{
"type": "session.output_audio.delta",
"delta": "<base64-encoded-24khz-pcm16le-mono-audio>",
"start_ms": 0,
"end_ms": 100
}
session.input_transcript.delta / session.output_transcript.delta
Jedes Ereignis enthält ein delta Fragment mit einem start_ms / end_ms Bereich auf der Sitzungszeitachse. Fragmentgrenzen spiegeln Audiofrequenzen wider, nicht semantische Turn-Grenzen, und Benutzer- und Assistentenfragmente können sich überlappen.
{
"type": "session.input_transcript.delta",
"delta": "What is the",
"start_ms": 600,
"end_ms": 800
}
session.delegation.created
Das delegation Objekt trägt id, typeund target. Verwenden Sie delegation.id sie für die Clientdelegierung als session.commentary.appenddelegation_id spätere Oder session.thinking.append Ereignisse. Bei der Antwortdelegierung wird die Delegierung an den Lebenszyklus "Antworten" gebunden, response_id der in response.event Umschlägen folgt. Siehe Stellvertretungsarbeit in GPT-Live für den vollständigen Ablauf.
{
"type": "session.delegation.created",
"offset_ms": 1000,
"delegation": {
"id": "item_delegation_123",
"type": "delegation",
"target": "client"
}
}
session.usage.updated / session.closed
session.usage.updated meldet die kumulierte Sprachdauer in Sekunden zusammen mit dem Nutzungsverhältnis des Kontextfensters. Dabei werden Momentaufnahmen ausgeführt, nicht inkrementiert, um summen zu können.
session.closed trägt die endgültige Nutzung und eine reason.
{
"type": "session.usage.updated",
"usage": { "seconds": 12 },
"context_window": { "usage_ratio": 0.42 }
}
{
"type": "session.closed",
"reason": "close_requested",
"usage": { "seconds": 128 }
}
Das reason Feld erklärt, warum die Sitzung beendet wurde: close_requested, , expired, content, , remote_hangupoder connection_lost. Die Verwendung von Back-End-Token ist getrennt; aus geschachtelten response.completed Ereignissen lesen, die response.eventin .
Fehlerbehandlung
Alle GPT-Live Fehler verwenden einen Fehlerumschlag.
error.client_event_id ist nur vorhanden, wenn der Fehler mit einem Clientbefehl korreliert werden kann; param wird weggelassen, wenn kein bestimmtes Feld den Fehler verursacht hat. Ein Startfehler verhindert session.started. Ein Befehlsfehler schließt nicht unbedingt eine bereits gestartete Sitzung.
{
"type": "error",
"error": {
"type": "invalid_request_error",
"code": "invalid_audio",
"message": "PCM16 audio must contain an even number of bytes",
"param": "audio",
"client_event_id": "event_audio_1"
}
}
Vollständiger WebSocket-Lebenszyklus
// 1. Client startup
{ "type": "session.start",
"session": {
"model": "gpt-live-1",
"instructions": "Be concise.",
"delegation": { "type": "client" }
}
}
// 2. Server startup acknowledgment
{ "type": "session.started",
"session": {
"id": "sess_123",
"model": "gpt-live-1",
"instructions": "Be concise.",
"audio": { "output": { "voice": "marin" } },
"delegation": { "type": "client" }
}
}
// 3. Client audio, repeated as data becomes available
{ "type": "session.input_audio.append",
"audio": "<base64-encoded-24khz-pcm16le-mono-audio>"
}
// 4. Server events may interleave
{ "type": "session.input_transcript.delta",
"delta": "Hello",
"start_ms": 600,
"end_ms": 800
}
{ "type": "session.output_audio.delta",
"delta": "<base64-encoded-24khz-pcm16le-mono-audio>",
"start_ms": 0,
"end_ms": 100
}
// 5. Client shutdown; keep reading until session.closed
{ "type": "session.close" }