Ajana "komut çalıştır" aracı vermeyin
- Agentic AI
- AI Güvenliği
Ajan sistemlerinde en çok pişman olunan karar genelde ilk gün alınıyor: modele kabuk erişimi verip gerisini ona bırakmak. Kısa vadede harika çalışıyor. Altı ay sonra "bu sistem ne yapabilir" sorusuna kimsenin cevap veremediğini fark ediyorsunuz.
Şu ikisi arasındaki fark modelin zekâsıyla ilgili değil:
run_command(host: string, command: string) -> string
restart_service(host: HostId, service: ServiceName) -> RestartResult
Birincisinde "ajan ne yapabilir" sorusunun cevabı "her şey". Yetki kontrolü yazmak için command içindeki metni ayrıştırmanız, yani doğal dili güvenlik sınırı olarak kullanmanız gerekiyor. Yürümüyor.
İkincisinde cevap sonlu. ServiceName bilinen bir kümeden geliyor, HostId envanterde doğrulanıyor, çağrı katmanı iznini bu iki parametreye bakarak veriyor. Metin okumuyor.
Beklenen itiraz, dar araçların esnekliği öldürdüğü. Bizde tersi oldu. Geniş araçta model her çağrıda doğru komutu sıfırdan kuruyor - her seferinde yeni bir hata fırsatı. Dar araçta yalnızca hangi aracı seçeceğine ve iki parametreye karar veriyor. Geriye tek bir yanlış kalıyor: hedefi yanlış seçmek, o da envanterle yakalanıyor.
Bedeli gerçek: araç sayısı artıyor ve otuza yaklaştığınızda model doğru olanı seçmekte zorlanıyor. İşe yarayan çözüm araç sayısını azaltmak değil, modelin bir seferde gördüğü araç sayısını azaltmak oldu. Oturumun bağlamına göre küme daraltılıyor; model otuzunu birden görmüyor.
Kullandığımız kural şu: bir aracın ne yapabileceğini tek cümleyle ve "her şey" demeden anlatamıyorsanız, o araç fazla geniştir.
Prompt'a ne yazarsanız yazın model ikna edilebiliyor. İmza ikna edilemiyor.