Sessions and memory
Compaction
لكل نموذج نافذة سياق: وهي الحد الأقصى لعدد الرموز التي يمكنه معالجتها. عندما تقترب محادثة من هذا الحد، يضغط OpenClaw الرسائل الأقدم في ملخص حتى تستمر الدردشة.
آلية العمل
- تُلخَّص أدوار المحادثة الأقدم في إدخال مضغوط.
- يُحفظ الملخص في سجل جلسة المحادثة.
- تظل الرسائل الحديثة كما هي.
يُبقي OpenClaw استدعاءات أدوات المساعد مقترنة بإدخالات toolResult المطابقة لها عند اختيار نقطة تقسيم للضغط. وإذا وقعت النقطة داخل كتلة أداة، ينقل OpenClaw الحد الفاصل بحيث يظل الزوج معًا ويُحفظ الجزء الحالي غير الملخص.
يظل سجل المحادثة الكامل محفوظًا على القرص. لا يغيّر 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_largecontext length exceededinput exceeds the maximum number of tokensinput token count exceeds the maximum number of input tokens(Bedrock)input is too long for the modelollama error: context length exceeded
الضغط اليدوي
اكتب /compact في أي دردشة لفرض الضغط. أضف تعليمات لتوجيه الملخص:
/compact ركّز على قرارات تصميم APIعند تعيين agents.defaults.compaction.keepRecentTokens (الافتراضي: 20,000)، يلتزم الضغط اليدوي بنقطة القطع هذه ويحتفظ بالجزء الحديث في السياق المعاد بناؤه. ومن دون ميزانية احتفاظ صريحة، يتصرف الضغط اليدوي كنقطة تحقق صارمة ويتابع من الملخص الجديد وحده.
الإعداد
اضبط Compaction ضمن agents.defaults.compaction في openclaw.json الخاص بك. ترد أدناه عناصر الضبط الأكثر شيوعًا؛ وللاطلاع على المرجع الكامل، راجع التعمق في إدارة الجلسات.
استخدام نموذج مختلف
يستخدم Compaction افتراضيًا النموذج الأساسي للوكيل. عيّن agents.defaults.compaction.model لتفويض التلخيص إلى نموذج أكثر قدرة أو تخصصًا. يقبل التجاوز سلسلة provider/model-id أو اسمًا مستعارًا مجردًا جرى إعداده ضمن agents.defaults.models:
{ "agents": { "defaults": { "compaction": { "model": "openrouter/anthropic/claude-sonnet-4-6" } } }}تُحل الأسماء المستعارة المجردة المعدّة إلى المزود والنموذج القياسيين قبل بدء Compaction. وإذا طابقت قيمة مجردة اسمًا مستعارًا ومعرّف نموذج حرفيًا معدًا في الوقت نفسه، تكون الأولوية لمعرّف النموذج الحرفي. وتظل القيمة المجردة غير المطابقة معرّف نموذج لدى المزود النشط.
يعمل هذا أيضًا مع النماذج المحلية، مثل نموذج Ollama ثانٍ مخصص للتلخيص:
{ "agents": { "defaults": { "compaction": { "model": "ollama/llama3.1:8b" } } }}عند عدم تعيينه، يبدأ Compaction بنموذج الجلسة النشط. وإذا فشل التلخيص بسبب خطأ من المزود مؤهل لاستخدام نموذج احتياطي، يعيد OpenClaw محاولة الضغط هذه عبر سلسلة النماذج الاحتياطية الحالية للجلسة. يكون اختيار النموذج الاحتياطي مؤقتًا ولا يُكتب مجددًا في حالة الجلسة. ويظل تجاوز agents.defaults.compaction.model الصريح مطابقًا تمامًا ولا يرث سلسلة النماذج الاحتياطية للجلسة.
الحفاظ على المعرّفات
يحافظ تلخيص Compaction افتراضيًا على المعرّفات المبهمة (identifierPolicy: "strict"). استخدم التجاوز identifierPolicy: "off" للتعطيل، أو identifierPolicy: "custom" مع identifierInstructions لتقديم إرشادات مخصصة.
حارس بايتات سجل المحادثة النشط
عند تعيين agents.defaults.compaction.maxActiveTranscriptBytes، يشغّل OpenClaw
الضغط المحلي العادي قبل التشغيل إذا بلغ سجل المحادثة
ذلك الحجم. يفيد هذا في الجلسات طويلة التشغيل التي قد تُبقي فيها إدارة السياق
من جانب المزود سياق النموذج سليمًا بينما يستمر سجل المحادثة المحفوظ
في النمو. ولا يقسم هذا البايتات الخام؛ بل يطلب من مسار
الضغط العادي إنشاء ملخص دلالي.
سجلات المحادثة اللاحقة
عند تمكين agents.defaults.compaction.truncateAfterCompaction، لا يعيد OpenClaw كتابة سجل المحادثة الحالي في موضعه. بل ينشئ سجل محادثة لاحقًا نشطًا جديدًا من ملخص الضغط والحالة المحفوظة والجزء غير الملخص، ثم يسجل بيانات وصفية لنقطة التحقق توجّه تدفقات التفرع/الاستعادة إلى ذلك السجل اللاحق المضغوط.
وتحذف سجلات المحادثة اللاحقة أيضًا أدوار المستخدم الطويلة المتطابقة تمامًا التي تصل
ضمن نافذة إعادة محاولة قصيرة، حتى لا تنتقل عواصف إعادة المحاولة في القناة إلى
سجل المحادثة النشط التالي بعد الضغط.
لم يعد OpenClaw يكتب نسخ .checkpoint.*.jsonl منفصلة لعمليات
الضغط الجديدة. ولا يزال من الممكن استخدام ملفات نقاط التحقق القديمة ما دامت مُشارًا إليها،
وتزيلها عملية التنظيف العادية للجلسة.
إشعارات الضغط
يعمل الضغط افتراضيًا بصمت. عيّن notifyUser لعرض رسائل حالة موجزة عند بدء الضغط واكتماله، ولإظهار إشعار بتراجع الأداء عند استنفاد تفريغ الذاكرة السابق للضغط مع استمرار الرد رغم ذلك:
{ agents: { defaults: { compaction: { notifyUser: true, }, }, },}تفريغ الذاكرة
قبل الضغط، يمكن لـ OpenClaw تشغيل دور صامت لتفريغ الذاكرة من أجل تخزين الملاحظات الدائمة على القرص. عيّن agents.defaults.compaction.memoryFlush.model عندما ينبغي أن يستخدم دور التدبير هذا نموذجًا محليًا بدلًا من نموذج المحادثة النشط:
{ "agents": { "defaults": { "compaction": { "memoryFlush": { "model": "ollama/qwen3:8b" } } } }}يكون تجاوز نموذج تفريغ الذاكرة مطابقًا تمامًا ولا يرث سلسلة النماذج الاحتياطية للجلسة النشطة. راجع الذاكرة لمعرفة التفاصيل والإعداد.
مزودو Compaction القابلون للتركيب
يمكن لـ Plugins تسجيل مزود Compaction مخصص عبر registerCompactionProvider() في API الخاص بالـ Plugin. وعندما يكون أحد المزودين مسجلًا ومعدًا، يفوّض OpenClaw التلخيص إليه بدلًا من مسار LLM المضمّن.
لاستخدام مزود مسجل، عيّن معرّفه في إعداداتك:
{ "agents": { "defaults": { "compaction": { "provider": "my-provider" } } }}يؤدي تعيين provider تلقائيًا إلى فرض mode: "safeguard". يتلقى المزودون تعليمات الضغط نفسها وسياسة الحفاظ على المعرّفات نفسها التي يتلقاها المسار المضمّن، ويواصل OpenClaw أيضًا الحفاظ على سياق لاحقة الأدوار الحديثة والأدوار المنقسمة بعد مخرجات المزود.
Compaction مقارنةً بالتقليم
| Compaction | التقليم | |
|---|---|---|
| ما الذي يفعله | يلخص المحادثة الأقدم | يقتطع نتائج الأدوات القديمة |
| هل يُحفظ؟ | نعم (في سجل محادثة الجلسة) | لا (في الذاكرة فقط، لكل طلب) |
| النطاق | المحادثة بأكملها | نتائج الأدوات فقط |
يُعد تقليم الجلسة مكمّلًا أخف وزنًا يقتطع مخرجات الأدوات دون تلخيص.
استكشاف الأخطاء وإصلاحها
هل يحدث الضغط بوتيرة متكررة جدًا؟ قد تكون نافذة سياق النموذج صغيرة، أو قد تكون مخرجات الأدوات كبيرة. جرّب تمكين تقليم الجلسة.
هل يبدو السياق قديمًا بعد الضغط؟ استخدم /compact Focus on <topic> لتوجيه الملخص، أو مكّن تفريغ الذاكرة حتى تبقى الملاحظات.
هل تحتاج إلى بداية جديدة؟ يبدأ /new جلسة جديدة دون ضغط.
للاطلاع على الإعدادات المتقدمة (الرموز المحجوزة، والحفاظ على المعرّفات، ومحركات السياق المخصصة، والضغط من جانب خادم OpenAI)، راجع التعمق في إدارة الجلسات.
ذو صلة
- الجلسة: إدارة الجلسة ودورة حياتها.
- تقليم الجلسة: اقتطاع نتائج الأدوات.
- السياق: كيفية بناء السياق لأدوار الوكيل.
- الخطافات: خطافات دورة حياة الضغط (
before_compaction،after_compaction).