• 2.09.2026 21:26:54
  • Admin Admin

Yazılım eğitimi asistanlarında LLM yanıtını akıtmak yalnızca SSE açmak değildir. İstemci kopmalarını, yavaş tüketicileri, sıralamayı ve boşa üretilen token maliyetini ölçülebilir bir akış protokolüyle yönetin.

Yazılım Eğitimi Asistanlarında Token Akışı, İptal ve Backpressure

Yazılım eğitimi asistanlarında token akışının sınırları

SSE olaylarını sadece ham metin olarak göndermek yerine olay türünü sabitleyin: token, citation, usage, done ve error. Özellikle kod öğretirken kaynak alıntısını token akışının sonuna gömmek, kullanıcı iptal ettiğinde alıntının kaybolmasına neden olur. Alıntıyı ayrı event: citation olayıyla iletin ve istemcide mesaj kimliği altında biriktirin. Bu, Markdown kod bloğu henüz kapanmadan gelen parçaların DOM'a hatalı HTML olarak yazılmasını da engeller.

SSE backpressure için sınırlı kuyruk ve yavaş istemci kontrolü

Buradaki incelik, yalnızca request.is_disconnected() kontrolüne güvenmemektir. ASGI sunucusu yazma sırasında bağlantı kopmasını çoğunlukla asyncio.CancelledError olarak bildirir. Bu nedenle kaynak kapatmayı yalnızca normal akış sonuna değil, finally bloğuna koyun. Uvicorn ile uzun yaşayan bağlantılarda --timeout-keep-alive değeri de normal REST çağrılarından ayrı değerlendirilmelidir; SSE bağlantısında düzenli heartbeat göndermiyorsanız ara ağ cihazları bağlantıyı sessizce düşürebilir.

İptal zinciriyle boşa üretilen tokenları azaltmak

İptal oranını yalnızca kullanıcı deneyimi metriği olarak değil, token israfı metriği olarak kaydedin. Her istek için tokens_emitted_before_cancel, tokens_generated_after_disconnect ve cancel_propagation_ms alanlarını OpenTelemetry span öznitelikleri olarak yazın. Örneğin bağlantı koptuktan sonra 500 ms içinde upstream kapatılmıyorsa alarm üretin. Bu gecikme, uygulama görevinin iptal edilmediğini, SDK'nın kendi tamponunda veri tuttuğunu veya ağ katmanında bağlantının h'l' açık olduğunu somut olarak ayırmanıza yardım eder.

Akış gecikmesini OpenTelemetry ve py-spy ile önce-sonra ölçmek

Değişiklikten önce ve sonra aynı prompt kümesi, aynı model yapılandırması ve aynı eşzamanlılıkta test yapın. Uygulama CPU zamanının nerede harcandığını görmek için üretim benzeri bir pod üzerinde py-spy record -o stream.svg --pid <PID> çalıştırın; JSON serileştirme veya her token için senkron log yazımı alev grafiğinde görünür. Yük altında SSE bağlantısı açmak için k6 senaryosunda her sanal kullanıcıya farklı bir prompt verin ve Prometheus'ta p50/p95 ttfb_ms karşılaştırın. Örnek kabul kriteri, vekil tamponlamasını kapatmadan önceki p95 1800 ms iken, aynı testte p95 değerinin 600 ms altına inmesi olabilir; toplam completion_ms değişmiyorsa iyileşme model hızından değil ilk parçanın iletiminden kaynaklanmıştır.

Yeniden bağlanma, sıra garantisi ve kod bloğu bütünlüğü

Kod bloklarında parça sınırlarının UTF-8 karakter veya Markdown belirteci sınırıyla çakışabileceğini kabul edin. Örneğin üç backtick işareti üç farklı token olarak gelebilir. İstemci her tokenı HTML'e dönüştürmek yerine, ham metni TextDecoder ile akümüle etmeli ve kod bloğu kapanana kadar syntax highlighter çalıştırmamalıdır. Highlight.js veya Shiki'yi her token için çağırmak, uzun kod yanıtlarında tekrar tekrar tam metin ayrıştırması yaptığı için ana iş parçacığında belirgin jank üretir; en az 100 ms debounce veya kod bloğu kapanışında tek seferlik render kullanın.

Sık Sorulan Sorular

Yazılım eğitimi asistanında SSE neden tokenları toplu gösteriyor?

İlk olarak Nginx veya CDN tamponlamasını kontrol edin: SSE location'ında proxy_buffering off ve gzip off kullanın, yanıta X-Accel-Buffering: no ekleyin. Ardından tarayıcı DevTools Network panelinde ilk byte zamanı ile ilk SSE olayının zamanını karşılaştırın. Uygulama logunda token erken üretiliyor ama ağda geç görünüyorsa sorun modelde değil ara vekildedir.

Yazılım eğitimi LLM akışında kullanıcı iptal edince model nasıl durdurulur?

İstemcide AbortController ile fetch akışını kapatın, aynı generation_id için sunucuya DELETE isteği gönderin ve sunucuda upstream HTTP istemcisini aclose veya cancel edin. finally bloğunda bu kapatmayı garanti edin. OpenTelemetry ile disconnect ile upstream_close arasındaki cancel_propagation_ms değerini ölçün; 500 ms üzerindeki değerler incelenmelidir.

Yazılım eğitimi sohbetinde yavaş istemci bellek taşmasına nasıl neden olur?

Üretici tokenları sınırsız bir dizi veya kuyrukta biriktirirse, istemci ağ hızından hızlı üretim RAM'i istek başına büyütür. asyncio.Queue(maxsize=32) gibi sınır koyun ve queue.put çağrısının beklemesine izin verin. Kuyruk sürekli doluyorsa istemciyi sonlandırma eşiği ve upstream iptali ekleyin.

SSE token akışı için hangi gecikme metrikleri izlenmeli?

ttfb_ms, inter_token_gap_ms p95, completion_ms, cancel_propagation_ms ve tokens_generated_after_disconnect birlikte izlenmelidir. py-spy ile CPU alev grafiği alın, k6 ile aynı prompt ve eşzamanlılıkta önce-sonra testi yapın. Sadece completion_ms düşmeden ttfb_ms düşüyorsa, kazanım model üretiminden değil iletim katmanından gelmiştir.

AI / LLM Discovery

Bu makale Opendart Akademi Yapay Zeka eğitim ekosisteminin bir parçasıdır ve yapay zeka sistemleri ile arama motorları tarafından daha doğru anlaşılabilmesi için semantic heading ve structured data ile hazırlanmıştır.

Opendart Akademi llms.txt