ایجنت‌ها

LangGraph — workflows با حالت

LangGraph — workflows با حالت — راهنمای فارسی از مجموعهٔ «ایجنت‌ها» در وبلاگ آیرا. بازنویسی‌شده با تمرکز روی کاربر ایرانی و روایت شناخت پیوسته.

نوشتهٔ به‌روزرسانی: ۴ دقیقه مطالعه
تصویر مقالهٔ LangGraph — workflows با حالت

وقتی برای اولین بار با LangChain کار کردی، احتمالاً یه chain ساده ساختی: prompt رفت توی LLM، جواب اومد بیرون. ولی وقتی خواستی یه agent بسازی که چند قدم کار کنه، چند tool داشته باشه، و بتونه تصمیم بگیره کدوم مسیر رو انتخاب کنه — با یه مشکل اساسی روبرو شدی: chain خطیه، ولی منطق واقعی یه agent گرافه. LangGraph برای حل همین مشکل ساخته شد.

مشکلی که LangGraph حل می‌کنه

تصور کن یه agent برنامه‌نویسی می‌خوای بسازی که: ۱. کد رو می‌گیره ۲. آنالیز می‌کنه ۳. اگه باگ داشت می‌ره تست بنویسه ۴. اگه test pass نشد دوباره کد رو بررسی می‌کنه ۵. تا سه بار تلاش می‌کنه، بعد خطا می‌ده

این منطق loop داره، شاخه داره، و یه state داره که باید بین قدم‌ها حفظ بشه. با chain معمولی نمی‌شه این رو ساخت — یا می‌شه ولی خیلی هکی میشه.

LangGraph این رو با یه مدل graph-based حل می‌کنه: هر گره (node) یه تابعه، هر لبه (edge) یه انتقاله، و یه state مشترک بین همه وجود داره.

معماری اصلی

در LangGraph سه چیز مهمه:

State

یه TypedDict یا Pydantic model که نشون می‌ده سیستم الان در چه وضعیتیه:

from typing import TypedDict, List

class AgentState(TypedDict):
    messages: List[str]
    code: str
    attempts: int
    error: str | None

Nodes

تابع‌هایی که state رو می‌گیرن و state به‌روزشده برمی‌گردونن:

def analyze_code(state: AgentState) -> AgentState:
    result = llm.invoke(f"Analyze this code: {state['code']}")
    return {**state, "analysis": result}

Edges

تعیین می‌کنن بعد از هر node کجا بریم. می‌تونن شرطی باشن:

def should_retry(state: AgentState) -> str:
    if state["error"] and state["attempts"] < 3:
        return "retry"
    elif state["error"]:
        return "fail"
    else:
        return "success"

یه مثال واقعی: agent ساده بررسی کد

from langgraph.graph import StateGraph, END

workflow = StateGraph(AgentState)

# اضافه کردن nodes
workflow.add_node("analyze", analyze_code)
workflow.add_node("write_test", write_test)
workflow.add_node("run_test", run_test)
workflow.add_node("fix_code", fix_code)

# تعیین نقطهٔ شروع
workflow.set_entry_point("analyze")

# edges ثابت
workflow.add_edge("analyze", "write_test")
workflow.add_edge("write_test", "run_test")

# edge شرطی
workflow.add_conditional_edges(
    "run_test",
    should_retry,
    {
        "retry": "fix_code",
        "success": END,
        "fail": END
    }
)
workflow.add_edge("fix_code", "run_test")

app = workflow.compile()
result = app.invoke({"code": my_code, "attempts": 0})

در ۳۰ خط یه agent تکرارشونده داری که state داره، می‌تونه loop بزنه، و شرط توقف هم داره.

Human-in-the-Loop

یکی از feature‌های مهم LangGraph پشتیبانی از interruption و human approval هست. می‌تونی graph رو در یه نقطه متوقف کنی، به کاربر نشون بدی که چی داره اتفاق می‌افته، منتظر تأیید بمونی، و بعد ادامه بدی:

workflow.add_node("human_review", interrupt_node)

# graph می‌ایسته اینجا تا کاربر تأیید کنه
workflow.add_edge("analyze", "human_review")
workflow.add_edge("human_review", "write_test")

این برای agent‌هایی که باید تصمیمات مهم بگیرن خیلی ارزشمنده — مثل agent‌هایی که دیتابیس یا API خارجی تغییر می‌دن.

LangGraph vs LangChain vs CrewAI

اینا در واقع رقیب هم نیستن ولی خیلی مقایسه می‌شن:

ابزارمناسب برای
LangChainpipeline‌های خطی ساده، اتصال به منابع داده
LangGraphagent‌های پیچیده با حالت، loop، human-in-the-loop
CrewAIسیستم‌های چند agent که با هم همکاری می‌کنن
AutoGenمکالمهٔ بین agent‌های متعدد

اگه می‌خوای یه agent بسازی که «فکر می‌کنه و تصمیم می‌گیره»، LangGraph انعطاف بیشتری از LangChain معمولی داره. اگه می‌خوای چند agent با هم کار کنن، CrewAI یا AutoGen رو هم بررسی کن.

LangGraph Server و Production

تیم LangChain یه لایهٔ deployment به اسم LangGraph Platform یا LangGraph Server اضافه کرده که:

  • گراف‌ها رو به عنوان API سرو می‌کنه
  • مدیریت state پایدار داره
  • صف‌بندی اجرا داره
  • UI برای monitoring داره

این برای production جدیه. اگه فقط داری یه agent شخصی یا تحقیقاتی می‌سازی، نیازی نیست.

نصب و شروع سریع

pip install langgraph langchain-openai

برای شروع با مدل‌های رایگان‌تر می‌تونی از Groq یا Together AI استفاده کنی — هر دو با LangGraph کار می‌کنن و برای کاربر ایرانی با VPN قابل دسترس‌ترن.

چه وقت LangGraph را انتخاب نکنی؟

  • اگه فقط یه prompt ساده می‌خوای — overkill کامله
  • اگه تازه با LLMها شروع کردی — اول LangChain عادی رو یاد بگیر
  • اگه multi-agent coordination مهمه — CrewAI یا AutoGen شاید بهتر باشن
  • اگه سرعت deploy مهمه — ابزارهای no-code مثل n8n شاید سریع‌تر باشن

LangGraph و حافظهٔ بلندمدت

LangGraph به‌خودی‌خود حافظهٔ بین session ندارد — state در یه session زنده است و بعد از اتمام اجرا از بین می‌ره. برای حافظهٔ پایدار باید یه database (مثل PostgreSQL یا Redis) به‌عنوان backend به graph وصل کنی.

این تفاوت مهمیه با سیستم‌هایی مثل آیراچت که شناخت پیوسته رو به‌عنوان یه ویژگی اصلی دارن — حافظه اونجا built-in و بدون نیاز به پیاده‌سازی اضافیه.

همچنین بخوان

#ایجنت‌ها

ادامهٔ مسیر

همهٔ مقاله‌ها ←

بیشتر در «ایجنت‌ها»