{"id":793,"date":"2026-04-16T10:00:00","date_gmt":"2026-04-16T07:00:00","guid":{"rendered":"https:\/\/www.hasangultekin.com\/2026\/04\/16\/streaming-llm-responses-sse-backpressure\/"},"modified":"2026-04-16T10:00:00","modified_gmt":"2026-04-16T07:00:00","slug":"streaming-llm-responses-sse-backpressure","status":"publish","type":"post","link":"https:\/\/www.hasangultekin.com\/tr\/2026\/04\/16\/streaming-llm-responses-sse-backpressure\/","title":{"rendered":"LLM Yan\u0131tlar\u0131n\u0131n Ak\u0131\u015f \u0130letimi: \u0130ptal ve Geri Bas\u0131nc\u0131n \u00d6nemi"},"content":{"rendered":"<p>Ak\u0131\u015f teknolojisi, kullan\u0131c\u0131 tam cevap haz\u0131r olmadan \u00f6nce ilerlemeyi g\u00f6rebildi\u011finden, yapay zeka aray\u00fcz\u00fcn\u00fcn h\u0131zl\u0131 tepki verdi\u011fini hissettirir. Ayr\u0131ca, tek bir iste\u011fi model sa\u011flay\u0131c\u0131, uygulama sunucusu, ters proxy ve taray\u0131c\u0131y\u0131 kapsayan bir ya\u015fam d\u00f6ng\u00fcs\u00fcne d\u00f6n\u00fc\u015ft\u00fcr\u00fcr.<\/p>\n<p>Bu ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn tan\u0131mlanm\u0131\u015f durumlar\u0131 olmas\u0131n\u0131 istiyorum. Bir ba\u011flant\u0131n\u0131n kapanmas\u0131, bir sa\u011flay\u0131c\u0131n\u0131n i\u015fini bitirmesi ve bir cevab\u0131n do\u011frulama s\u00fcrecinden ge\u00e7mesi farkl\u0131 olaylard\u0131r. Bu \u00fc\u00e7\u00fcn\u00fcn hepsini \u201ctamamland\u0131\u201d olarak de\u011ferlendirmek, hatalar\u0131n a\u00e7\u0131klanmas\u0131n\u0131 zorla\u015ft\u0131r\u0131r.<\/p>\n<h2>Etkile\u015fime uygun bir aktar\u0131m y\u00f6ntemi se\u00e7in<\/h2>\n<p>Sunucu taraf\u0131ndan g\u00f6nderilen olaylar, sunucudan istemciye yap\u0131lan g\u00fcncelleme ak\u0131\u015flar\u0131 i\u00e7in olduk\u00e7a etkilidir. Olay bi\u00e7imi, a\u015fa\u011f\u0131da a\u00e7\u0131kland\u0131\u011f\u0131 gibi adland\u0131r\u0131lm\u0131\u015f olaylar\u0131, kimlikleri ve veri alanlar\u0131n\u0131 destekler: <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Server-sent_events\/Using_server-sent_events\" target=\"_blank\" rel=\"noopener\">MDN\u2019nin SSE k\u0131lavuzu<\/a>.<\/p>\n<p>Taray\u0131c\u0131n\u0131n yerle\u015fik EventSource aray\u00fcz\u00fc, bir ak\u0131\u015f\u0131 almak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r; ancak POST g\u00f6vdesi veya \u00f6zel istek ba\u015fl\u0131klar\u0131 gerektiren uygulamalar, bunun yerine fetch tabanl\u0131 bir ak\u0131\u015f istemcisi kullanabilir. Bu se\u00e7im, uygulaman\u0131n kendi ba\u015f\u0131na hangi ayr\u0131\u015ft\u0131rma ve yeniden ba\u011flanma davran\u0131\u015flar\u0131n\u0131 uygulamas\u0131 gerekti\u011fini belirler.<\/p>\n<p>Kimlik do\u011frulama, istek g\u00f6nderme ve ak\u0131\u015f aboneli\u011fi i\u015flemlerini a\u00e7\u0131k\u00e7a belirtirim. Kimlik bilgileri, sadece ba\u011flant\u0131 kurmak i\u00e7in kolayl\u0131k sa\u011flad\u0131\u011f\u0131 i\u00e7in bir URL\u2019ye eklenmemelidir.<\/p>\n<h2>Uygulama protokol\u00fcn\u00fc tan\u0131mlay\u0131n<\/h2>\n<p>Kullan\u0131\u015fl\u0131 bir ak\u0131\u015f, kabul, ilerleme, metin, do\u011frulama durumu, tamamlanma ve hata durumlar\u0131n\u0131 birbirinden ay\u0131rabilir. Olay adlar\u0131, uygulaman\u0131n kendi tercihidir; bunlar, aktar\u0131m katman\u0131 taraf\u0131ndan sa\u011flanan garantiler de\u011fildir.<\/p>\n<pre><code>olay: kabul edildi\nveriler: {\"istek_id\":\"req_example\"}\n\nolay: text_delta\nveriler: {\"metin\":\"Mevcut boyutlar \u015funlard\u0131r\"}\n\nolay: tamamland\u0131\nveriler: {\"istek_id\":\"req_example\",\"durum\":\"tamamland\u0131\"}<\/code><\/pre>\n<p>Bu \u00f6rnek, \u00e7er\u00e7eveleme kavram\u0131n\u0131 g\u00f6stermektedir. Ger\u00e7ek bir ayr\u0131\u015ft\u0131r\u0131c\u0131, bir olay\u0131 b\u00f6len, birden fazla olay i\u00e7eren veya \u00e7ok baytl\u0131 bir karakteri b\u00f6len a\u011f par\u00e7alar\u0131n\u0131 i\u015fleyebilmelidir. Bir a\u011f okuma i\u015flemi, otomatik olarak tek bir tam mesaj anlam\u0131na gelmez.<\/p>\n<h2>Bellekte bekleyen veri miktar\u0131n\u0131 s\u0131n\u0131rlad\u0131<\/h2>\n<p>A\u015fa\u011f\u0131 ak\u0131\u015f ba\u011flant\u0131s\u0131 yava\u015fsa, sunucu sa\u011flay\u0131c\u0131n\u0131n verilerini iletebildi\u011finden daha h\u0131zl\u0131 bir \u015fekilde alabilir. S\u0131n\u0131rs\u0131z arabellekleme, yava\u015f bir istemciyi bellek sorununa d\u00f6n\u00fc\u015ft\u00fcr\u00fcr.<\/p>\n<p>Uygulama, yaz\u0131labilir ak\u0131\u015f bask\u0131s\u0131n\u0131 dikkate almal\u0131 ve bir tampon s\u0131n\u0131r\u0131 tan\u0131mlamal\u0131d\u0131r. Yukar\u0131 ak\u0131\u015f protokol\u00fcn\u00fcn etkili bir \u015fekilde duraklat\u0131lamad\u0131\u011f\u0131 durumlarda, kuyru\u011fun s\u0131n\u0131rs\u0131z bir \u015fekilde b\u00fcy\u00fcmesine izin vermektense i\u015flemi iptal etmek daha g\u00fcvenli olabilir.<\/p>\n<p><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Streams_API\/Concepts\" target=\"_blank\" rel=\"noopener\">MDN\u2019nin Streams API kavramlar\u0131<\/a> geri bas\u0131nc\u0131 bir ak\u0131\u015f kontrol mekanizmas\u0131 olarak a\u00e7\u0131kl\u0131yor. Bir LLM uygulamas\u0131nda, bu mekanizmay\u0131 sa\u011flay\u0131c\u0131n\u0131n iptal i\u015flemiyle ve \u00fcr\u00fcn\u00fcn zaman a\u015f\u0131m\u0131 politikas\u0131yla ili\u015fkilendirmem gerekiyor.<\/p>\n<h2>\u0130ptal i\u015flemini iste\u011fin tamam\u0131na yans\u0131t<\/h2>\n<p>Taray\u0131c\u0131 ba\u011flant\u0131s\u0131n\u0131n kapat\u0131lmas\u0131, uygulamada temizleme i\u015flemini tetiklemeli ve destekleniyorsa, yukar\u0131 ak\u0131\u015f model iste\u011finin iptal edilmesini sa\u011flamal\u0131d\u0131r. \u0130ptal i\u015flemi ba\u015far\u0131s\u0131z olsa bile zamanlay\u0131c\u0131lar, dinleyiciler ve arabellekler serbest b\u0131rak\u0131lmal\u0131d\u0131r.<\/p>\n<p>Ancak, m\u00fc\u015fterinin ba\u011flant\u0131s\u0131n\u0131 kesmesi, hizmet sa\u011flay\u0131c\u0131n\u0131n faturaland\u0131r\u0131labilir \u00e7al\u0131\u015fmay\u0131 durdurdu\u011funu kan\u0131tlamaz. Kullan\u0131m hesaplamalar\u0131 bu belirsizli\u011fi korumal\u0131 ve bunu hizmet sa\u011flay\u0131c\u0131n\u0131n elindeki kullan\u0131m bilgilerine g\u00f6re uzla\u015ft\u0131rmal\u0131d\u0131r.<\/p>\n<p>Uzun s\u00fcreli ba\u011flant\u0131lar da, arabellek ve zaman a\u015f\u0131m\u0131 ayarlar\u0131na sahip proxy'lerden ge\u00e7er. Da\u011f\u0131t\u0131lm\u0131\u015f yolu test ediyorum; \u00e7\u00fcnk\u00fc geli\u015ftirme sunucusuna do\u011frudan ba\u011fland\u0131\u011f\u0131nda sorunsuz \u00e7al\u0131\u015fan bir ak\u0131\u015f, \u00fcretim altyap\u0131s\u0131 i\u00e7inde farkl\u0131 bir \u015fekilde davranabilir.<\/p>\n<h2>K\u0131smi cevaplar\u0131n nas\u0131l g\u00f6sterilece\u011fine karar verin<\/h2>\n<p>Yar\u0131 yolda kesilen bir yan\u0131t, g\u00f6zle g\u00f6r\u00fcl\u00fcr \u015fekilde eksik kalmal\u0131d\u0131r. Ba\u011flant\u0131n\u0131n yeniden kurulmas\u0131, sessizce ba\u015fka bir model \u00e7a\u011fr\u0131s\u0131 olu\u015fturmamal\u0131 veya k\u0131smi yan\u0131ta yeni bir yan\u0131t eklememelidir.<\/p>\n<p>Devam ettirme i\u015flemi i\u00e7in, olay ge\u00e7mi\u015finin korunmu\u015f olmas\u0131 ve tan\u0131mlanm\u0131\u015f bir imle\u00e7 gereklidir; yaln\u0131zca bir olay kimli\u011fi tek ba\u015f\u0131na tekrar oynatmay\u0131 sa\u011flamaz. Daha basit bir \u00fcr\u00fcn i\u00e7in, a\u00e7\u0131k bir yeniden ba\u015flatma se\u00e7ene\u011fi sunmak daha net bir davran\u0131\u015f olabilir.<\/p>\n<p>Do\u011frulama, ba\u015fka bir se\u00e7enek sunar. E\u011fer do\u011frulama i\u015flemleri yay\u0131nlanmadan \u00f6nce tamamlanmak zorundaysa, ilgili i\u00e7eri\u011fin \u00f6nceden depolanmas\u0131 gerekir. Metni hemen g\u00f6sterip daha sonra do\u011frulamak, farkl\u0131 bir \u00fcr\u00fcn vaadidir.<\/p>\n<p>Yava\u015f \u00e7al\u0131\u015fan istemcileri, iptal edilen istekleri, proxy zaman a\u015f\u0131mlar\u0131n\u0131, sa\u011flay\u0131c\u0131 hatalar\u0131n\u0131 ve hatal\u0131 bi\u00e7imlendirilmi\u015f olay s\u0131n\u0131rlar\u0131n\u0131 kontrol ediyorum. \u0130yi bir ak\u0131\u015f aray\u00fcz\u00fc, h\u0131zl\u0131 bir kullan\u0131m hissi verirken ayn\u0131 zamanda tamamlanma durumunun g\u00fcvenilir olmas\u0131n\u0131 da sa\u011flar.<\/p>\n<p class=\"hg-editorial-note\"><small>25 Eyl\u00fcl 2026 tarihinde g\u00fcncellenmi\u015ftir.<\/small><\/p>","protected":false},"excerpt":{"rendered":"<p>G\u00fcvenilir bir ak\u0131\u015f yan\u0131t\u0131 i\u00e7in, a\u00e7\u0131k ya\u015fam d\u00f6ng\u00fcs\u00fc olaylar\u0131, s\u0131n\u0131rl\u0131 arabellekleme, yukar\u0131 ak\u0131\u015f iptali ve k\u0131smi yan\u0131tlara ili\u015fkin net bir politika gereklidir.<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false,"footnotes":""},"categories":[149],"tags":[172,187,190],"class_list":["post-793","post","type-post","status-publish","format-standard","hentry","category-backend-architecture","tag-llm-engineering","tag-sse","tag-streaming"],"_links":{"self":[{"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/posts\/793","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/comments?post=793"}],"version-history":[{"count":0,"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/posts\/793\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/media?parent=793"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/categories?post=793"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hasangultekin.com\/tr\/wp-json\/wp\/v2\/tags?post=793"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}