آموزش LangGraph؛ State و یالهای شرطی با پیکو هوش
ساخت گراف LangGraph با State، گرهها و conditional edges روی API سازگار با OpenAI پیکو هوش؛ مثال مسیریابی، حلقهی بازبینی و checkpoint.
خلاصه: LangGraph اجرای ایجنت را بهصورت گراف مدل میکند: یک State مشترک، چند گره (توابع) و یالها که ترتیب اجرا را تعیین میکنند. یالهای شرطی (conditional edges) به شما اجازه میدهند بر اساس خروجی مدل مسیر را عوض کنید. در این مقاله با ChatOpenAI متصل به https://api.picoai.ir/v1 یک گراف مسیریاب و یک حلقهی بازبینی میسازیم.
پیشنیاز
pip install -U langgraph langchain-openai
export PICO_API_KEY="YOUR_API_KEY"اتصال پایهی مدل را در آموزش LangChain دیدهاید. اینجا دو مدل تعریف میکنیم: یکی ارزان برای دستهبندی و یکی قوی برای نوشتن.
import os
from langchain_openai import ChatOpenAI
def make(model, **kw):
return ChatOpenAI(model=model, base_url="https://api.picoai.ir/v1",
api_key=os.environ["PICO_API_KEY"], **kw)
router_llm = make("claude-haiku-5-5", temperature=0)
writer_llm = make("gpt-6-sol", temperature=0.5)تعریف State
State یک TypedDict است. هر گره بخشی از آن را برمیگرداند و LangGraph آن را ادغام میکند.
from typing import TypedDict
class State(TypedDict):
question: str
category: str
draft: str
review: str
attempts: intگرهها
def classify(state: State) -> dict:
msg = router_llm.invoke(
"فقط یکی از دو کلمهی technical یا general را برگردان. "
f"سوال: {state['question']}"
).content.strip().lower()
return {"category": "technical" if "technical" in msg else "general"}
def write_technical(state: State) -> dict:
r = writer_llm.invoke(f"پاسخ فنی و دقیق بده:\n{state['question']}")
return {"draft": r.content, "attempts": state.get("attempts", 0) + 1}
def write_general(state: State) -> dict:
r = writer_llm.invoke(f"پاسخ ساده و دوستانه بده:\n{state['question']}")
return {"draft": r.content, "attempts": state.get("attempts", 0) + 1}
def review(state: State) -> dict:
r = router_llm.invoke(
"اگر پاسخ زیر کامل و درست است فقط OK بنویس، وگرنه یک جمله بنویس چه چیزی کم است:\n"
+ state["draft"]
)
return {"review": r.content.strip()}- LangGraph
- StateGraph
- conditional edges
- ایجنت
- LangChain