Büyük Dil Modelleri (LLM'ler) basit metin tamamlayıcılardan otonom ajanlara dönüştükçe, onları oluşturmak için mimari kalıplar da olgunlaşmalıdır. LangChain gibi çerçeveler LLM entegrasyonunu basitleştirmede önemli rol oynamış olsa da, bunlar öncelikle doğrusal zincirler için tasarlanmıştır. Ancak gerçek dünya kurumsal uygulamaları nadiren düz bir çizgi izler. Döngüler, dallanma mantığı, koşullu yürütme ve en önemlisi kalıcı durum yönetimi gerektirirler. İşte burada
LangGraph sahneye çıkar. LangChain'in üzerine inşa edilen LangGraph, doğrusal grafik yapılarının sınırlamalarını çözmek üzere tasarlanmış, LLM'lerle birlikte çalışan durumlu, çok aktörlü uygulamalar oluşturmak için bir kütüphanedir.
Neden Zincirler Yerine Grafikler?
LangGraph'taki temel değişim, yönlendirilmiş döngüsüz grafikten (DAG) döngüleri destekleyen genel bir grafiğe geçiştir. Geleneksel bir zincirde veri A'dan B'ye, oradan C'ye akar. Bir hata oluşursa veya bir karar noktasına ulaşılırsa, zincir genellikle kırılır veya yeniden denemeleri işlemek için karmaşık sarmalayıcı mantık gerektirir. Buna karşılık, bir grafik düğümlerin önceki düğümlere geri bağlanmasına olanak tanır, bu da özyinelemeli davranışları mümkün kılar.
Bu yapı, şu ihtiyaçları olan ajanlar için idealdir:
- Planlama ve Yürütme: Bir plan oluşturun, bir adımı yürütün, sonucu gözlemleyin ve adım başarısız olursa yeniden planlayın.
- Hataları Zarifçe Yönetme: Tüm iş akışının çökmesine neden olmadan yürütme hatayı işleyen bir düğüme yönlendirilsin.
- Karmaşık Durumu Yönetme: Ajan araçlarla ve bellekle etkileşime girdikçe gelişen paylaşılan bir durum nesnesini koruyun.
Temel Kavramlar: Düğümler, Kenarlar ve Durum
LangGraph'tan yararlanmak için durum makineleri terimlerinde düşünmeniz gerekir. Üç temel soyutlama şunlardır:
- Durum (State): Grafikte akan verinin şemasını tanımlayan bir Python TypedDict. Her düğüm bu durumdan okur ve bu duruma yazar.
- Düğümler (Nodes): Hesaplamalar yapan, LLM'leri çağıran veya araçları yürüten bireysel işlevler veya sınıflar. Durumu dönüştüren saf işlevlerdir.
- Kenarlar (Edges): Düğümler arasındaki bağlantılar. Bunlar statik (her zaman Düğüm B'ye gider) veya koşullu (duruma göre Düğüm B veya Düğüm C arasında karar verir) olabilir.
Bu bileşenleri tanımlayarak görselleştirilebilir ve hata ayıklanabilir bir iş akışı oluşturursunuz. LangGraph, grafik yapınızı render eden bir görselleştirme aracı sağlar; bu da karmaşık ajan davranışlarını düşünmeyi kolaylaştırır.
Basit Bir Döngü Oluşturma: ReAct Deseni
LangGraph için en yaygın kullanım durumlarından biri, bir ajanın düşünme (LLM çağırma) ve eyleme (araçları kullanma) arasında değiştiği ReAct (Reasoning and Acting) desenini uygulamaktır. İşte Python'da basit bir durum ve grafik yapısının nasıl tanımlanacağına dair pratik bir örnek.
from langchain_core.messages import HumanMessage
from langgraph.graph import StateGraph, START, END
from typing import TypedDict, Annotated, List, Operator
import operator
# 1. Durum Şemasını Tanımla
class AgentState(TypedDict):
messages: Annotated[List, operator.add]
steps: int
# 2. Düğümleri Tanımla
def chatbot(state: AgentState):
# LLM mantığını simüle et
last_message = state["messages"][-1].content
if "hello" in last_message.lower():
return {"messages": [HumanMessage(content="Merhaba! Size nasıl yardımcı olabilirim?")] }
return {"messages": [HumanMessage(content="Bununla ilgili yardımcı olmaktan emin değilim.")] }
def check_step(state: AgentState):
# Adım sınırını aşarsa durmak için koşullu mantık
if state["steps"] < 5:
return "continue"
return "end"
# 3. Grafiği Oluştur
workflow = StateGraph(AgentState)
# Düğümleri ekle
workflow.add_node("chatbot", chatbot)
workflow.add_node("check", check_step)
# Kenarları ekle
workflow.add_edge(START, "chatbot")
workflow.add_conditional_edges(
"chatbot",
check_step,
{
"continue": "chatbot", # Devam ederse geri döngü
"end": END # Biterse dur
}
)
# Uygulamayı derle
app = workflow.compile()
# Grafiği çalıştır
initial_state = {"messages": [HumanMessage(content="Merhaba")], "steps": 0}
result = app.invoke(initial_state)
Kurumsal Alanlarda Pratik Uygulamalar
LangGraph, insan döngüsünde etkileşimler gerektiren senaryolarda parlar. Örneğin, bir müşteri destek botunda, ajanın bir yanıt tasarlama, grafiği duraklatma, ayrı bir kullanıcı arayüzü aracılığıyla bir insan yöneticiden onay bekletme ve yalnızca onaydan sonra mesajı gönderme isteğiniz olabilir. LangGraph'taki
checkpoint API'si, grafik durumunu herhangi bir düğüme kaydetmenize olanak tanır; bu da kurumsal uyumluluk ve denetim izleri için kritik olan duraklatma-ve-devam-etme yeteneklerini sağlar.
Ayrıca LangGraph çoklu ajan sistemlerini destekler. Özel ajanlar (örneğin bir "Araştırma Ajanı" ve bir "Kodlama Ajanı") için alt grafikler tanımlayıp bunları üst bir grafik içinde orkestre edebilirsiniz. Bu modülerlik, son derece ölçeklenebilir ve sürdürülebilir mimariler sağlar.
Sonuç
LangGraph, LLM uygulama geliştirme evriminde önemli bir adımdır. Döngüsel iş akışları, durum yönetimi ve görselleştirme için sağlam bir çerçeve sağlayarak geliştiricilerin, yalnızca zeki değil, aynı zamanda kontrol akışında güvenilir ve belirleyici olan ajanlar oluşturmalarına olanak tanır. Basit sohbet botlarının ötesine geçip karmaşık, otonom sistemler inşa etmek isteyen geliştiriciler için LangGraph'ı ustalıkla kullanmak artık bir tercih değil, bir zorunluluktur.