All Posts
AI/MLLangGraphRAGPython

LangGraph ile Multi-Agent RAG Pipeline Nasıl Kurulur

15 Mart 202612 dk

Giriş

Pergen AI'yı geliştirirken karşılaştığım en büyük zorluk, İSG mevzuatına yönelik soruları doğru ve güvenilir bir şekilde yanıtlayan bir AI sistemi kurmaktı. Basit bir RAG (Retrieval-Augmented Generation) pipeline'ı yeterli değildi — hallüsinasyonları minimize etmek, sorguları optimize etmek ve yanıtların mevzuata sadık kalmasını sağlamak gerekiyordu.

Bu yazıda, LangGraph kullanarak nasıl bir multi-agent pipeline kurduğumu anlatacağım.

Mimari Genel Bakış

Pipeline 4 ana agent'tan oluşuyor:

  1. Query Rewriter Agent — Kullanıcının sorusunu optimize eder
  2. Retrieval Agent — pgvector ile semantik arama yapar
  3. Faithfulness Checker Agent — Yanıtın kaynaklara sadık olup olmadığını kontrol eder
  4. Response Generator Agent — Final yanıtı oluşturur

Query Rewriter Agent

İlk adım, kullanıcının ham sorusunu daha iyi bir arama sorgusuna dönüştürmek:

from langgraph.graph import StateGraph, END
from langchain_core.messages import HumanMessage

def rewrite_query(state):
    original = state["query"]

    rewritten = llm.invoke(
        f"Bu İSG sorusunu semantik arama için optimize et: {original}"
    )

    return {"query": rewritten.content, "original_query": original}

Retrieval Agent

pgvector kullanarak semantik arama yapıyoruz. 6331 sayılı kanun ve tüm yönetmelikler vektör veritabanında indekslenmiş durumda:

from pgvector.sqlalchemy import Vector

def retrieve_documents(state):
    query_embedding = embed_model.encode(state["query"])

    results = db.query(
        Document.content,
        Document.embedding.cosine_distance(query_embedding)
    ).order_by(
        Document.embedding.cosine_distance(query_embedding)
    ).limit(5).all()

    return {"documents": results, "query": state["query"]}

Faithfulness Checker

Bu agent, oluşturulan yanıtın gerçekten kaynak belgelere dayandığını doğrular:

def check_faithfulness(state):
    response = state["draft_response"]
    sources = state["documents"]

    score = faithfulness_llm.invoke(
        f"Bu yanıt kaynaklara sadık mı? Yanıt: {response}, Kaynaklar: {sources}"
    )

    if score < 0.8:
        return {"action": "regenerate"}

    return {"action": "approve", "response": response}

Graph Tanımlama

Tüm agent'ları LangGraph ile birleştiriyoruz:

workflow = StateGraph(PipelineState)

workflow.add_node("rewriter", rewrite_query)
workflow.add_node("retriever", retrieve_documents)
workflow.add_node("generator", generate_response)
workflow.add_node("checker", check_faithfulness)

workflow.set_entry_point("rewriter")
workflow.add_edge("rewriter", "retriever")
workflow.add_edge("retriever", "generator")
workflow.add_edge("generator", "checker")

workflow.add_conditional_edges(
    "checker",
    lambda state: state["action"],
    {"approve": END, "regenerate": "generator"}
)

app = workflow.compile()

Sonuçlar

Bu mimari ile Pergen AI'da %99.2 mevzuat doğruluk oranı elde ettik. Faithfulness Checker sayesinde hallüsinasyon oranı neredeyse sıfıra indi.

Multi-agent yaklaşımın en büyük avantajı, her agent'ın tek bir sorumluluğa odaklanması. Bu sayede hata ayıklama ve iyileştirme çok daha kolay.

Bir sonraki yazıda pgvector ile vektör veritabanı kurulumunu detaylı anlatacağım.