Subgraphs and Specialized Subagents
توسعه عاملهای هوشمند (Agentic Ai) با Langchain و Langgraph
- Identify when decomposition into subgraphs improves clarity or isolation.
- Integrate subgraphs with shared or transformed state schemas.
- Choose checkpoint behavior for stateless and durable subgraphs.
چرا Subgraph؟
```mermaid
flowchart LR
A["Parent agent"] --> B["Query plan"]
B --> C["Retrieval subgraph"]
C --> D["Evidence"]
D --> E["Answer and verification"]
```
مرز و قرارداد داده
**دو نوع قرارداد**
- shared schema: کلیدهای مشترک مستقیم منتقل میشوند.
- transformed schema: adapter ورودی و خروجی را تبدیل میکند.
**نمونهٔ نگاشت**
Given: `query = "بردار چیست؟"` و `documents = ["سند ۱", "سند ۲"]`.
1. `question = query`، پس question متن پرسوجو را میگیرد.
2. `evidence = documents`، پس evidence شامل هر دو سند میشود.
3. نتیجه: کلیدهای داخلی Subgraph وارد state پدر نمیشوند.
نمونهٔ کامل ادغام
**ردیابی کامل داده**
Given: `query = "بردار چیست؟"`.
1. `question = parent_state["query"]`.
2. retrieval، `documents` را تولید میکند.
3. `evidence = subgraph_output["documents"]`.
4. update با state قبلی parent ادغام میشود.
ساخت Subgraph در Python
**ادغام state**
Given: `bar = "A"`.
1. node اول: `baz = "baz"`.
2. ادغام: `{"bar": "A", "baz": "baz"}`.
3. الحاق: `"A" + "baz" = "Abaz"`.
4. نتیجه: `{"bar": "Abaz", "baz": "baz"}`.
Checkpoint و ادامهٔ اجرا
**تصمیم checkpoint**
Given: retrieval هر بار در دو ثانیه از نو اجرا میشود و به state قبلی نیاز ندارد.
1. نیاز به recovery را بررسی میکنیم: خیر.
2. چون اجرا قابل تکرار است، `checkpointer=False` انتخاب میشود.
3. اگر پرسوجوی دوم به پیام اول وابسته شود، نیاز تغییر میکند و `MemorySaver` و `thread_id` لازم میشوند.
Subagent تخصصی و تصمیم نهایی
**خودآزمایی کوتاه**
- پاسخ مورد انتظار: احتمالاً یک node کافی است، چون منطق چندمرحلهای و مرز مستقل ندارد.
- همچنین `checkpointer=False` مناسب است، چون recovery لازم نیست.
```mermaid
flowchart LR
Q["تصمیم parent"] --> R["Subagent تخصصی"]
R --> O["خروجی کوچک و نوعدار"]
O --> V["بررسی و پاسخ نهایی"]
```
Back to course