Geleneksel yazılım mühendisliğinde 2 + 2 == 4 birim testi (Unit Test) her zaman kesin bir doğru/yanlış sonucu verir. Ancak yapay zeka uygulamalarında sistem promptunda değiştirdiğiniz tek bir kelime, bir sorunun cevabını iyileştirirken başka 50 soruda modelin uydurma (halüsinasyon) üretmesine yol açabilir. GitHub üzerinde confident-ai/deepeval deposuyla standartlaşan DeepEval, yapay zeka çıktılarını matematiksel metriklerle ölçerek pytest boru hattınıza dahil etmenizi sağlar.
RAG Üçgeni (The RAG Triad): Ölçmeniz Gereken 4 Kritik Metrik
| Değerlendirme Metriği | Neyi Ölçer? | Düşük Puanın Gösterdiği Arıza | Çözüm Yöntemi |
|---|---|---|---|
| 1. Bağlam Hassasiyeti (Context Precision) | Vektör veritabanından gelen belgelerin soruyla ne kadar alakalı olduğu | Arama motoru gürültülü ve alakasız paragraflar getiriyor | Chunk boyutunu küçültün veya Cross-Encoder Reranker ekleyin |
| 2. Bağlam Kapsamı (Context Recall) | Doğru cevabın veritabanından çekilen belgelerde eksiksiz bulunup bulunmadığı | Kritik bilgi veritabanında kalmış, LLM'e hiç ulaşmamış | Top-K değerini artırın veya LightRAG hibrit aramasına geçin |
| 3. Sadakat (Faithfulness / Anti-Hallucination) | LLM'in ürettiği cevabın yalnızca verilen belgeye dayanıp dayanmadığı | Model belgede olmayan şeyleri kendi kafasından uyduruyor! | Temperature değerini 0.0 - 0.2 aralığına çekin ve sistem promptunu sıkılaştırın |
| 4. Yanıt İlgililiği (Answer Relevancy) | Üretilen cevabın kullanıcının asıl sorusunu doğrudan yanıtlayıp yanıtlamadığı | Model doğru bilgiler veriyor ama sorulan sorunun etrafında dolaşıyor | Prompt Stüdyosu şablonlarıyla çıktı formatını zorunlu kılın |
Adım 1: DeepEval Kurulumu
pip install deepeval
Adım 2: Pytest ile Otomatik Halüsinasyon ve Sadakat Testi Yazma (`test_rag.py`)
Aşağıdaki test dosyası, RAG asistanınızın cevabında %80'in altında sadakat (yani %20'den fazla halüsinasyon) tespit ederse CI/CD dağıtımını otomatik olarak durdurur:
import pytest
from deepeval import assert_test
from deepeval.metrics import FaithfulnessMetric, AnswerRelevancyMetric
from deepeval.test_case import LLMTestCase
def test_evren_rag_dogrulugu():
# 1. Kullanıcının Sorusu
soru = "EVREN platformunda kaç adet H200 GPU bulunmaktadır ve ağ hızı nedir?"
# 2. Vektör Veritabanından (Qdrant) Çekilen Gerçek Bağlam
cekilen_belgeler = [
"T.C. Savunma Sanayii Başkanlığı EVREN platformu 64 adet NVIDIA H200 (141 GB) GPU ve InfiniBand NDR 400G ağı üzerinde çalışır."
]
# 3. Sizin RAG Sisteminizin Ürettiği Yanıt
sistem_yaniti = "EVREN platformu 64 adet NVIDIA H200 GPU kullanır ve 400 Gbps InfiniBand NDR ağına sahiptir."
# 4. Metrik Tanımları (Eşik Değer: Minimum %85 Başarı)
sadakat_metrigi = FaithfulnessMetric(threshold=0.85, include_reason=True)
ilgililik_metrigi = AnswerRelevancyMetric(threshold=0.85, include_reason=True)
test_senaryosu = LLMTestCase(
input=soru,
actual_output=sistem_yaniti,
retrieval_context=cekilen_belgeler
)
# 5. Otomatik Doğrulama (Başarısız olursa dağıtımı engeller)
assert_test(test_senaryosu, [sadakat_metrigi, ilgililik_metrigi])
Adım 3: Terminalde ve GitHub Actions'ta Testleri Koşma
# 4 paralel iş parçacığı ile tüm yapay zeka testlerini çalıştırın:
deepeval test run test_rag.py -n 4
Yerel bilgisayarınızda OpenAI API ücreti ödemeden değerlendirme yapmak isterseniz deepeval set-ollama deepseek-r1:14b komutuyla hakem modeli (LLM-as-a-Judge) doğrudan kendi yerel DeepSeek-R1 modelinize yönlendirebilirsiniz.