Entegrasyon

OpenAI uyumlu API ile streaming yanıtlar nasıl alınır?

Chat Completions streaming, SSE olayları ve delta alanlarını öğren. JavaScript örneğiyle yanıt akışını, token kullanımını ve kesintileri yönet.

Streaming neyi değiştirir?

Standart bir istekte uygulaman yanıtın tamamlanmasını bekler. Streaming kullanıldığında yanıt küçük parçalar hâlinde gelir ve arayüzün metni aşamalı olarak gösterebilir. Bu yaklaşım özellikle uzun yanıtlar üreten sohbet ve yazı araçlarında kullanışlıdır.

Streaming, modelin toplam üretim süresinin mutlaka kısalacağı anlamına gelmez. Asıl avantaj, kullanıcıya ilk kullanılabilir parçayı daha erken gösterebilmektir. İlk parça gelene kadar yükleniyor durumunu koru; bağlantı kurulmasını yanıt üretiminin tamamlanmasıyla karıştırma.

SDK ile akışı başlat

Önce başlangıç rehberindeki gibi WhatOTP anahtarı ve /v1 ile biten baseURL kullanarak bir OpenAI istemcisi oluştur. Ardından Chat Completions isteğinde stream: true gönder. JavaScript SDK, yanıtı for await döngüsüyle okuyabileceğin bir async iterator olarak sunar.

Her parçanın metin içermesi zorunlu değildir. choices boş olabilir veya delta yalnızca ek bilgi taşıyabilir. Bu nedenle alanları isteğe bağlı erişimle oku ve yalnızca mevcut content değerini çıktı metnine ekle.

JavaScriptWHATOTP / EXAMPLE
const stream = await client.chat.completions.create({
  model: "gpt-6-astra",
  messages: [{ role: "user", content: "Explain HTTP streaming." }],
  stream: true,
  stream_options: { include_usage: true },
});

for await (const chunk of stream) {
  const content = chunk.choices[0]?.delta?.content;
  if (content) process.stdout.write(content);
  if (chunk.usage) console.log("Usage:", chunk.usage);
}

SSE ve delta alanlarını anla

HTTP seviyesinde akış text/event-stream içerik türüyle gelir. data: satırları JSON olaylarını taşır; [DONE] akışın tamamlandığını belirtir. choices[0].delta.content tam yanıt değil, o olayla gelen metin parçasıdır. Önceki metnin üzerine yazmak yerine parçaları sırayla birleştir.

SDK yerine doğrudan fetch kullanıyorsan ağ parçalarının olay sınırlarıyla aynı olmadığını unutma. Bir JSON olayı birkaç okumaya bölünebilir; tek okuma birden fazla olayı da içerebilir. Tam SSE olayları oluşana kadar tampon tut ve UTF-8 metni akış destekli bir çözücüyle oku.

Token kullanımını ayrı işle

stream_options: { include_usage: true } göndererek akışın kullanım bilgisini talep edebilirsin. Kullanım içeren olay, yanıt metni taşımayabilir. Örnekte usage ile content alanlarının ayrı kontrol edilmesinin nedeni budur.

Sağlayıcı kullanım bildirmezse panelde tahmini token değerleri bulunabilir. Çıktı metninin karakter sayısını kesin token sayısı olarak kabul etme. Hata ayıklama için X-Request-Id başlığı ile paneldeki istek kaydını ilişkilendirmek daha yararlıdır.

Kesilen yanıtları doğru göster

Kullanıcı sayfadan ayrıldığında veya iptal düğmesine bastığında devam eden bağlantıyı sonlandır. Akış beklenmedik biçimde kesilirse mevcut metni tamamlanmış bir yanıt gibi işaretleme. Kısmi yanıtı koruyup yeniden deneme seçeneği sunabilirsin.

HTTP başlıkları gönderildikten sonra oluşan bir hata yeni bir HTTP durum koduyla bildirilemeyebilir. Bu yüzden yalnızca ilk 200 durumuna bakmak yerine akışın tamamlanmasını da takip et. Uygulamanın ağ hatası, kullanıcı iptali ve başarılı bitiş için farklı durumları olsun.

Son güncelleme: Güncel API dokümantasyonu
Tüm yazılar

Fikrini hayata geçir.

Panelini aç, anahtarını al ve ilk isteğini gönder.

Ücretsiz başla