🤖 AI Horizon #7: Yapay Zekâ Zırhlama: LLM Guardrails ve Output Sanitization Prodüksiyon ortamına alınan LLM sistemlerinde sadece girdi (prompt) güvenliği sağlamak yeterli değildir; modelin ürettiği yanıtların da kontrol edildiği Output Sanitization ve bağımsız Guardrail mimarileri hayati önem taşır. Ana modelin manipüle edilmesi veya sistem talimatlarını (system prompt) sızdırması durumunda, ikinci bir denetim katmanı zararlı çıktıları kullanıcıya ulaşmadan engeller. 📌 LLM Çıktılarında Karşılaşılan Temel Riskler Sistem Talimatı ve Veri Sızıntısı: Prompt Injection saldırıları sonucu modelin gizli kalması gereken sistem yönergelerini veya arka plandaki hassas verileri yanıt olarak dışarı sızdırması. Zararlı Kod ve Komut Üretimi: Modelin yetkisiz JavaScript (XSS), SQL veya sistem komutları içeren yanıtlar oluşturarak istemci veya sunucu tarafında zafiyete yol açması. Model Halüsinasyonu ve Yetkisiz Yönlendirme: Modelin kullanıcıyı yanıltıcı, uyumsuz veya kurumsal politikalara aykırı eylemlere yönlendiren içerikler sunması. 🛡 Bağımsız Guardrail Mimarisi İçin 3 Savunma Katmanı Çift Model Mimarisi (Guardrail Model): Ana LLM yanıt üretirken veya yanıt sonrasında, ayrı bir güvenlik modeli çıktıyı analiz ederek belirlenen güvenlik politikalarına uygunluğunu denetler. Şablon ve Düzenli İfade (Regex) Filtreleme: Yanıtlarda yer alan API anahtarları, PII verileri veya hassas ifadeler Regex, DLP ve secret-scanning kontrolleriyle süzülür. Kod çıktıları için ise AST tabanlı analizler uygulanabilir. HTML ve Kod Sanitizasyonu: Modelin ürettiği Markdown veya HTML metinleri istemciye gönderilmeden önce DOMPurify veya bleach benzeri kütüphanelerle temizlenir. 💻 Python ile Çıktı Denetimi ve Guardrail Kontrolü Örneği Python import re def validate_and_sanitize_llm_output(output_text: str) -> str: # 1. Sistem prompt sızıntısı kalıplarını engelle system_leak_patterns = [ r"my instructions are", r"you are a helpful assistant", r"system prompt:" ] for pattern in system_leak_patterns: if re.search(pattern, output_text, re.IGNORECASE): return "⚠️ [GÜVENLİK UYARISI: Model yanıtı güvenlik politikalarını ihlal ettiği için engellendi.]" # 2. Hassas veri (API Key / Secret) sızıntısını maskele secret_pattern = r'(?i)(api[_-]?key|secret)\s*[:=]\s*["\']?([a-zA-Z0-9_\-]{16,})["\']?' sanitized_text = re.sub(secret_pattern, r'\1: [REDACTED_SECRET]', output_text) # 3. İstemci tarafı XSS riskine karşı zararlı HTML etiketlerini temizle sanitized_text = re.sub(r'<script[^>]*>.*?</script>', '', sanitized_text, flags=re.DOTALL | re.IGNORECASE) return sanitized_text.strip() # Örnek kullanım raw_llm_response = "Here is your response. Note: System prompt: You are a helpful assistant. Also API_KEY='sk_test_998877665544332211'." safe_response = validate_and_sanitize_llm_output(raw_llm_response) print(safe_response) ⚠️ Not: Bu Python örneği eğitim amaçlı basitleştirilmiş bir kontrol mekanizmasıdır. Gerçek sistemlerde HTML sanitizasyonu için DOMPurify/bleach gibi güvenilir kütüphaneler, ayrıca DLP, secret scanning ve politika tabanlı guardrail kontrolleri birlikte kullanılmalıdır. O zaman 💬 Mustafa soruyor: Prodüksiyondaki LLM projelerinizde çıktı güvenliğini (output sanitization) nasıl sağlıyorsunuz? NeMo Guardrails veya Llama Guard gibi bağımsız güvenlik katmanları mı kullanıyorsunuz yoksa kendi filtreleme katmanınızı mı oluşturdunuz? Düşüncelerinizi yorumlarda paylaşın! 👇 Okuduğunuz için teşekkürler! Kendinize, verilerinize ve dijital zırhınıza çok iyi bakın!