rag-critic İnşası: LangGraph'ta Olgusal Dayanaklandırma ve Çekişmeli Halüsinasyon Denetimi
Kaynak: dev.to

İçindekiler 4 başlık
Üretim ortamında çalışan Retrieval-Augmented Generation (RAG) boru hatları geliştirirken karşılaşılan en büyük başarısızlık noktası, veri getirme gecikmesi (retrieval latency) veya vektör indeks boyutu değil; sessiz halüsinasyonlardır. Büyük Dil Modelleri (LLM'ler), getirilen referans metin parçaları (chunks) tarafından hiçbir şekilde desteklenmeyen ancak son derece akıcı ve ikna edici görünen iddialar üretebilir. Çok ajanlı (multi-agent) sistemlerde ve kritik iş akışlarında, dayanağı olmayan bir taslağı kabul etmek sonraki karar alma süreçlerini tamamen bozabilir.
Döngüsel çok ajanlı граflarda bu sorunu çözmek için geliştirilen ve PyPI üzerinde yayınlanan rag-critic, özellikle LangGraph mimarileri için tasarlanmış hafif sıklet, çekişmeli (adversarial) bir halüsinasyon denetçisi ve kaynak doğrulama motorudur.
🔍 Mimari Darboğaz#
Standart RAG mimarileri, yanıtları LLM-as-a-judge (Yargıç olarak LLM) yaklaşımıyla bütüncül bir paragraf düzeyinde değerlendirir. Bu yaklaşımın üç temel kusuru vardır:
- Kaba Ölçekli Geri Bildirim (Coarse-Grained Feedback): Bir ajana sadece "bu yanıt hatalı görünüyor" demek, hangi cümlenin halüsinasyon olduğunu belirtmez ve hatayı lokalize etmeyi engeller.
- Yüksek Gecikme (High Latency): Tam değerlendirmeler için büyük sınır (frontier) modelleri yeniden sorgulamak her adımda 3–5 saniye ek gecikme yaratır.
- Determinizm Eksikliği (Lack of Determinism): Bir çıkarım (entailment) matrisi olmadan, güven skorları model çalıştırmaları arasında tutarsızlık gösterir ve sapar.
📦 Proje Bağlantıları ve Açık Kaynak Depoları#
- PyPI Paketi: pypi.org/project/rag-critic
- GitHub Deposu: github.com/samjanjua6/rag-critic
- Yazar Mühendislik Portfolyosu: https://shaheerulhassan.com
💻 Hızlı Başlangıç ve Python Kullanımı#
Paketi doğrudan PyPI üzerinden kurabilirsiniz:
pip install rag-critic
Tekil bir yanıtı değerlendirmek ve iddia (claim) bazında doğrulama yapmak için temel kullanım:
from rag_critic import RAGCritic
critic = RAGCritic()
# Taslak yanıtı getirilen kaynak parçalarına (chunks) karşı değerlendirin
result = critic.evaluate(
draft_response="Python was released in 1991 by Guido van Rossum. It was originally named Monty.",
retrieved_chunks=[
"Python is an interpreted programming language released in 1991 by Guido van Rossum."
]
)
print(f"Status: {result.status}") # REVISE / APPROVED
print(f"Grounding Score: {result.grounding_score:.2f}") # ör. 0.50
print(f"Hallucination Index: {result.hallucination_index:.2f}")
# İddia düzeyinde (claim-level) doğrulamayı inceleyin
for claim in result.claims:
print(f"[{claim.status.value}] {claim.text}")
# [SUPPORTED] Python was released in 1991 by Guido van Rossum.
# [UNGROUNDED] It was originally named Monty.
LangGraph içerisinde çekişmeli bir doğrulama kontrol noktası ve dinamik yönlendirici olarak entegrasyonu:
from langgraph.graph import StateGraph, END
from rag_critic import create_critic_node, critic_router
builder = StateGraph(MyRAGState)
# Standart üretici (generator) ve getirici (retriever) düğümlerini ekleyin
builder.add_node("retrieve", retrieve_docs)
builder.add_node("generate", generate_draft)
# rag-critic'i çekişmeli doğrulama kontrol noktası olarak ekleyin
builder.add_node("critic", create_critic_node())
builder.add_edge("retrieve", "generate")
builder.add_edge("generate", "critic")
# Halüsinasyon eşiklerine dayalı dinamik döngüsel yönlendirme
builder.add_conditional_edges(
"critic",
critic_router,
{
"approved": END, # Çıktı doğrulandı; kullanıcıya dön
"rewrite": "generate", # Küçük boşluklar; yeniden yazıcıyı yönlendir
"re_retrieve": "retrieve" # Ağır halüsinasyon; aramayı genişlet
}
)
💡 Mühendislik ve Öğrenme Çıkarımları#
Üretim ortamında Agent Güvenilirliği ve RAG Değerlendirme süreçlerini tasarlarken bu mimariden çıkarılabilecek kritik pratik dersler şunlardır:
- İddia Düzeyinde Ayrıştırma (Claim-Level Decomposition): Yanıtı cümle veya iddia bazında
SUPPORTED(Desteklenen) veUNGROUNDED(Dayanaksız) olarak ayırmak, tek bir dayanaksız ifade yüzünden tüm yanıtı sıfırdan üretme maliyetini ortadan kaldırır. - Hedefe Yönelik Döngüsel Yönlendirme: Hatanın boyutuna göre akışı dinamik olarak yönlendirmek (
rewriteile sadece metni düzeltmek veyare_retrieveile kaynak aramasını genişletmek), ajanların körü körüne döngüye girmesini önler.
Kaynak ve atıf
Bu yazı, dev.to üzerinde yayımlanan içerikten yararlanılarak Edumints tarafından yapay zekâ desteğiyle Türkçe hazırlandı. Ayrıntılar ve yazarların kendi anlatımı için orijinaline bakabilirsin:
- dev.to/samjanjua6/building-rag-critic-factual-grounding-adversarial-hallucination-auditing-in-langgraph-24hf