LLM Operasyon Güvenliği

Streaming LLM Güvenliği: Akış Yanıtlarında Çıktı Filtresi Nasıl Çalışır?

Streaming LLM güvenliği için tampon, geri tutma penceresi, senkron ve asenkron filtre modları ve arayüz kurallarıyla akış yanıtını çalışma anında denetleyin.

Streaming LLM güvenliği, cevabın parça parça gönderildiği bir akışta çıktıyı denetleme sorunudur. Tam yanıt bekleyen bir filtre bütün metni görür ve tek kararla sonuca varır. Akışta ise filtre henüz bitmemiş bir metin hakkında karar verir, zararlı örüntü birden çok parçaya bölünebilir ve gönderilen parça geri çağrılamaz. Çözüm, sunucu tarafında kısa bir tampon, bölünmüş örüntüler için geri tutma penceresi, kural ve model tabanlı denetimin birlikte çalışması ve yanıt bittiğinde tam metin üzerinde son kontroldür.

Streaming LLM güvenliği neden ayrı bir sorun?

Akış yanıtı kullanıcı deneyimini iyileştirir, ama güvenlik denetimini üç yönden zorlaştırır.

  • Bağlam eksikliği: Cümlenin sonu gelmediği için bir ifadenin zararlı mı zararsız mı olduğu belirsizdir.
  • Bölünmüş örüntü: Bir kimlik numarası, IBAN, bağlantı ya da komut iki parçaya ayrılabilir ve her parça tek başına masum görünür.
  • Geri alınamazlık: Parça kullanıcıya ulaştığında okunmuş, kopyalanmış ya da başka bir sisteme aktarılmış olabilir.

OWASP LLM10:2026 Improper Output Handling maddesi, model çıktısının aşağı akış sistemlere doğrulanmadan aktarılmasını ayrı bir risk olarak tanımlar. Akışta bu risk büyür, çünkü aşağı akış sistemler eksik ya da henüz denetlenmemiş metni alabilir. Çıktı korumasının genel mimarisi için runtime LLM guardrails yazısına bakabilirsiniz. Bu yazı akışa özgü kısmı ele alır: filtrenin ne zaman, hangi birimle ve hangi modda çalışacağı.

Sağlayıcılar akışta filtreyi nasıl uyguluyor?

Büyük bulut sağlayıcıları ve açık kaynak guardrail çatıları aynı ikilemi farklı adlarla çözüyor: önce denetle sonra gönder, ya da önce gönder sonra denetle.

ÇözümVarsayılan davranışHızlı seçenekBelgelenen bedel
Azure OpenAI içerik filtresiYanıt tamponlanır, denetlenir, parçalar halinde gönderilirAsynchronous Filter: tamponsuz, token token akışİhlal sinyali yaklaşık 1.000 karakterlik pencere içinde gecikmeli gelir, zararlı içerik görüntülenebilir
Amazon Bedrock GuardrailsSenkron mod: parçalar politikadan geçtikten sonra gönderilirstreamProcessingMode: ASYNCHRONOUSParçalar tarama bitene kadar uygunsuz içerik taşıyabilir, asenkron modda hassas bilgi maskeleme desteklenmez
NVIDIA NeMo Guardrails çıktı raylarıchunk_size: 200, context_size: 50 tokenstream_first: True varsayılandırParça raylardan önce istemciye gider, ihlal anında akış hata ile kesilir

Bu tablodan iki pratik sonuç çıkar. Birincisi, asenkron mod seçildiğinde istemci tarafında geri çekme mekanizması kurmak zorunlu hale gelir. Azure belgeleri de bu modda uygulamanın içerik geri çekmeyi kendisinin uygulamasını önerir. İkincisi, açık kaynak çatıların varsayılanlarını mutlaka okuyun. NeMo Guardrails'te stream_first varsayılan olarak açıktır. Bu ayar değiştirilmezse kullanıcı, raylar engellese bile o parçayı almış olur.

AI firewall akış yanıtını çalışma anında nasıl denetler?

Kurumsal okurların sık sorduğu soru, bir AI firewall'un girdi ve çıktıyı çalışma anında nasıl filtrelediğidir. Girdi tarafı görece basittir: istem modele gitmeden önce bütünüyle elde vardır. Çıktı tarafında akış devreye girdiğinde firewall bir boru hattı gibi çalışmalıdır:

  1. Tampon: Model parçaları sunucuda birikir, belirli bir boyuta ulaşınca denetlenir.
  2. Kural katmanı: Her tamponda hızlı örüntü taraması yapılır: TCKN, IBAN, kart numarası, API anahtarı, izin listesi dışı bağlantı.
  3. Geri tutma penceresi: Tamponun son kısmı gönderilmez, bir sonraki parçayla birlikte yeniden taranır.
  4. Model katmanı: Anlam düzeyindeki denetim her parçada değil, belirli aralıklarla ve yanıtın sonunda çalışır.
  5. Karar: İzin ver, bekle, maskele ya da kes. Her karar kayda geçer.
