Sessions and memory

Compaction

هر مدل یک پنجرهٔ زمینه دارد: حداکثر تعداد توکن‌هایی که می‌تواند پردازش کند. وقتی یک مکالمه به این حد نزدیک می‌شود، OpenClaw پیام‌های قدیمی‌تر را در قالب یک خلاصه فشرده می‌کند تا گفت‌وگو بتواند ادامه یابد.

نحوهٔ کار

  1. نوبت‌های قدیمی‌تر مکالمه در یک مدخل فشرده خلاصه می‌شوند.
  2. خلاصه در رونوشت نشست ذخیره می‌شود.
  3. پیام‌های اخیر دست‌نخورده نگه داشته می‌شوند.

هنگامی که OpenClaw نقطهٔ تفکیک Compaction را انتخاب می‌کند، فراخوانی‌های ابزار دستیار را همراه با مدخل‌های منطبق toolResult نگه می‌دارد. اگر نقطه داخل یک بلوک ابزار قرار گیرد، OpenClaw مرز را جابه‌جا می‌کند تا جفت کنار هم بماند و دنبالهٔ فعلیِ خلاصه‌نشده حفظ شود.

تاریخچهٔ کامل مکالمه روی دیسک باقی می‌ماند. Compaction فقط آنچه مدل در نوبت بعدی می‌بیند تغییر می‌دهد.

Compaction خودکار

Compaction خودکار به‌طور پیش‌فرض فعال است. هنگامی اجرا می‌شود که نشست به حد زمینه نزدیک شود، یا زمانی که مدل خطای سرریز زمینه برگرداند (در این حالت OpenClaw فشرده‌سازی را انجام می‌دهد و دوباره تلاش می‌کند).

موارد زیر را خواهید دید:

  • embedded run auto-compaction start / complete در گزارش‌های عادی Gateway.
  • 🧹 Auto-compaction complete در حالت پرجزئیات.
  • /status که 🧹 Compactions: <count> را نشان می‌دهد.
الگوهای خطای سرریزی که OpenClaw تشخیص می‌دهد

OpenClaw ده‌ها رشتهٔ خطای سرریز مختص ارائه‌دهندگان مختلف را تطبیق می‌دهد (Anthropic، OpenAI، Bedrock، Gemini، Ollama، OpenRouter و موارد دیگر). نمونه‌های رایج:

  • request_too_large
  • context length exceeded
  • input exceeds the maximum number of tokens
  • input token count exceeds the maximum number of input tokens (Bedrock)
  • input is too long for the model
  • ollama error: context length exceeded

Compaction دستی

برای اجبار به Compaction، در هر گفت‌وگویی /compact را وارد کنید. برای هدایت خلاصه، دستورالعمل اضافه کنید:

text
/compact بر تصمیم‌های طراحی API تمرکز کن

وقتی agents.defaults.compaction.keepRecentTokens تنظیم شده باشد (پیش‌فرض: 20,000)، Compaction دستی آن نقطهٔ برش را رعایت می‌کند و دنبالهٔ اخیر را در زمینهٔ بازسازی‌شده نگه می‌دارد. بدون بودجهٔ صریح برای نگه‌داری، Compaction دستی مانند یک نقطهٔ بررسی قطعی عمل می‌کند و فقط از خلاصهٔ جدید ادامه می‌یابد.

پیکربندی

Compaction را در بخش agents.defaults.compaction از openclaw.json پیکربندی کنید. رایج‌ترین گزینه‌ها در ادامه فهرست شده‌اند؛ برای مرجع کامل، به بررسی عمیق مدیریت نشست مراجعه کنید.

استفاده از مدلی متفاوت

Compaction به‌طور پیش‌فرض از مدل اصلی عامل استفاده می‌کند. برای واگذاری خلاصه‌سازی به مدلی توانمندتر یا تخصصی‌تر، agents.defaults.compaction.model را تنظیم کنید. مقدار جایگزین یک رشتهٔ provider/model-id یا یک نام مستعار سادهٔ پیکربندی‌شده در agents.defaults.models را می‌پذیرد:

json
{  "agents": {    "defaults": {      "compaction": {        "model": "openrouter/anthropic/claude-sonnet-4-6"      }    }  }}

