İçeriğe geç

Streaming Yapılandırılmış Çıktıları İşlemek

Yavaş tek seferlik bekleyiş yerine streaming ile UX'i iyileştirme. Partial JSON parsing, ilk-kelime-hızı (TTFT), backpressure.

Şükrü Yusuf KAYA
9 dakikalık okuma
Orta

Streaming Yapılandırılmış Çıktılar

Cevap üretilirken token-by-token alma. UX'i dramatik iyileştirir (4 saniye bekleyiş yerine 0.5sn'de görünür akış).
python
# Streaming
import os
from anthropic import Anthropic
from dotenv import load_dotenv
load_dotenv()
 
client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
 
with client.messages.stream(
model="claude-haiku-4-5-20251001",
max_tokens=500,
messages=[{"role": "user", "content": "Türk kahvesi tarihini 5 paragrafta anlat."}]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
 
print("\n\n--- Bitti ---")
 
Streaming text — kullanıcı yazıyor gibi görür.

JSON Streaming: Partial Parse#

JSON streaming zor — yarım JSON parse edilemez. Çözüm: partial parser (json5, ijson).
python
# Streaming JSON — naïve buffer
buffer = ""
items_seen = []
 
with client.messages.stream(...) as stream:
for text in stream.text_stream:
buffer += text
# Her } gördüğümüzde dene parse
if "}" in text:
try:
# Partial JSON parse (json5 lib)
import json5
parsed = json5.loads(buffer + "}") # naïve
if "items" in parsed and len(parsed["items"]) > len(items_seen):
new_item = parsed["items"][-1]
print(f"Yeni item: {new_item}")
items_seen.append(new_item)
except:
pass
Partial JSON streaming — production'da partial-json-parser lib öner
Streaming + tool calling = karmaşık. Tool çağrısı tamamlanmadan parse edilemez. Genelde non-streaming kullanılır tool flow'larda.

Yorumlar & Soru-Cevap

(0)
Yorum yazmak için giriş yap.
Yorumlar yükleniyor...

İlgili İçerikler