Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makale, GPT-Live için tam olay başvurusudur. Görev tabanlı rehberlik için bkz. Gerçek zamanlı ses için GPT-Live kullanma ve GPT-Live'da çalışmayı devretme.
Temel ad alanı
GPT-Live oturumları, Foundry kaynak uç noktanızın altında /openai/v1/live yer alır. WebSocket istemcisi öğesine /openai/v1/live/sessions bağlanır ve gönderir session.start. WebRTC oturumları ile POST /openai/v1/live/sessionsoluşturulur. Sunucu adresine /openai/v1/live/sessions/{session_id}/attachbir yan bant bağlantısı ekler.
Oturum yapılandırması
Oturum, bilinmeyen alanları reddeden katı bir yapılandırma nesnesiyle başlar. Bir WebSocket istemcisi bunu gönderir session.start; WebRTC oturum oluşturma işlemi, oluşturma isteğinin session alanı olarak gönderir. Her ikisi de oturum nesnesinde bulunur model .
{
"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 | Notlar |
|---|---|
model |
Gerekli. Hem WebSocket session.start hem de WebRTC oluşturma için oturum nesnesinde ayarlayın. Başlatmadan sonra sabit. |
instructions |
Sistem yönergeleri. Başlatmadan sonra sabit; ile session.instructions.appenddaha fazlasını ekleyin. |
audio.output.voice |
Çıkış sesi. varsayılan olarak marin ayarlanır ve başlatma işleminden sonra sabittir. |
delegation |
{ type: "client" } veya { type: "responses", responses: {...} }. İstemci temsilcisi atlanır veya null seçilir. |
delegation.responses.service_tier |
, , defaultflexveya prioritykabul ederauto. |
delegation.responses.tools |
normal araç girdileri olarak yapılandırılan dahil olmak üzere web_searchişlev ve barındırılan araçlar. |
Canlı oturumu güncelleştirme
Başlangıçtan sonra seyrektir session.update : atlanmış alanlar geçerli değerlerini korur ve yalnızca delegation.responses ayarlar değişebilir. Temsilci seçme tam bir nesne olarak değiştirilir; iç içe temsilci alanları bağımsız olarak düzeltme eki uygulamaz. Başlangıç alanları model, instructions, inputve audio alanları güncelleştirmiyor.
Başarılı bir güncelleştirme, genel oturum kaynağının tamamıyla birlikte üretilir session.updated . Başarılı bildirimler yankılanmaz event_id; yalnızca bağıntı için hatalar kullanılır client_event_id .
Ses biçimi
WebSocket giriş ve çıkışı 24.000 Hz'de örneklenmiş ham, üst bilgisiz, mono, imzalı 16 bit küçük endian PCM kullanır. Bir WAV dosyası veya başka bir ses kapsayıcısı değil, ham PCM baytlarını Base64 ile kodlayın. Her örnek iki bayttır, bu nedenle kod çözülen yük çift sayıda bayt içermelidir.
WebRTC'de ses, JSON ses olayları yerine üzerinde anlaşmaya varılan medya izlemesini kullanır ve JSON zamanlama alanlarını taşımaz.
İstemci olayları
| Olay | Transport | Description |
|---|---|---|
session.start |
WebSocket | İlk oturum yapılandırmasını gönderir ve üretir session.started. |
session.update |
Herhangi bir JSON akışı | öğesine seyrek delegation.responses güncelleştirme uygular ve üretir session.updated. |
session.input_audio.append |
Yalnızca WebSocket | Boş olmayan base64 PCM16 mono ses ekler. Kabul edilmedi. |
session.input_audio.mute / session.input_audio.unmute |
Herhangi bir JSON akışı | Çağıranın girişini sessize alır veya açar ve üretir session.input_audio.muted / session.input_audio.unmuted. |
session.instructions.append |
Herhangi bir JSON akışı | Güvenilen yönergeleri ekler ve üretir session.instructions.appended. |
session.thinking.append |
Herhangi bir JSON akışı | Sessiz bağlam ekler ve oluşturur session.thinking.appended. |
session.commentary.append |
Herhangi bir JSON akışı | Modelin konuşmasına yönelik içeriği ekler ve üretir session.commentary.appended. |
response.item.create |
Herhangi bir JSON akışı | Yanıt temsili ile, arka uç için bir işlev sonucu veya kullanıcı iletisi gönderir. |
response.create |
Herhangi bir JSON akışı | Yanıt temsili ile arka uç yanıtını çalıştırır veya devam eder. |
session.close |
Herhangi bir JSON akışı | Düzgün kapatmayı başlatır, üretir session.closedve ardından taşımayı kapatır. |
session.instructions.append, session.thinking.appendve session.commentary.append olaylarının her biri 500'e kadar belirteç içeren bir düz dize content ve gerekli delegation_idolur. Bu görevi güncelleştirmek için genel oturum bağlamı veya istemci temsilcisi kimliği için kullanın null .
Sunucu olayları
| Olay | Description |
|---|---|
session.started |
Başlangıç yapılandırması. |
session.updated |
Daha sonraki bir seyrek güncelleştirme uygulandı; genel oturum kaynağının tamamını içerir. |
session.output_audio.delta |
Zamanlanmış base64 kodlu ham mono 24 kHz imzalı PCM16 küçük endian çıkış sesi (yalnızca WebSocket). |
session.input_transcript.delta / session.output_transcript.delta |
Zamanlanmış giriş veya çıkış transkripti parçası. |
session.instructions.appended / session.thinking.appended / session.commentary.appended |
Ekleme için bağlam eklemesi kabul edildi. |
session.input_audio.muted / session.input_audio.unmuted |
Bir sesi kapatma veya açma komutu uygulandı. |
session.delegation.created |
GPT-Live temsilcili çalışma için istemci veya Yanıtlar tarafından hedeflenen bir birim oluşturmuştur. |
response.event |
İç içe yerleştirilmiş Yanıtlar temsil olayını taşıyan bir zarf; iç içe yerleştirilmiş event.type üzerinde dağıtın ve dış delegation_idöğesini koruyun. |
session.usage.updated |
Dakikada yaklaşık bir kez yayılan toplu oturum kullanımı. |
session.closed |
Son birikmeli kullanım ve bir de dahil olmak üzere düzgün bir reasonşekilde kapanış tamamlandı. |
error |
Başlangıç, doğrulama, komut veya temsilcili Yanıtlar hatası; error.client_event_id başarısız komutuyla bağıntılı. |
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 ve end_ms sunucu zaman çizelgesini kullanarak aralıklar arasındaki boşluk atlanmış sessizliği temsil eder. Çıkış-ses-bitti olayı yoktur.
{
"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
Her olay, oturum zaman çizelgesinde bir aralık içeren bir start_ms / end_ms parça taşır.delta Parça sınırları semantik dönüş sınırlarını değil ses temposunu yansıtır ve kullanıcı ve yardımcı parçaları kesişebilir.
{
"type": "session.input_transcript.delta",
"delta": "What is the",
"start_ms": 600,
"end_ms": 800
}
session.delegation.created
delegation Nesnesi , typeve targettaşırid. İstemci temsilcisi seçme için, sonraki session.commentary.append sürüm veya session.thinking.append olaylar olarak delegation_id kullanındelegation.id. Yanıt temsili için, response_id temsilci seçmeyi zarflar halinde response.event izleyen Yanıtlar yaşam döngüsüne bağlar. Tam akış için bkz. GPT-Live'da çalışma temsilci seçme.
{
"type": "session.delegation.created",
"offset_ms": 1000,
"delegation": {
"id": "item_delegation_123",
"type": "delegation",
"target": "client"
}
}
session.usage.updated / session.closed
session.usage.updated saniye cinsinden kümülatif ses süresini ve bağlam penceresi kullanım oranını raporlar. Bunlar, toplam artışları değil anlık görüntüleri çalıştırır.
session.closed son kullanımı ve bir reasonöğesini taşır.
{
"type": "session.usage.updated",
"usage": { "seconds": 12 },
"context_window": { "usage_ratio": 0.42 }
}
{
"type": "session.closed",
"reason": "close_requested",
"usage": { "seconds": 128 }
}
Alanı oturumun reason neden sona ermiş olduğunu açıklar: close_requested, expired, content, remote_hangupveya connection_lost. Arka uç belirteci kullanımı ayrıdır; içinde teslim response.eventedilen iç içe response.completed olaylardan okuyun.
Hata yönetimi
Tüm GPT-Live hataları bir hata zarfı kullanır.
error.client_event_id yalnızca hatanın bir istemci komutuyla ilişkilendirilebildiği durumlarda bulunur; param hataya neden olan belirli bir alan olmadığında atlanır. Başlangıç hatası tarafından engellenir session.started. Komut hatasının zaten başlatmış bir oturumu kapatması gerekmez.
{
"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"
}
}
WebSocket yaşam döngüsünü tamamlama
// 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" }