Agent Frameworks

LangGraph: Durumlu ve Üretime Hazır Yapay Zeka Ajanları Oluşturma

Büyük Dil Modellerinin (LLM) hızlı evrimi, odağı basit sohbet botlarından akıl yürütme, araç kullanımı ve çok adımlı planlama yapabilen karmaşık, otonom ajanlara kaydırdı. Ancak, sağlam ajan sistemleri oluşturmak genellikle modellerin olasılıksal doğasıyla savaşmak gibi hissettirir. İşte LangGraph burada devreye giriyor. LangChain tarafından geliştirilen LangGraph, LLM'lerin etrafına sarılmış basit bir sarmalayıcı değil; durumlu, çok aktörlü uygulamaları oluşturmak, yönetmek ve dağıtmak için tasarlanmış düşük seviyeli bir orkestrasyon çerçevesidir.

Geleneksel doğrusal zincirlerin aksine LangGraph, geliştiricilere uygulamaları grafikler olarak modellemelerine olanak tanır. Bu paradigma değişikliği, yürütme akışı üzerinde ince ayar kontrolü sağlayarak döngüler, koşullu mantık ve kalıcı durum yönetimine olanak tanır. Bu yazıda, dayanıklı yapay zeka sistemleri oluşturmak için LangGraph'ı nasıl kullanacağımızı keşfedeceğiz.

Neden Doğrusal Zincirlerin Ötesine Geçmeli?

Geleneksel LLM uygulama çerçeveleri genellikle "zincir"lere dayanır; bu, her adımın çıktısını bir sonrakine ileten bir adım dizisidir. Sezgisel olsa da, ajanların yineleme yapması, hataları düzeltmesi veya önceki adımlara geri dönmesi gerektiğinde zincirler başarısız olur. Örneğin, bir araştırma ajanı şunları gerektirebilir: Web'de ara → Bir makaleyi oku → Bilginin yetersiz olduğunu fark et → Tekrar ara → Nihai bir yanıt sentezle.

LangGraph, açık döngülere izin vererek bunu çözer. Uygulama, düğümlerin işlevleri (mantık veya LLM çağrıları) temsil ettiği ve kenarların kontrol akışını tanımladığı bir StateGraph olarak tanımlanır. Bu açık tanım, hata ayıklamayı kolaylaştırır ve belirli noktalarda insan müdahalesine olanak tanır.

Temel Kavramlar: Durum ve Düğümler

LangGraph'ın kalbinde Paylaşılan Durum kavramı yer alır. İşlev çağrıları arasında değişken geçişinin aksine, LangGraph, tüm düğümlerin okuyup güncelleyebileceği paylaşılan bir durum nesnesi sürdürür. Bu durum genellikle TypedDict veya bir Pydantic modeli olarak tanımlanır, bu da tür güvenliğini ve netliği sağlar.

Basit bir destek botu için durum şemasını düşünün:

from typing import TypedDict

class AgentState(TypedDict):
    messages: list
    intent: str
    resolution: str

Her düğüm, mevcut durumu alır ve kısmi bir güncelleme döndüren bir işlevdir. Bu endişelerin ayrımı, orkestrasyon mantığını yeniden yazmadan bireysel bileşenleri (örneğin, LLM modelini veya vektör veritabanını değiştirmek) değiştirmenize olanak tanır.

İlk Ajan Grafiğinizi Oluşturma

Pratik bir örneğe bakalım: Kullanıcı sorgularını niyete dayalı olarak "Yardımcı Asistan"a veya "İade İşleyici"ye yönlendiren basit bir triyaj ajanı.

from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4")

def triage_agent(state: AgentState):
    prompt = f"Classify the intent of this message: {state['messages'][-1].content}\nReturn only 'help' or 'refund'."
    response = llm.invoke(prompt)
    intent = response.content.strip().lower()
    return {"intent": intent}

def help_agent(state: AgentState):
    prompt = "You are a helpful assistant. Answer: " + state['messages'][-1].content
    response = llm.invoke(prompt)
    return {"resolution": response.content}

def refund_agent(state: AgentState):
    return {"resolution": "Your refund request has been logged."}

# Define the graph
graph = StateGraph(AgentState)

# Add nodes
graph.add_node("triage", triage_agent)
graph.add_node("help", help_agent)
graph.add_node("refund", refund_agent)

# Set entry point
graph.set_entry_point("triage")

# Define conditional edges
def route_by_intent(state: AgentState):
    if state["intent"] == "refund":
        return "refund"
    return "help"

graph.add_conditional_edges(
    "triage",
    route_by_intent,
    ["help", "refund"]
)

# Finish the graph
graph.add_edge("help", END)
graph.add_edge("refund", END)

# Compile
app = graph.compile()

Bu kod, LangGraph'ın gücünü göstermektedir: triage_agent bir yönlendirici olarak hareket eder ve sonraki yol, dinamik durum güncellemesine bağlıdır. Bu yapıyı LangGraph Studio veya belgeleme için bir Mermaid diyagramı üreten yerleşik .get_graph() yöntemi kullanarak görselleştirebilirsiniz.

Üretim Düşünceleri: Kalıcılık ve Bellek

LangGraph'ın en önemli avantajlarından biri kalıcılık desteğidir. LangGraph Platform ile entegre ederek veya yerel depolama kullanarak, her adımdan sonra durumu noktalayabilirsiniz. Bu şunlara olanak tanır:

  • Devam Etme: Bir ajan, API hatası nedeniyle görevin ortasında başarısız olursa, baştan başlamak yerine son başarılı kontrol noktasından yeniden başlayabilirsiniz.
  • İnsan Döngüde (Human-in-the-Loop): Grafik yürütmesini duraklatabilir, ara sonuçları onay için bir insana sunabilir ve girdi sağlandığında otomatik olarak devam edebilirsiniz.
  • Hata Ayıklama: Belirli bir kontrol noktası durumunu yükleyerek herhangi bir konuşmayı yeniden oynatabilirsiniz.

Sonuç

LangGraph, yapay zeka ajanı alanındaki bir olgunlaşmayı temsil eder. Otomatik zincirlemenin "sihirinden" öteye geçer ve kurumsal düzeyde uygulamalar için gerekli yapısal katırlığı sağlar. Ajan mantığınızı bir grafik olarak ele alarak, gözlemlenebilirlik, kontrol ve dayanıklılık kazanırsınız. LLM yetenekleri büyümeye devam ettikçe, bu yetenekleri hassasiyetle orkestramıza izin veren çerçeveler (LangGraph gibi), güvenilir ve ölçeklenebilir yapay zeka sistemleri oluşturmak için vazgeçilmez olacaktır.

Share: