مدیریت پنجره زمینه
توسعه عاملهای هوشمند (Agentic Ai) با Langchain و Langgraph
- Measure the growth of message history and token use.
- Apply message trimming while preserving required message order.
- Choose trimming thresholds based on model limits and task needs.
چرا پنجرهٔ زمینه مهم است؟
**اصل اصلی**
ذخیرهسازی تاریخچه و ظرفیت قابلارسال مدل دو مسئلهٔ جدا هستند.
**محاسبهٔ ورودی**
تاریخچه: 700، prompt: 200، ابزار: 180 token. جمع: 700 + 200 + 180 = 1080. با limit برابر 1000، مقدار ورودی 80 token بیش از حد است.
```mermaid
flowchart LR
A["پیامهای جدید"] --> B["تاریخچهٔ گفتگو"]
B --> C["برآورد token"]
C --> D{"زیر limit؟"}
D -->|بله| E["ارسال به مدل"]
D -->|خیر| F["trim یا summary"]
F --> E
```
برآورد token و بودجه
**فرمول بودجه**
\[ B = L - S - U - R \] هر کسر، سهمی از ظرفیت مشترک را حذف میکند.
**محاسبهٔ کامل**
4096 − 350 = 3746؛ سپس 3746 − 180 = 3566؛ سپس 3566 − 700 = 2866. بنابراین بودجهٔ تاریخچه 2866 token است.
```mermaid
flowchart TD
A["4096 کل ظرفیت"] --> B["کسر 350 سیستم"]
B --> C["کسر 180 ورودی"]
C --> D["کسر 700 پاسخ رزرو"]
D --> E["2866 بودجهٔ تاریخچه"]
```
حذف از ابتدا، حفظ ترتیب
**نمونهٔ کامل trim**
از انتها: 70 ≤ 150؛ سپس 70 + 30 = 100؛ سپس 100 + 50 = 150؛ افزودن 60 باعث 150 + 60 = 210 > 150 میشود. نتیجه: [human₂, tool₂, ai₂].
**مرز معتبر**
start_on و end_on کمک میکنند دنباله با نقشهای معتبر آغاز و تمام شود.
```mermaid
flowchart LR
A["کل تاریخچه"] --> B["از انتها جمع کن"]
B --> C{"پیام بعدی در بودجه؟"}
C -->|بله| B
C -->|خیر| D["مرز معتبر نقش"]
D --> E["ترتیب زمانی حفظ میشود"]
```
پیادهسازی در LangGraph
**رفتار کد**
state برابر 220 token است؛ سقف trim برابر 128 است. تابع دنبالهٔ تازه و معتبر را تا سقف 128 جدا میکند؛ فقط همان دنباله به model.invoke میرود و state کامل باقی میماند.
**دو فضای متفاوت**
state کامل: برای نگهداری. پیام trimشده: برای فراخوانی فعلی مدل.
```mermaid
flowchart TD
A["MessagesState کامل"] --> B["trim_messages"]
B --> C["پیامهای معتبر زیر 128 token"]
C --> D["model.invoke"]
D --> E["افزودن پاسخ به state"]
E --> A
```
سیاست نگهداری و انتخاب آستانه
**سقف تاریخچه**
\[ H_{max} = L_{model} - S - U - R - M \] افزایش R یا M، سقف تاریخچه را کاهش میدهد.
**محاسبهٔ مرحلهای**
8192 − 500 = 7692؛ 7692 − 300 = 7392؛ 7392 − 1200 = 6192؛ 6192 − 300 = 5892. پس H_max برابر 5892 token است.
**بررسی سریع**
اگر R بزرگتر شود، H_max چه تغییری میکند؟ پاسخ: کوچکتر میشود، چون فضای بیشتری برای پاسخ رزرو شده است.
بازگشت به دوره