GPT-Live Ereignis-API-Referenz

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