نام‌های مستعار سادهٔ پیکربندی‌شده، پیش از شروع Compaction به ارائه‌دهنده و مدل رسمی خود تبدیل می‌شوند. اگر یک مقدار ساده هم با یک نام مستعار و هم با شناسهٔ تحت‌اللفظی یک مدل پیکربندی‌شده مطابقت داشته باشد، شناسهٔ تحت‌اللفظی مدل اولویت دارد. مقدار ساده‌ای که مطابقت نداشته باشد، به‌عنوان شناسهٔ مدل در ارائه‌دهندهٔ فعال باقی می‌ماند.

این قابلیت با مدل‌های محلی نیز کار می‌کند؛ برای مثال، یک مدل دوم Ollama که به خلاصه‌سازی اختصاص یافته باشد:

json
{  "agents": {    "defaults": {      "compaction": {        "model": "ollama/llama3.1:8b"      }    }  }}

اگر تنظیم نشده باشد، Compaction با مدل نشست فعال آغاز می‌شود. اگر خلاصه‌سازی با یک خطای ارائه‌دهنده که واجد شرایط استفاده از مدل جایگزین است شکست بخورد، OpenClaw آن تلاش Compaction را از طریق زنجیرهٔ موجود مدل‌های جایگزین نشست دوباره امتحان می‌کند. انتخاب جایگزین موقتی است و در وضعیت نشست بازنویسی نمی‌شود. یک جایگزین صریح agents.defaults.compaction.model دقیق باقی می‌ماند و زنجیرهٔ مدل‌های جایگزین نشست را به ارث نمی‌برد.

حفظ شناسه‌ها

خلاصه‌سازی Compaction به‌طور پیش‌فرض شناسه‌های کدر را حفظ می‌کند (identifierPolicy: "strict"). برای غیرفعال‌کردن، مقدار را با identifierPolicy: "off" جایگزین کنید. راهنمایی سفارشی باید در پیاده‌سازی summarize() ارائه‌دهندهٔ Compaction قرار گیرد.

محافظ بایتی رونوشت فعال

وقتی agents.defaults.compaction.maxActiveTranscriptBytes تنظیم شده باشد، اگر تاریخچهٔ رونوشت به آن اندازه برسد، OpenClaw پیش از اجرا Compaction محلی عادی را فعال می‌کند. این قابلیت برای نشست‌های طولانی‌مدتی مفید است که در آن‌ها مدیریت زمینه در سمت ارائه‌دهنده ممکن است زمینهٔ مدل را سالم نگه دارد، درحالی‌که تاریخچهٔ رونوشت ذخیره‌شده همچنان در حال رشد است. این قابلیت بایت‌های خام را تفکیک نمی‌کند؛ بلکه از پایپ‌لاین Compaction عادی می‌خواهد یک خلاصهٔ معنایی ایجاد کند.

رونوشت‌های جانشین

وقتی agents.defaults.compaction.truncateAfterCompaction فعال باشد، OpenClaw رونوشت موجود را درجا بازنویسی نمی‌کند. در عوض، از خلاصهٔ Compaction، وضعیت حفظ‌شده و دنبالهٔ خلاصه‌نشده یک رونوشت جانشین فعال جدید ایجاد می‌کند، سپس فرادادهٔ نقطهٔ بررسی را ثبت می‌کند که جریان‌های شاخه/بازیابی را به آن جانشین فشرده‌شده هدایت می‌کند. رونوشت‌های جانشین همچنین نوبت‌های طولانی کاربر را که دقیقاً تکراری هستند و در یک بازهٔ کوتاه تلاش مجدد می‌رسند، حذف می‌کنند تا طوفان‌های تلاش مجدد کانال پس از Compaction به رونوشت فعال بعدی منتقل نشوند.

OpenClaw دیگر برای Compactionهای جدید، نسخه‌های جداگانهٔ .checkpoint.*.jsonl نمی‌نویسد. فایل‌های قدیمی نقطهٔ بررسی تا زمانی که به آن‌ها ارجاع داده می‌شود همچنان قابل استفاده‌اند و با پاک‌سازی عادی نشست حذف می‌شوند.

اعلان‌های Compaction

