Informazioni di riferimento sulle API degli eventi GPT-Live

Questo articolo è il riferimento completo agli eventi per GPT-Live. Per indicazioni basate su attività, vedere Usare GPT-Live per il lavoro vocale in tempo reale e Delegato in GPT-Live.

Spazio dei nomi di base

GPT-Live sessioni sono attive nell'endpoint /openai/v1/live della risorsa Foundry. Un client WebSocket si connette a /openai/v1/live/sessions e invia session.start. Le sessioni WebRTC vengono create con POST /openai/v1/live/sessions. Un server collega una connessione sideband in /openai/v1/live/sessions/{session_id}/attach.

Configurazione della sessione

Una sessione inizia con un oggetto di configurazione rigoroso che rifiuta campi sconosciuti. Un client WebSocket lo invia in session.start; La creazione della sessione WebRTC lo invia come session campo della richiesta di creazione. Entrambi forniscono model nell'oggetto sessione.

{
  "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 Note
model Required. Impostare nell'oggetto sessione per la creazione di WebSocket session.start e WebRTC. Non modificabile dopo l'avvio.
instructions Istruzioni di sistema. Non modificabile dopo l'avvio; aggiungere altro con session.instructions.append.
audio.output.voice Voce di output. marin Il valore predefinito è e non modificabile dopo l'avvio.
delegation { type: "client" } o { type: "responses", responses: {...} }. Omesso o null seleziona la delega client.
delegation.responses.service_tier Accetta auto, default, flexo priority.
delegation.responses.tools Funzioni e strumenti ospitati, inclusi web_search, configurati come voci normali degli strumenti.

Aggiornare una sessione dinamica

Dopo l'avvio, session.update è sparse: i campi omessi mantengono i valori correnti e solo delegation.responses le impostazioni possono cambiare. La delega viene sostituita come un oggetto completo. I campi di delega annidati non vengono applicate patch in modo indipendente. I campi modeldi avvio , instructions, inpute audio non vengono aggiornati.

Un aggiornamento riuscito produce session.updated con la risorsa di sessione pubblica completa. I riconoscimenti con esito positivo non recheggiano event_id; solo gli errori vengono usati client_event_id per la correlazione.

Formato audio

L'input e l'output Di WebSocket usano PCM non elaborati, senza intestazione, mono, con segno a 16 bit, campionati a 24.000 Hz.WebSocket input and output use raw, headerless, mono, signed 16-bit little-endian PCM sampled at 24.000 Hz. Codifica in base64 i byte PCM non elaborati, non un file WAV o un altro contenitore audio. Ogni esempio è costituito da due byte, quindi il payload decodificato deve contenere un numero pari di byte.

In WebRTC l'audio usa la traccia multimediale negoziata anziché gli eventi audio JSON e non include campi di intervallo JSON.

Eventi del cliente

Evento Transport Description
session.start WebSocket Invia la configurazione della sessione iniziale e produce session.started.
session.update Qualsiasi flusso JSON Applica un aggiornamento di tipo sparse a delegation.responses e produce session.updated.
session.input_audio.append Solo tramite WebSocket Aggiunge audio mono base64 PCM16 non vuoto. Non riconosciuto.
session.input_audio.mute / session.input_audio.unmute Qualsiasi flusso JSON Disattiva o disattiva l'input del chiamante e produce session.input_audio.muted / session.input_audio.unmuted.
session.instructions.append Qualsiasi flusso JSON Aggiunge istruzioni attendibili e produce session.instructions.appended.
session.thinking.append Qualsiasi flusso JSON Aggiunge contesto non interattiva e produce session.thinking.appended.
session.commentary.append Qualsiasi flusso JSON Aggiunge il contenuto per il modello da pronunciare e produrre session.commentary.appended.
response.item.create Qualsiasi flusso JSON Con la delega risposte, invia un risultato di funzione o un messaggio utente per il back-end.
response.create Qualsiasi flusso JSON Con la delega delle risposte, viene eseguita o continua la risposta back-end.
session.close Qualsiasi flusso JSON Avvia un arresto normale, produce session.closed, quindi chiude il trasporto.

Gli session.instructions.appendeventi , session.thinking.appende session.commentary.append accettano ogni stringa content normale di un massimo di 500 token e un oggetto obbligatorio delegation_id. Usare null per il contesto generale della sessione o un ID di delega client per aggiornare l'attività.

Eventi del server

Evento Description
session.started Configurazione di avvio.
session.updated È stato applicato un aggiornamento sparse successivo; include la risorsa di sessione pubblica completa.
session.output_audio.delta Audio audio di output little-endian con codifica Base64 con codifica Base64 a 24 kHz (solo WebSocket).
session.input_transcript.delta / session.output_transcript.delta Frammento di trascrizione di input o di output programmato.
session.instructions.appended / session.thinking.appended / session.commentary.appended Un accodamento di contesto è stato accettato per l'inserimento.
session.input_audio.muted / session.input_audio.unmuted È stato applicato un comando di disattivazione o disattivazione dell'audio.
session.delegation.created GPT-Live creato un'unità di lavoro delegata client o risposte.
response.event Busta che trasporta un evento di delega delle risposte annidate; inviare sull'oggetto annidato event.type e mantenere l'oggetto esterno delegation_id.
session.usage.updated Utilizzo cumulativo della sessione, generato circa una volta al minuto.
session.closed Chiusura normale completata, inclusi l'utilizzo cumulativo finale e un oggetto reason.
error Errore di avvio, convalida, comando o risposte delegate; error.client_event_id è correlato al comando non riuscito.

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 e end_ms usano la sequenza temporale del server, quindi un divario tra intervalli rappresenta il silenzio omesso. Non esiste alcun evento di output audio completato.

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

Ogni evento contiene un delta frammento con un start_ms / end_ms intervallo nella sequenza temporale della sessione. I limiti dei frammenti riflettono la cadenza audio, non i limiti dei turni semantici e i frammenti di utenti e assistenti possono interleaversi.

{
  "type": "session.input_transcript.delta",
  "delta": "What is the",
  "start_ms": 600,
  "end_ms": 800
}

session.delegation.created

L'oggetto delegation contiene id, typee target. Per la delega client, usare delegation.id come in delegation_id caso di eventi o session.thinking.append successivisession.commentary.append. Per la delega delle risposte, response_id associa la delega al ciclo di vita delle risposte che segue nelle response.event buste. Per il flusso completo, vedere Delegare il lavoro in GPT-Live .

{
  "type": "session.delegation.created",
  "offset_ms": 1000,
  "delegation": {
    "id": "item_delegation_123",
    "type": "delegation",
    "target": "client"
  }
}

session.usage.updated/ session.closed

session.usage.updated segnala la durata cumulativa della voce in secondi, insieme al rapporto di utilizzo della finestra di contesto. Si tratta di snapshot in esecuzione, non incrementi alla somma. session.closed contiene l'utilizzo finale e un oggetto reason.

{
  "type": "session.usage.updated",
  "usage": { "seconds": 12 },
  "context_window": { "usage_ratio": 0.42 }
}
{
  "type": "session.closed",
  "reason": "close_requested",
  "usage": { "seconds": 128 }
}

Il reason campo spiega perché la sessione è terminata: close_requested, expired, content, remote_hangupo connection_lost. L'utilizzo dei token back-end è separato; leggerlo dagli eventi annidati recapitati response.completed in response.event.

Gestione degli errori

Tutti gli errori GPT-Live utilizzano una busta di errore. error.client_event_id è presente solo quando l'errore può essere correlato a un comando client; param viene omesso quando nessun campo specifico ha causato l'errore. Un errore di avvio impedisce session.started. Un errore del comando non chiude necessariamente una sessione già avviata.

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

Completare il ciclo di vita di WebSocket

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