Büyük Dil Modelleri (LLM) tarafından desteklenen zeki ajanlar geliştirmek heyecan vericidir, ancak bunları titiz bir değerlendirmeden geçirmeden devreye almak, uçuş yolunu test etmeden bir roketi fırlatmaya benzer. Deterministik çıktılara sahip geleneksel yazılımların aksine, ajanlar deterministik olmayan, durumlu ortamlarda çalışır. Bu durum, standart birim testlerinin yetersiz kalmasına neden olur. Güvenilirliği, güvenliği ve maliyet verimliliğini sağlamak için, Ajan Değerlendirmesi için özel bir çerçeveye ihtiyacımız var.
Bu gönderi, yapay zeka ajanlarını değerlendirmenin temel boyutlarını, bunların sunduğu zorlukları ve sağlam test hatları oluşturmak için kod kullanarak pratik stratejileri ele alır.
Neden Geleneksel Testler Ajanlarda Başarısız Olur
Geleneksel yazılım geliştirmede, tam eşleşmelere veya katı iddialara (assertions) güveniriz. Bir fonksiyon 42 döndürürse, test geçer. Ancak ajan tabanlı sistemlerde amaç genellikle görev tamamlamaktır, çıktı eşleştirmesi değil. Bir ajan, doğru sonucu farklı yollarla elde edebilir veya halüsinasyonlu ara adımlar nedeniyle ince bir şekilde başarısız olabilir. Ayrıca, ajanlar kaynakları (token'ları) ve zamanı tüketir. Bu nedenle, değerlendirme çok boyutlu olmalı ve doğruluğu, verimliliği ve güvenliği dengelemelidir.
Ajan Değerlendirmesi İçin Temel Metrikler
Ajanları etkili bir şekilde değerlendirmek için birkaç kritik metriği izliyoruz:
- Görev Başarı Oranı: Ajan nihai hedefe ulaştı mı? Bu, ikili "evet/hayır" metriğidir, ancak hata ayıklama için genellikle çok kaba kalır.
- Araç Çağrısı Doğruluğu: Ajan, doğru parametrelerle doğru araçları seçti mi? Yanlış API çağrıları, başarısızlığın birincil kaynağıdır.
- Gecikme ve Maliyet: Kaç token tüketildi? Süreç ne kadar sürdü? Yüksek performanslı ajanlar gereksiz adımları en aza indirmelidir.
- Güvenlik ve Uyumluluk: Ajan, koruyucu sınırlara (guardrails) uydu mu? Zararlı veya hassas içerik üretmekten kaçındı mı?
Uygulama Stratejileri
Etkili değerlendirme, otomatik testlerin ve insan döngüsünde (HITL) incelemenin bir kombinasyonunu gerektirir. Aşağıda, bir değerlendirme hattının nasıl yapılandırılacağını göstermek için Python ve sahte bir LLM çerçevesi kullanılarak pratik bir örnek verilmiştir.
import json
import time
from dataclasses import dataclass
@dataclass
class EvaluationResult:
task_id: str
success: bool
tool_calls_correct: bool
latency_seconds: float
token_count: int
notes: str
class AgentEvaluator:
def __init__(self, agent, reference_data):
self.agent = agent
self.reference_data = reference_data # Doğruluk verisi (Ground truth data)
def run_evaluation(self, task_input):
start_time = time.time()
try:
# Ajanı çalıştır
response = self.agent.execute(task_input)
# Metrikleri çıkar
latency = time.time() - start_time
token_count = response.meta.get('token_usage', 0)
# 1. Görev Başarısını Kontrol Et
expected_output = self.reference_data.get('expected_final_state')
success = self._check_semantic_similarity(response.output, expected_output)
# 2. Araç Çağrılarını Kontrol Et
expected_tools = self.reference_data.get('expected_tool_sequence', [])
actual_tools = [call.name for call in response.tool_calls]
tool_acc = actual_tools == expected_tools
return EvaluationResult(
task_id=task_input['id'],
success=success,
tool_calls_correct=tool_acc,
latency_seconds=latency,
token_count=token_count,
notes="Otomatik değerlendirildi"
)
except Exception as e:
return EvaluationResult(
task_id=task_input['id'],
success=False,
tool_calls_correct=False,
latency_seconds=time.time() - start_time,
token_count=0,
notes=f"Hata: {str(e)}"
)
def _check_semantic_similarity(self, a, b):
# Üretimde, LLM-judge veya vektör benzerliği kullanın
return a.strip().lower() == b.strip().lower()
LLM-judge: İnsan Geri Bildirimini Ölçeklendirme
Binlerce ajan izini manuel olarak incelemek imkansızdır. "LLM-judge" deseni, bir modelin çıktısını değerlendirmek için güçlü bir model kullanarak bu sorunu ele alır. Bu yargıç modeli, tutarlılığı, gerçeklik değerini ve talimat takibini değerlendirir. Mükemmel olmasa da, bu yöntem insan tercihleriyle yüksek korelasyon gösterir ve ölçeklenebilir, sürekli değerlendirme imkanı sunar.
# Yargıç İstemi Şablonu Örneği
JUDGE_PROMPT = """
Uzman bir değerlendiricisiniz. [Ajan Çıktısı]nı [Doğruluk Verisi] ile karşılaştırın.
Doğruluğu 1-5 arası bir ölçekte puanlayın.
Sadece bir JSON nesnesi çıktı verin: {{"score": int, "reason": str}}
"""
Ajanlar İçin Sürekli Entegrasyon
Ajan değerlendirmesi, CI/CD hattınızın bir parçası olmalıdır. Bir istemi (prompt), araç tanımını veya model sürümünü her güncellediğinizde, temsilci görevlerden oluşan bir regresyon seti çalıştırın. Ana metrikleri panolarda izleyerek zaman içindeki sapmayı (drift) izleyin. Başarı oranı düşerse veya token maliyetleri artarsa, mühendislik ekibine derhal uyarı gönderin.
Sonuç
LLM ajanlarını değerlendirmek tek seferlik bir görev değil, sürekli bir disiplindir. Araç kullanımını belirleyen (deterministik) kontrolleri, nihai çıktılar için anlamsal değerlendirmeyi ve maliyet/gecikme izlemeyi birleştirerek, otonom sistemlere güven inşa edebilirsiniz. Yüksek değerli test vakalarından oluşan özenle seçilmiş küçük bir setle başlayın, metriklerinizi otomatikleştirin ve sürekli tekrarlayın. Ne kadar çok değerlendirme yaparsanız, ajanlarınız o kadar güvenilir hale gelir; bu da üretim ortamlarında güvenli ve etkili dağıtımın önünü açar.