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:
- Query Rewriter Agent — Kullanıcının sorusunu optimize eder
- Retrieval Agent — pgvector ile semantik arama yapar
- Faithfulness Checker Agent — Yanıtın kaynaklara sadık olup olmadığını kontrol eder
- 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.