Conditional Routing with Structured Decisions
توسعه عاملهای هوشمند (Agentic Ai) با Langchain و Langgraph
- Use structured model output for route decisions.
- Define conditional edges and explicit path maps.
- Validate and handle unsupported routing labels.
چرا مسیریابی شرطی؟
**ایدهٔ اصلی**
مدل برچسب مسیر را تولید میکند؛ گراف فقط مقصدهای ازپیشتعریفشده را مجاز میداند.
```mermaid
flowchart LR
A["درخواست کاربر"] --> B["Router"]
B -->|story| C["گره داستان"]
B -->|joke| D["گره شوخی"]
B -->|poem| E["گره شعر"]
```
Schema تصمیم را محدود میکند
**نمونهٔ تصمیم**
ورودی `Write a short poem about rain.` است. خروجی معتبر `Route(step="poem")` است. مقدار `weather` خارج از مجموعهٔ مجاز است و اعتبارسنجی نمیشود.
```mermaid
flowchart TD
A["درخواست متنی"] --> B["LLM با Route"]
B --> C{"step معتبر؟"}
C -->|بله| D["تصمیم قابل استفاده"]
C -->|نه| E["خطای اعتبارسنجی یا fallback"]
```
Router و path map
**دو قرارداد جدا**
schema قرارداد داده است؛ path map قرارداد اتصال برچسبها به گرههاست.
```mermaid
flowchart TD
A["llm_call_router"] --> B["route_decision"]
B -->|story| C["llm_call_1"]
B -->|joke| D["llm_call_2"]
B -->|poem| E["llm_call_3"]
```
نمونهٔ کامل از ابتدا تا پایان
**ردگیری مقدارها**
برای ورودی مشخص، مقدارها بهترتیب چنیناند: `Route(step="joke")`، سپس `state["decision"] == "joke"`، بعد `key == "joke"`، و در پایان `path_map[key] == "llm_call_2"`.
```mermaid
flowchart LR
A["ورودی"] --> B["Route: joke"]
B --> C["state: decision"]
C --> D["path_map"]
D --> E["llm_call_2"]
E --> F["END"]
```
برچسب نامعتبر و دفاع ایمن
**بررسی برچسب ناشناخته**
مقدار `weather` از state خوانده میشود. چون `weather not in ALLOWED` برابر `True` است، تابع `ValueError` ایجاد میکند و مسیر نامعتبر ادامه پیدا نمیکند.
**الگوی نهایی**
`schema → decision → validation → path map → node`
Back to course