TAMPON = 400    # karakter, risk sınıfına göre ayarlanır
GERI_TUT = 64   # aranan en uzun örüntüden uzun olmalı (TR IBAN 26 karakter)

async def guvenli_akis(model_akisi, istemci):
    bekleyen = ""
    async for parca in model_akisi:
        bekleyen += parca
        if len(bekleyen) < TAMPON:
            continue
        sonuc = kural_tara(bekleyen)          # TCKN, IBAN, anahtar, URL
        if sonuc.kes:
            await model_akisi.iptal()
            return await istemci.durdur("yanit_durduruldu")
        metin = sonuc.maskelenmis
        await istemci.gonder(metin[:-GERI_TUT])
        bekleyen = metin[-GERI_TUT:]          # kuyruk sonraki parçayla taranır
    son = kural_tara(bekleyen)
    if son.kes:
        return await istemci.durdur("yanit_durduruldu")
    await istemci.gonder(son.maskelenmis)
    await istemci.tamamla(son_kontrol="model_tabanli")

Firewall'un gecikme bütçesini nasıl böldüğü ve hata durumunda açık mı kapalı mı kalacağı için LLM firewall iç mimarisi yazısına bakabilirsiniz.

Parça bazlı filtre neleri kaçırır?

Parça bazlı filtre, her parçayı tek başına değerlendirdiği için şu durumları kaçırır:

Kaçırma biçimiÖrnekÖnlem
Bölünmüş kişisel veriTCKN'nin ilk altı hanesi bir parçada, kalanı sonrakindeGeri tutma penceresi
Bölünmüş bağlantıAlan adı ve yol ayrı parçalardaBağlantıyı tamamlanana kadar göstermeme
Yavaş inşa edilen içerikHer biri masum görünen adımlardan oluşan zararlı listeAralıklı ve son model denetimi
Biçimlendirme sinyaliKod bloğu ya da görsel sözdizimi sonradan kapanırAkış sırasında düz metin gösterimi
Türkçe ek yapısıKök ile ek farklı parçalardaSözcük sınırında denetim

Kişisel veri maskeleme gerekiyorsa senkron mod tek güvenli seçenektir. Bedrock'un asenkron modda maskelemeyi desteklememesi bunun tipik örneğidir. Türkçe trafikte TCKN ve IBAN maskeleme kuralları için KVKK uyumlu PII maskeleme yazısına bakabilirsiniz.

Arayüz akış sırasında neyi göstermeli?

Arayüz, denetlenmemiş metni zengin biçimde göstermemelidir. Arayüz akış sırasında Markdown yorumluyorsa görsel bağlantısı gelir gelmez tarayıcı bir istek gönderebilir ve veri adresin içinde dışarı çıkabilir. Bu zincirin ayrıntısı Markdown ve görsel render ile veri sızdırma yazısında anlatılır.

  • Akış sırasında bağlantıları tıklanabilir yapmayın, görselleri yüklemeyin.
  • Yanıt tamamlanıp son kontrol geçince biçimlendirmeyi açın.
  • İzin listesi dışındaki alan adlarına giden bağlantıları son kontrolde kaldırın.
  • İhlal bulunursa görünen metni kısa ve nötr bir uyarıyla değiştirin, nedenin ayrıntısını göstermeyin.
  • Akışı kesme düğmesi ekleyin ve sunucu tarafında üretimi gerçekten iptal edin.

Hangi mod hangi kullanım için seçilmeli?

Mod seçimini ürün ekibine bırakmayın. Kullanım sınıfına göre yazılı bir karar verin.

KullanımÖnerilen modGerekçe
Müşteriye açık asistan, düzenlenmiş sektörSenkron, büyük tamponDenetlenmemiş metin gösterilmez
Kişisel veri işleyen yanıtlarSenkron, maskeleme açıkAsenkron modda maskeleme güvenilmez
Finansal, tıbbi ya da hukuki yönlendirmeAkışsız ya da tam yanıt kontrolüHatanın bedeli gecikmeden büyük
İç geliştirici aracıAsenkron ve istemci tarafı geri çekmeGecikme öncelikli, kitle sınırlı
Genel bilgi sohbetiSenkron, küçük tamponDenge

Azure belgeleri de varsayılan modu azami güvenlik ve uyum gerektiren, içerik geri çekmeyi kaldıramayan uygulamalar için, asenkron modu düşük gecikmenin kritik olduğu ve ek güvenlik kontrollerinin bulunduğu iç araçlar için önerir.

Arıza, iptal ve kayıt nasıl ele alınır?

