Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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" }