Yapay Zeka Uygulamalarında Birim Test Devri: Ragas ve DeepEval ile RAG Metriklerini Değerlendirme
Yapay Zeka Uygulamalarında Birim Test Devri: Ragas ve DeepEval ile RAG Metriklerini Değerlendirme
Büyük Dil Modelleri (LLM) ve Vektör Veritabanları üzerine kurulu RAG (Retrieval-Augmented Generation / Bilgi Çekmeyle Artırılmış Üretim) mimarileri, kurumsal yapay zeka çözümlerinin omurgası haline geldi. Ancak yazılım dünyasında yıllardır uyguladığımız "kod yaz, test et ve canlıya al" disiplini, konu LLM’lere geldiğinde uzun süre göz ardı edildi.
Birçok ekip, RAG sistemlerinin başarısını birkaç manuel sorgu yapıp "Harika çalışıyor!" diyerek (yani hissedilen kaliteye dayanarak - vibe checking) değerlendirme hatasına düşüyor. Oysa deterministik olmayan (her defasında farklı yanıtlar üretebilen) bu sistemlerde, geleneksel assert result == expected yaklaşımı çalışmaz.
Peki, bir RAG uygulamasının doğru bilgi getirdiğinden, halüsinasyon görmediğinden ve kullanıcı sorusuna gerçekten odaklandığından nasıl emin olacağız? İşte bu noktada devreye RAG değerlendirme metrikleri ve bu metrikleri otomatize eden Ragas ile DeepEval gibi birim test (unit test) kütüphaneleri giriyor.
RAG Sistemlerinde Test Neden Bu Kadar Zor?
Geleneksel yazılımlarda girdi ve çıktı bellidir. Bir toplama fonksiyonuna 2 ve 2 verirseniz, sonucun 4 olmasını beklersiniz. LLM temelli sistemlerde ise durum karmaşıktır:
- Belirsizlik (Non-determinism): Aynı soruya farklı zamanlarda verilen yanıtların kelimeleri değişebilir.
- İki Aşamalı Hata Riski:
- Vektör Arama (Retrieval) Hatası: Sistem, veritabanından yanlış veya yetersiz bağlam (context) çekebilir.
- Üretim (Generation) Hatası: Sistem doğru bağlamı alsa bile bunu yanlış yorumlayabilir veya halüsinasyon görebilir.
- Ölçekleme Zorluğu: Yüzlerce dokümana ve binlerce olası kullanıcı sorgusuna sahip bir sistemi manuel olarak doğrulayamazsınız.
Bu sorunları aşmak için RAG mimarisini bileşenlerine ayırıp otomatize metriklerle test etmemiz gerekir.
RAG Değerlendirme Üçlüsü (RAG Triad)
Bir RAG sisteminin kalitesini ölçerken genellikle LLM-as-a-Judge (Hakem Olarak LLM) yaklaşımı kullanılır. Yani güçlü bir LLM (örneğin GPT-4o), geliştirilen RAG sisteminin çıktılarını belirli ölçütlere göre puanlar.
Bu değerlendirmenin temelini RAG Üçlüsü oluşturur:
[ Kullanıcı Sorgusu ]
/ \
/ \
(Yanıt İlgililiği) (Bağlam İsabetliliği)
/ \
v v
[ Üretilen Yanıt ] <---> [ Getirilen Bağlam ]
(Sadakat / Halüsinasyon)
- Bağlam İsabetliliği (Context Precision / Relevance): Getirilen belgeler kullanıcının sorusuyla ne kadar alakalı? Veritabanından gereksiz gürültü çekilmiş mi?
- Sadakat / Halüsinasyon Kontrolü (Faithfulness): Üretilen yanıt, sadece veritabanından getirilen bağlamdaki bilgilere mi dayanıyor? Yanıt bağlamda olmayan uydurma bilgiler içeriyor mu?
- Yanıt İlgililiği (Answer Relevance): Üretilen yanıt, kullanıcının orijinal sorusuna doğrudan ve eksiksiz bir cevap veriyor mu?
Ragas: RAG Metriklerinde Endüstri Standardı
Ragas (Retrieval Augmented Generation Assessment), RAG boru hatlarınızı (pipeline) değerlendirmek için özel olarak geliştirilmiş en popüler açık kaynaklı kütüphanelerden biridir.
Ragas, RAG üçlüsüne ek olarak Context Recall (Sistem gerekli tüm bilgiyi getirdi mi?) ve Semantic Similarity (Anlamsal Benzerlik) gibi gelişmiş metrikler de sunar.
Ragas Kullanım Örneği
Aşağıdaki Python kodunda, Ragas kullanarak bir RAG çıktısının Sadakat (Faithfulness) ve Yanıt İlgililiği (Answer Relevance) metriklerini nasıl otomatize test edebileceğinizi görebilirsiniz:
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevance
from datasets import Dataset
# Test verisetimiz (Golden Dataset)
data_samples = {
'question': ['Şirketin yıllık izin politikası nedir?'],
'contexts': [['Çalışanlar kıdem yılına göre 14 ile 26 gün arasında yıllık ücretli izne hak kazanır.']],
'answer': ['Şirket çalışanlarına kıdemlerine göre 14 ila 26 gün yıllık izin vermektedir.'],
}
dataset = Dataset.from_dict(data_samples)
# Değerlendirmeyi çalıştır
score = evaluate(
dataset,
metrics=[
faithfulness,
answer_relevance,
],
)
df = score.to_pandas()
print(df[['faithfulness', 'answer_relevance']])
Bu kod çalıştığında Ragas, arka planda bir hakem LLM kullanarak 0 ile 1 arasında metrik puanları üretir. Örneğin faithfulness: 1.0 ise yanıt tamamen verilen bağlama sadıktır.
DeepEval: Yapay Zeka Uygulamaları İçin Pytest Gücü
DeepEval (Confident AI tarafından geliştirilen), LLM uygulamaları için adeta bir pytest deneyimi sunar. Geleneksel yazılım mühendislerinin alışkın olduğu test yazım tarzını yapay zeka metrikleriyle birleştirir.
DeepEval’ın en büyük avantajı, CI/CD süreçlerine ve mevcut pytest altyapılarına çok kolay entegre edilebilmesidir.
DeepEval ile Birim Test Yazımı
test_rag.py adında bir dosya oluşturup aşağıdaki testi yazabilirsiniz:
import pytest
from deepeval import assert_test
from deepeval.metrics import FaithfulnessMetric, AnswerRelevancyMetric
from deepeval.test_case import LLMTestCase
def test_rag_quality():
query = "Şirket içi eğitim bütçesi ne kadar?"
retrieved_context = ["Her çalışan için yıllık eğitim bütçesi 1000 Dolar olarak belirlenmiştir."]
actual_output = "Şirket her çalışana yıllık 1000 Dolar eğitim bütçesi ayırmaktadır."
test_case = LLMTestCase(
input=query,
actual_output=actual_output,
retrieved_context=retrieved_context
)
# Eşik değerimiz (threshold) 0.7. Bu değerin altındaki puanlar testi başarısız sayar.
faithfulness_metric = FaithfulnessMetric(threshold=0.7)
relevancy_metric = AnswerRelevancyMetric(threshold=0.7)
assert_test(test_case, [faithfulness_metric, relevancy_metric])
Terminalde sadece pytest test_rag.py komutunu çalıştırarak RAG sisteminizin belirlediğiniz kalite standartlarını geçip geçmediğini görebilirsiniz.
Ragas vs. DeepEval: Hangisini Seçmelisiniz?
İki araç da harika iş çıkarsa da kullanım senaryolarına göre belirgin farkları vardır:
| Özellik | Ragas | DeepEval |
|---|---|---|
| Odak Noktası | RAG metrikleri ve akademik/araştırma odaklı değerlendirme | Üretim (Production) ortamı, CI/CD entegrasyonu ve Pytest uyumu |
| Geliştirici Deneyimi | Jupyter Notebook ve Veri Bilimi odaklı | Klasik Yazılım / QA Mühendisi odaklı |
| CI/CD Entegrasyonu | Mümkün (Custom script gerektirebilir) | Doğal (Pytest ve Confident AI Platform desteği) |
| Metrik Çeşitliliği | RAG özelinde çok zengin | RAG + Görüntü, Ses, Hallucination, Toxicity vb. geniş yelpaze |
- Tavsiye: Veri bilimi ekibiniz RAG bileşenlerini (Embedding, Chunk size, Top-K) optimize etmeye çalışıyorsa Ragas ile başlamak harika bir seçimdir. Ancak amacınız CI/CD hattına (Pipeline) otomatize testler koyup regrasyonu (gerilemeyi) önlemekse DeepEval daha pratik bir geliştirici deneyimi sunar.
CI/CD Süreçlerine RAG Testlerini Dahil Etme Rehberi
RAG sisteminizi canlıya alırken tıpkı geleneksel yazılımlarda olduğu gibi bir Sürekli Entegrasyon (CI) mimarisi kurmalısınız. İşte izlenmesi gereken adımlar:
- Altın Veriseti (Golden Dataset) Oluşturun: Sisteminizin yanıtlamasını beklediğiniz en az 50-100 adet kritik soru, ideal bağlam ve ideal yanıttan oluşan bir veri seti hazırlayın.
- Maliyet Etkin Hakem LLM Kullanın:
Testleri her commit/PR aşamasında çalıştırırken GPT-4o gibi pahalı modeller yerine
gpt-4o-miniveya lokal olarak çalışanLlama-3-8Bgibi modelleri hakem (evaluator) olarak tanımlayarak maliyetleri düşürün. - Eşik Değerler (Thresholds) Belirleyin:
CI/CD pipeline'ınızın geçmesi için örneğin
Faithfulness > 0.85veContext Precision > 0.80şartı koşun. - Regrasyon Testlerini Otomatize Edin: Prompt üzerinde ufak bir değişiklik yaptığınızda veya vektör veritabanı parametresini değiştirdiğinizde tüm testleri tekrar çalıştırarak sistem kalitesinin düşmediğinden emin olun.
Sonuç
Yapay zeka uygulamalarında "Bence güzel çalışıyor" dönemi sona erdi. Müşteriye sunulan veya kurum içi kullanılan RAG sistemlerinin güvenilirliği, ancak ve ancak ölçülebilir ve otomatize edilmiş test süreçleriyle garanti altına alınabilir.
Ragas ve DeepEval gibi araçlar, LLM geliştirme süreçlerini bir "simya" olmaktan çıkarıp deterministik yazılım mühendisliği standartlarına yaklaştırıyor. Projenize bugün bir RAG birim testi ekleyerek halüsinasyon risklerini canlıya çıkmadan engellemeye başlayabilirsiniz.
Siz RAG sistemlerinizin kalitesini nasıl ölçüyorsunuz? LLM-as-a-Judge yaklaşımını projelerinizde deneme fırsatınız oldu mu? Yorumlarda deneyimlerinizi paylaşın!