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"، یا برای راهنمایی سفارشی از identifierPolicy: "custom" به‌همراه identifierInstructions استفاده کنید.

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

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

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

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

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

اعلان‌های Compaction

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

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 مربوط به Plugin، یک ارائه‌دهندهٔ سفارشی 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