الانتقال إلى المحتوى الرئيسي

الضغط

لكل نموذج نافذة سياق — وهي الحد الأقصى لعدد الرموز التي يمكنه معالجتها. عندما تقترب المحادثة من هذا الحد، يقوم OpenClaw بضغط الرسائل الأقدم في ملخص حتى تتمكن الدردشة من الاستمرار.

كيف يعمل

  1. تُلخَّص أدوار المحادثة الأقدم في إدخال مضغوط.
  2. يُحفَظ الملخص في نص الجلسة.
  3. تُحفَظ الرسائل الحديثة كما هي.
عندما يقسم OpenClaw السجل إلى مقاطع ضغط، فإنه يبقي استدعاءات أدوات المساعد مقترنة بإدخالات toolResult المطابقة لها. إذا وقعت نقطة التقسيم داخل كتلة أداة، ينقل OpenClaw الحد الفاصل بحيث يبقى الزوج معًا ويُحفَظ الذيل الحالي غير المُلخَّص. يبقى سجل المحادثة الكامل محفوظًا على القرص. يغيّر الضغط فقط ما يراه النموذج في الدورة التالية.

الضغط التلقائي

الضغط التلقائي مفعّل افتراضيًا. يعمل عندما تقترب الجلسة من حد السياق، أو عندما يعيد النموذج خطأ تجاوز السياق (وفي هذه الحالة يقوم OpenClaw بالضغط ثم يعيد المحاولة). تتضمن تواقيع التجاوز الشائعة request_too_large وcontext length exceeded وinput exceeds the maximum number of tokens وinput token count exceeds the maximum number of input tokens وinput is too long for the model وollama error: context length exceeded.
قبل الضغط، يذكّر OpenClaw الوكيل تلقائيًا بحفظ الملاحظات المهمة في ملفات memory. هذا يمنع فقدان السياق.
استخدم الإعداد agents.defaults.compaction في ملف openclaw.json لتكوين سلوك الضغط (الوضع، والرموز المستهدفة، وغير ذلك). يحافظ تلخيص الضغط افتراضيًا على المعرّفات المعتمة (identifierPolicy: "strict"). يمكنك تجاوز ذلك باستخدام identifierPolicy: "off" أو توفير نص مخصص باستخدام identifierPolicy: "custom" وidentifierInstructions. يمكنك اختياريًا تحديد نموذج مختلف لتلخيص الضغط عبر agents.defaults.compaction.model. يكون هذا مفيدًا عندما يكون نموذجك الأساسي نموذجًا محليًا أو صغيرًا وتريد أن تُنتَج ملخصات الضغط بواسطة نموذج أكثر قدرة. يقبل هذا التجاوز أي سلسلة provider/model-id:
{
  "agents": {
    "defaults": {
      "compaction": {
        "model": "openrouter/anthropic/claude-sonnet-4-6"
      }
    }
  }
}
يعمل هذا أيضًا مع النماذج المحلية، على سبيل المثال نموذج Ollama ثانٍ مخصص للتلخيص أو نموذج متخصص مضبوط بدقة للضغط:
{
  "agents": {
    "defaults": {
      "compaction": {
        "model": "ollama/llama3.1:8b"
      }
    }
  }
}
عند عدم ضبطه، يستخدم الضغط النموذج الأساسي للوكيل.

موفرو الضغط القابلون للتوصيل

يمكن للمكونات الإضافية تسجيل موفر ضغط مخصص عبر registerCompactionProvider() على واجهة API الخاصة بالمكون الإضافي. عند تسجيل موفر وتكوينه، يفوض OpenClaw التلخيص إليه بدلًا من مسار LLM المدمج. لاستخدام موفر مسجل، عيّن معرّف الموفر في إعداداتك:
{
  "agents": {
    "defaults": {
      "compaction": {
        "provider": "my-provider"
      }
    }
  }
}
يؤدي تعيين provider تلقائيًا إلى فرض mode: "safeguard". تتلقى الموفرات تعليمات الضغط نفسها وسياسة الحفاظ على المعرّفات نفسها المستخدمة في المسار المدمج، ويستمر OpenClaw أيضًا في الحفاظ على سياق لاحقة الأدوار الحديثة والأدوار المقسومة بعد مخرجات الموفر. إذا فشل الموفر أو أعاد نتيجة فارغة، يعود OpenClaw إلى تلخيص LLM المدمج.

الضغط التلقائي (مفعّل افتراضيًا)

عندما تقترب الجلسة من نافذة سياق النموذج أو تتجاوزها، يشغّل OpenClaw الضغط التلقائي وقد يعيد محاولة الطلب الأصلي باستخدام السياق المضغوط. سترى:
  • 🧹 Auto-compaction complete في الوضع المفصل
  • يعرض /status القيمة 🧹 Compactions: <count>
قبل الضغط، يمكن لـ OpenClaw تشغيل دورة تفريغ ذاكرة صامتة لتخزين الملاحظات الدائمة على القرص. راجع Memory للحصول على التفاصيل والإعدادات.

الضغط اليدوي

اكتب /compact في أي دردشة لفرض الضغط. أضف تعليمات لتوجيه الملخص:
/compact Focus on the API design decisions

استخدام نموذج مختلف

افتراضيًا، يستخدم الضغط النموذج الأساسي لوكيلك. يمكنك استخدام نموذج أكثر قدرة للحصول على ملخصات أفضل:
{
  agents: {
    defaults: {
      compaction: {
        model: "openrouter/anthropic/claude-sonnet-4-6",
      },
    },
  },
}

إشعار بدء الضغط

افتراضيًا، يعمل الضغط بصمت. لإظهار إشعار موجز عند بدء الضغط، فعّل notifyUser:
{
  agents: {
    defaults: {
      compaction: {
        notifyUser: true,
      },
    },
  },
}
عند تفعيله، يرى المستخدم رسالة قصيرة (على سبيل المثال، “جاري ضغط السياق…”) عند بداية كل عملية ضغط.

الضغط مقابل التقليص

الضغطالتقليص
ما الذي يفعلهيلخص المحادثة الأقدميقتطع نتائج الأدوات القديمة
هل يُحفَظ؟نعم (في نص الجلسة)لا (في الذاكرة فقط، لكل طلب)
النطاقالمحادثة بالكاملنتائج الأدوات فقط
يُعد تقليص الجلسة مكمّلًا أخف وزنًا يقتطع مخرجات الأدوات دون تلخيصها.

استكشاف الأخطاء وإصلاحها

هل يحدث الضغط كثيرًا جدًا؟ قد تكون نافذة سياق النموذج صغيرة، أو قد تكون مخرجات الأدوات كبيرة. جرّب تفعيل تقليص الجلسة. هل يبدو السياق قديمًا بعد الضغط؟ استخدم /compact Focus on <topic> من أجل توجيه الملخص، أو فعّل تفريغ الذاكرة حتى تبقى الملاحظات محفوظة. هل تحتاج إلى بداية نظيفة؟ يبدأ /new جلسة جديدة دون ضغط. للحصول على إعدادات متقدمة (الرموز المحجوزة، والحفاظ على المعرّفات، ومحركات السياق المخصصة، والضغط من جهة الخادم في OpenAI)، راجع التعمق في إدارة الجلسات.

ذو صلة

  • الجلسة — إدارة الجلسات ودورة حياتها
  • تقليص الجلسة — اقتطاع نتائج الأدوات
  • السياق — كيفية بناء السياق لأدوار الوكيل
  • Hooks — خطافات دورة حياة الضغط (before_compaction, after_compaction)