Filtre servisi yanıt vermezse akış güvenli tarafta kalmalıdır. Varsayılan davranış "kapalı kal" olmalı, yani denetlenemeyen içerik gönderilmemelidir. Düşük riskli sohbette "açık kal" seçilebilir, ama bu karar yazılı ve bilinçli verilmelidir.

DurumÖnerilen davranış
Filtre servisi yanıt vermiyorAkışı durdur, genel hata mesajı göster
İhlal sonradan bulunduGörünen metni değiştir, kaydet, uyarı üret
Kullanıcı sekmeyi kapattıModel üretimini iptal et
Yanıt yarıda kesildiEksik olduğunu belirt, aşağı akışa aktarma

İptal maliyet açısından da önemlidir. Azure belgelerine göre akış sırasında içerik filtresi tetiklendiğinde, filtrelemeden önce üretilen tamamlama token'ları da ücretlendirilir. Kayıt tutarken filtrenin yakaladığı hassas değeri olduğu gibi yazmayın. Kuralın adını, kategorisini, model ve istem sürümünü saklayın, değeri maskeleyin. Merkezi kayıt ve politika katmanı için LLM gateway nedir yazısına bakabilirsiniz.

Akış filtresi nasıl test edilir?

Birçok ekip filtreyi tam yanıt üzerinde test eder, oysa üretimde parçalı çalışır. Testi gerçek akışla yapın ve bölünmüş örüntüleri bilerek üreten girdiler hazırlayın.

  1. Sentetik TCKN ve IBAN değerlerini parça sınırına denk gelecek biçimde bölün ve maskelemeyi doğrulayın.
  2. Görsel ve bağlantı sözdizimini akış ortasında kapanacak şekilde üretip arayüzün istek göndermediğini kontrol edin.
  3. Filtre servisini kapatıp akışın durduğunu doğrulayın.
  4. Kullanıcı iptalinden sonra sunucuda üretimin sonlandığını ölçün.
  5. İlk token süresi ile kaçırma oranını farklı tampon boyutlarında karşılaştırın.

Aşırı red de izlenmelidir. Çok sıkı bir filtre meşru yanıtları keser ve kullanıcıyı başka araçlara yöneltir.

Sık Sorulan Sorular

Akış yanıtında filtreyi nerede çalıştırmalıyım?

Sunucu tarafında, parçalar istemciye gitmeden önce çalıştırın. İstemcideki bir filtre atlanabilir ve parça tarayıcıya zaten ulaşmıştır. Önerilen düzen, kısa bir tampon tutmak, tampondaki metni denetlemek, yalnız onaylanan kısmı göndermek ve yanıt bitince tam metni bir kez daha taramaktır. Asenkron mod seçilirse istemci tarafı geri çekme mekanizması da kurulmalıdır.

Senkron ve asenkron filtre modu arasındaki fark nedir?

Senkron modda filtre parçaları tamponlar, denetler ve ancak politikaya uyan kısmı gönderir. Gecikme biraz artar ama kullanıcı denetlenmemiş metin görmez. Asenkron modda parçalar hemen gönderilir, filtre arka planda çalışır ve ihlal sinyali sonradan gelir. Azure ve Amazon Bedrock belgeleri asenkron modda uygunsuz içeriğin tarama tamamlanmadan kullanıcıya ulaşabileceğini açıkça belirtir.

Tamponu büyütmek gecikmeyi nasıl etkiler?

Tampon büyüdükçe ilk sözcük daha geç görünür, ama filtre daha fazla bağlam görür ve daha isabetli karar verir. NeMo Guardrails belgeleri de büyük parçanın daha az denetim çalıştırıp daha geç ilk çıktı verdiğini, küçük parçanın ise ilk çıktıyı hızlandırdığını anlatır. Hassas konularda büyük, genel sohbette küçük tampon seçin ve değeri kendi trafiğinizle ölçün.

Akış yanıtında kişisel veri nasıl yakalanır?

Kişisel veri örüntüleri parçalara bölünebilir. Bir kimlik numarasının ya da IBAN'ın yarısı bir parçada, kalanı sonrakinde gelir ve parça bazlı filtre bunu kaçırır. Çözüm, metnin son kısmını aranan en uzun örüntüden uzun bir geri tutma penceresinde bekletmek ve bir sonraki parçayla birlikte taramaktır. Maskeleme gerekiyorsa senkron mod kullanılmalıdır.

Gönderilmiş bir parça geri alınabilir mi?

Tam olarak alınamaz. Arayüz, filtre sonradan ihlal bulursa görünen metni silebilir ya da nötr bir uyarıyla değiştirebilir, ama kullanıcı metni okumuş, kopyalamış ya da ekran görüntüsü almış olabilir. Arayüz metni bir sisteme aktarmışsa etki daha da büyür. Bu yüzden riskli içerikte önleme, geri çekmeye göre her zaman daha güçlü bir kontroldür.

Kaynaklar

İlgili Yazılar