Compaction به‌طور پیش‌فرض بی‌صدا اجرا می‌شود. notifyUser را تنظیم کنید تا هنگام شروع و پایان Compaction پیام‌های کوتاه وضعیت نمایش داده شوند و هنگامی که تخلیهٔ حافظهٔ پیش از Compaction به پایان ظرفیت خود رسیده اما پاسخ همچنان ادامه دارد، یک اعلان تنزل عملکرد نمایش داده شود:

json5
{  agents: {    defaults: {      compaction: {        notifyUser: true,      },    },  },}

تخلیهٔ حافظه

پیش از Compaction، OpenClaw می‌تواند یک نوبت تخلیهٔ بی‌صدای حافظه اجرا کند تا یادداشت‌های ماندگار را روی دیسک ذخیره کند. اگر این نوبت نگه‌داری باید به‌جای مدل فعال مکالمه از یک مدل محلی استفاده کند، agents.defaults.compaction.memoryFlush.model را تنظیم کنید:

json
{  "agents": {    "defaults": {      "compaction": {        "memoryFlush": {          "model": "ollama/qwen3:8b"        }      }    }  }}

جایگزین مدل تخلیهٔ حافظه دقیق است و زنجیرهٔ مدل‌های جایگزین نشست فعال را به ارث نمی‌برد. برای جزئیات و پیکربندی، به حافظه مراجعه کنید.

ارائه‌دهندگان قابل‌اتصال Compaction

Pluginها می‌توانند از طریق registerCompactionProvider() در API افزونه، یک ارائه‌دهندهٔ سفارشی Compaction ثبت کنند. وقتی یک ارائه‌دهنده ثبت و پیکربندی شده باشد، OpenClaw به‌جای پایپ‌لاین داخلی LLM، خلاصه‌سازی را به آن واگذار می‌کند.

برای استفاده از یک ارائه‌دهندهٔ ثبت‌شده، شناسهٔ آن را در پیکربندی خود تنظیم کنید:

json
{  "agents": {    "defaults": {      "compaction": {        "provider": "my-provider"      }    }  }}

تنظیم یک provider به‌طور خودکار mode: "safeguard" را اجباری می‌کند. ارائه‌دهندگان همان دستورالعمل‌های Compaction و سیاست حفظ شناسهٔ مسیر داخلی را دریافت می‌کنند و OpenClaw پس از خروجی ارائه‌دهنده همچنان زمینهٔ پسوند نوبت‌های اخیر و نوبت تفکیک‌شده را حفظ می‌کند.

Compaction در مقایسه با هرس‌کردن

Compaction هرس‌کردن
چه می‌کند مکالمهٔ قدیمی‌تر را خلاصه می‌کند نتایج قدیمی ابزار را کوتاه می‌کند
ذخیره می‌شود؟ بله (در رونوشت نشست) خیر (فقط در حافظه، برای هر درخواست)
دامنه کل مکالمه فقط نتایج ابزار

هرس‌کردن نشست مکمل سبک‌تری است که خروجی ابزار را بدون خلاصه‌سازی کوتاه می‌کند.

عیب‌یابی

Compaction بیش‌ازحد مکرر انجام می‌شود؟ ممکن است پنجرهٔ زمینهٔ مدل کوچک باشد یا خروجی ابزارها بزرگ باشد. فعال‌کردن هرس‌کردن نشست را امتحان کنید.

پس از Compaction، زمینه قدیمی به نظر می‌رسد؟ برای هدایت خلاصه از /compact Focus on <topic> استفاده کنید، یا تخلیهٔ حافظه را فعال کنید تا یادداشت‌ها حفظ شوند.

به یک شروع پاک نیاز دارید؟ /new یک نشست تازه را بدون Compaction آغاز می‌کند.

برای پیکربندی پیشرفته (توکن‌های رزرو، حفظ شناسه، موتورهای سفارشی زمینه، Compaction سمت سرور OpenAI)، به بررسی عمیق مدیریت نشست مراجعه کنید.

مرتبط

  • نشست: مدیریت و چرخهٔ عمر نشست.
  • هرس‌کردن نشست: کوتاه‌کردن نتایج ابزار.
  • زمینه: نحوهٔ ساخت زمینه برای نوبت‌های عامل.
  • قلاب‌ها: قلاب‌های چرخهٔ عمر Compaction (before_compaction، after_compaction).
Was this useful?
On this page

On this page