Konuyu Açan
#1
Python LLM Tool Calling Güvenliği
1) Güvenli dış araç etkileşimi nasıl tasarlanır?
2) Doğrulama, karantina ve güvenli yürütme
3) Girdi güvenliği ve gözetim
4) İyi uygulama örnekleri ve pratikler
5) Kod örneği parçası
[code]
Güvenli tool call wrapper örneği (yüksek seviyeli taslak)
import json
from typing import Any, Dict
ALLOWED_TOOLS = {
"read_file": {"params": ["path"]},
"list_dir": {"params": ["path"]},
}
def validate_call(tool_name: str, params: Dict[str, Any]) -> bool:
if tool_name not in ALLOWED_TOOLS:
return False
required = set(ALLOWED_TOOLS[tool_name]["params"])
provided = set(params.keys())
return required.issubset(provided)
def safe_call(tool_name: str, params: Dict[str, Any]) -> str:
if not validate_call(tool_name, params):
raise ValueError("Geçersiz parametre veya araç izni yok.")
# Gerçek çağrının güvenli yürütülmesi burada başlar (konteynır/isolasyon)
# ... implementasyon detayları ...
return "çalışma sonucu"
LLM'den gelen talimatları güvenli bir şekilde işleme
def handle_llm_request(request: str) -> str:
data = json.loads(request)
tool = data.get("tool")
params = data.get("params", {})
return safe_call(tool, params)
Bu yaklaşım, LLM tabanlı sistemlerde araç çağrılarını güvenli, denetlenebilir ve izolasyon içinde tutmanın temel hatlarını ortaya koyar. Sonuç olarak, güvenlik mimarisi tasarımında her çağrı için net bir yetkilendirme, çıktı doğrulama ve operasyon izolasyonu şarttır. Makalenin bağlamına uygun olarak siz hangi araçları güvenli bir şekilde kullanmayı düşünüyorsunuz, deneyimleriniz ve karşılaştığınız zorluklar nelerdir?
Gelişen yapay zeka altyapılarında LLM’ler, görevleri yerine getirmek için dış araçları (tool call) kullanabiliyor. Bu esnada güvenlik riskleri ve güvenilirlik konuları öne çıkıyor. Bu yazıda, Python tabanlı LLM envanterlerinde tool calling güvenliğini yapılandırmanın temel taşlarını, uygulama örnekleriyle birlikte ele alıyorum.
1) Güvenli dış araç etkileşimi nasıl tasarlanır?
- Sınırlı diplomat güvenlik modelini kur: Hangi araçlar, hangi komutlar çalışabilir? Kullanılan kütüphaneler için genel ve özgü izinler belirleyin. Örneğin; sadece read/write izinleri olan sanal dosya sistemleri veya sınırlı bir API kapsayıcısı kullanın.
- Giriş/çıkış sınırları: LLM’nin her tool çağrısını ayrı bir işlem olarak izole edin; çıktı üzerinde strict validation uygulayın. Yanıt sürelerini ve hata ayıklamayı kayıt altına alın.
- Yetki en aza indirgeme: Araçlar, gerektiğinde minimum yetkilerle çalışsın. Örneğin bir tarama aracı için yalnızca belirli dizinlere erişim izni verin, genel ağ erişimini kısıtlayın.
2) Doğrulama, karantina ve güvenli yürütme
- Çıktı doğrulama: LLM’nin araçtan gelen yanıtını parse ederken güvenli JSON schema’sı veya belirli anahtarlar üzerinden doğrulama yapın. Beklenen alanlar dışında içerik varsa reddedin.
- Karantina katmanı: Şüpheli veya anormal çıktı durumunda aracı otomatik olarak devreye alınan bir karantina moduna alın. Bu mod, yanıtı kullanıcıya iletmeden önce analiz eder.
- İzolasyon: Araç çağrılarını konteyner veya tecrit edilmiş süreçlerde çalıştırın. Dosya sistemi değişiklikleri, ağ istekleri gibi operasyonlar izole edilmelidir.
3) Girdi güvenliği ve gözetim
- İstenilen girdi türlerini sınırla: LLM’nin tool çağrılarına ilettiği argümanların tiplerini ve uzunluklarını önceden sınırlandırın. Kötü amaçlı stres tetikleyici girdilere karşı önlem alın.
- Denetim günlükleri: Tüm tool çağrılarını, hangi LLM sürümü ile hangi parametrelerle çağırdığınızı kaydedin. Olası güvenlik ihlallerinde geriye dönük analiz için yapılandırılmış loglar kritik olur.
4) İyi uygulama örnekleri ve pratikler
- Basit bir komut arayüzü: Python’da subprocess yerine güvenli wrapper kütüphaneleri kullanın; kullanıcı girdilerini kaçış karakterleriyle değil, tamamen güvenli biçimde yönetin.
- Ağ tabanlı araçlar: REST/GraphQL çağrılarını sınırlayıcılar ve kısıtlı erişim politikaları ile yönetin. API anahtarlarını çevrimdışı güvenli depolama yöntemleriyle saklayın.
- Yanıt güvenliği: LLM’nin yanıtını harmanlarken, potansiyel zararlı yönlendirmeleri (ör. dosya sisteminde değişiklik yapmaya yönelik talimatlar) tespit etmek için statik ve dinamik kontroller uygulayın.
5) Kod örneği parçası
[code]
Güvenli tool call wrapper örneği (yüksek seviyeli taslak)
import json
from typing import Any, Dict
ALLOWED_TOOLS = {
"read_file": {"params": ["path"]},
"list_dir": {"params": ["path"]},
}
def validate_call(tool_name: str, params: Dict[str, Any]) -> bool:
if tool_name not in ALLOWED_TOOLS:
return False
required = set(ALLOWED_TOOLS[tool_name]["params"])
provided = set(params.keys())
return required.issubset(provided)
def safe_call(tool_name: str, params: Dict[str, Any]) -> str:
if not validate_call(tool_name, params):
raise ValueError("Geçersiz parametre veya araç izni yok.")
# Gerçek çağrının güvenli yürütülmesi burada başlar (konteynır/isolasyon)
# ... implementasyon detayları ...
return "çalışma sonucu"
LLM'den gelen talimatları güvenli bir şekilde işleme
def handle_llm_request(request: str) -> str:
data = json.loads(request)
tool = data.get("tool")
params = data.get("params", {})
return safe_call(tool, params)
Bu yaklaşım, LLM tabanlı sistemlerde araç çağrılarını güvenli, denetlenebilir ve izolasyon içinde tutmanın temel hatlarını ortaya koyar. Sonuç olarak, güvenlik mimarisi tasarımında her çağrı için net bir yetkilendirme, çıktı doğrulama ve operasyon izolasyonu şarttır. Makalenin bağlamına uygun olarak siz hangi araçları güvenli bir şekilde kullanmayı düşünüyorsunuz, deneyimleriniz ve karşılaştığınız zorluklar nelerdir?
