کار موازی و تجمیع نتایج
توسعه عاملهای هوشمند (Agentic Ai) با Langchain و Langgraph
- Identify independent tasks suitable for concurrent execution.
- Use parallel graph branches or Send-based workers.
- Aggregate outputs deterministically with reducers and account for latency and cost.
چرا کار موازی؟
```mermaid
flowchart LR
A["پرسوجو"] --> B["بازیابی اسناد"]
A --> C["تحلیل ساختار"]
B --> D["ترکیب نتیجهها"]
C --> D
D --> E["پاسخ نهایی"]
```
شاخههای موازی در Graph
```mermaid
flowchart TD
S(["START"]) --> R["retrieve"]
S --> A["analyze"]
R --> G["aggregator"]
A --> G
G --> E(["END"])
```
**نمونهٔ وابسته**
اگر خروجی `retrieve(query)` برابر `[doc1, doc2]` باشد، `summarize(retrieved_docs)` باید پس از دریافت این فهرست اجرا شود؛ پس این دو node مستقل نیستند.
Send و کارگران پویا
```mermaid
flowchart LR
F["fan_out"] --> W1["worker: q1"]
F --> W2["worker: q2"]
F --> W3["worker: q3"]
W1 --> R["reducer"]
W2 --> R
W3 --> R
```
**سه ورودی، سه worker**
برای `queries=[q_1,q_2,q_3]`، fan out سه پیام میسازد: یکی برای q1، یکی برای q2 و یکی برای q3. نتیجهٔ هر worker باید بهصورت یک فهرست کوچک برگردد تا reducer بتواند فهرستها را جمع کند.
Reducer و ترکیب قطعی
**جمع و مرتبسازی**
با `results=[]`، افزودن `r_1` نتیجهٔ `[r_1]` میدهد و افزودن `r_2` نتیجهٔ `[r_1,r_2]` میدهد. چون شناسهٔ `r_2` برابر ۱ و شناسهٔ `r_1` برابر ۲ است، مرتبسازی بر اساس `id` نتیجهٔ `[r_2,r_1]` را میسازد.
**مرز مسئولیت reducer**
reducer نتیجهها را جمع میکند، اما اعتبار امتیاز، تکراریبودن سند و کیفیت محتوا را بررسی نمیکند.
زمان، هزینه و مرزها
**مدل زمان**
\(T_{seq}=T_1+T_2+T_{agg}\) و \(T_{par}=\max(T_1,T_2)+T_{agg}+T_{overhead}\)
**محاسبهٔ کامل**
با زمانهای ۲٫۰، ۱٫۵، ۰٫۴ و ۰٫۱ ثانیه، اجرای ترتیبی برابر ۲٫۰+۱٫۵+۰٫۴=۳٫۹ ثانیه است. اجرای موازی برابر بیشینهٔ ۲٫۰ و ۱٫۵، بهعلاوهٔ ۰٫۴ و ۰٫۱، یعنی ۲٫۵ ثانیه است. صرفهجویی برابر ۳٫۹−۲٫۵=۱٫۴ ثانیه است.
**محدودیت**
وابستگی داده، rate limit، نیاز به ترتیب یا منبع مشترک میتواند اجرای موازی را نامناسب کند.
بازگشت به دوره