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

تشذيب الجلسات

يقوم تشذيب الجلسات بتقليم نتائج الأدوات القديمة من السياق الموجود في الذاكرة مباشرة قبل كل استدعاء لـ LLM. وهو لا يعيد كتابة سجل الجلسة المحفوظ على القرص (*.jsonl).

متى يعمل

  • عندما يكون mode: "cache-ttl" مفعّلًا وكان آخر استدعاء لـ Anthropic للجلسة أقدم من ttl.
  • يؤثّر فقط على الرسائل المُرسلة إلى النموذج لذلك الطلب.
  • نشِط فقط لاستدعاءات واجهة Anthropic البرمجية (ونماذج Anthropic عبر OpenRouter).
  • للحصول على أفضل النتائج، طابِق ttl مع cacheControlTtl الخاص بنموذجك.
  • بعد تنفيذ التشذيب، تُعاد تهيئة نافذة TTL بحيث تحتفظ الطلبات اللاحقة بالتخزين المؤقت إلى أن تنتهي صلاحية ttl مرة أخرى.

الإعدادات الافتراضية الذكية (Anthropic)

  • ملفات OAuth أو setup-token: تفعيل تشذيب cache-ttl وضبط نبض القلب على 1h.
  • ملفات API key: تفعيل تشذيب cache-ttl، ضبط نبض القلب على 30m، وتعيين cacheControlTtl افتراضيًا إلى 1h على نماذج Anthropic.
  • إذا قمت بتعيين أي من هذه القيم صراحةً، فلن يقوم OpenClaw بتجاوزها.

ما الذي يُحسِّنه هذا (التكلفة + سلوك التخزين المؤقت)

  • لماذا التشذيب: ينطبق التخزين المؤقت لمطالبة Anthropic فقط ضمن فترة TTL. إذا ظلت الجلسة خاملة بعد TTL، فسيُعاد تخزين المطالبة كاملة في الطلب التالي ما لم تُقلِّمها أولًا.
  • ما الذي يصبح أقل تكلفة: يقلّل التشذيب حجم cacheWrite لذلك الطلب الأول بعد انتهاء TTL.
  • أهمية إعادة ضبط TTL: بمجرد تنفيذ التشذيب، تُعاد نافذة التخزين المؤقت، بحيث يمكن للطلبات اللاحقة إعادة استخدام المطالبة المُخزّنة حديثًا بدلًا من إعادة تخزين السجل الكامل مرة أخرى.
  • ما الذي لا يفعله: لا يضيف التشذيب رموزًا (tokens) ولا «يُضاعف» التكاليف؛ بل يغيّر فقط ما يتم تخزينه مؤقتًا في ذلك الطلب الأول بعد TTL.

ما الذي يمكن تشذيبه

  • فقط رسائل toolResult.
  • رسائل المستخدم والمساعد لا يتم تعديلها أبدًا.
  • آخر keepLastAssistants رسائل للمساعد محمية؛ ولا يتم تشذيب نتائج الأدوات بعد حدّ القطع هذا.
  • إذا لم يكن هناك عدد كافٍ من رسائل المساعد لتحديد حدّ القطع، يتم تجاوز التشذيب.
  • نتائج الأدوات التي تحتوي على كتل صور يتم تجاوزها (لا تُقلَّم/تُزال أبدًا).

تقدير نافذة السياق

يستخدم التشذيب تقديرًا لنافذة السياق (الأحرف ≈ الرموز × 4). ويتم حلّ النافذة الأساسية بهذا الترتيب:
  1. تجاوز models.providers.*.models[].contextWindow.
  2. تعريف النموذج contextWindow (من سجل النماذج).
  3. القيمة الافتراضية 200000 من الرموز.
إذا تم تعيين agents.defaults.contextTokens، فسيُعامل كسقف (الحد الأدنى) على النافذة المُحَلّة.

النمط

cache-ttl

  • لا يعمل التشذيب إلا إذا كان آخر استدعاء لـ Anthropic أقدم من ttl (الافتراضي 5m).
  • عند التنفيذ: نفس سلوك التقليم اللطيف + الإزالة الصارمة كما في السابق.

ناعمة ضد تشويش قاس

  • التقليم اللطيف: فقط لنتائج الأدوات كبيرة الحجم.
    • يحتفظ بالمقدمة + الخاتمة، ويدرِج ...، ويُلحق ملاحظة بالحجم الأصلي.
    • يتجاوز النتائج التي تحتوي على كتل صور.
  • الإزالة الصارمة: تستبدل نتيجة الأداة بالكامل بـ hardClear.placeholder.

اختيار الأدوات

  • يدعم tools.allow / tools.deny محارف * الشاملة.
  • إنكار الفوز.
  • المطابقة غير حسّاسة لحالة الأحرف.
  • قائمة السماح الفارغة => جميع الأدوات مسموح بها.

التفاعل مع حدود أخرى

  • تقوم الأدوات المدمجة أصلًا باقتطاع مخرجاتها؛ ويُعدّ تشذيب الجلسات طبقة إضافية تمنع الدردشات طويلة الأمد من تراكم قدر كبير من مخرجات الأدوات في سياق النموذج.
  • الضغط (Compaction) منفصل: الضغط يُلخِّص ويُثبّت، بينما التشذيب مؤقّت لكل طلب. انظر /concepts/compaction.

القيم الافتراضية (عند التفعيل)

  • ttl: "5m"
  • keepLastAssistants: 3
  • softTrimRatio: 0.3
  • hardClearRatio: 0.5
  • minPrunableToolChars: 50000
  • softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 }
  • hardClear: { enabled: true, placeholder: "[Old tool result content cleared]" }

أمثلة

الافتراضي (متوقف):
{
  agent: {
    contextPruning: { mode: "off" },
  },
}
تمكين تشذيب واعٍ بـ TTL:
{
  agent: {
    contextPruning: { mode: "cache-ttl", ttl: "5m" },
  },
}
تقييد التشذيب على أدوات محددة:
{
  agent: {
    contextPruning: {
      mode: "cache-ttl",
      tools: { allow: ["exec", "read"], deny: ["*image*"] },
    },
  },
}
انظر مرجع التهيئة: Gateway Configuration