محرك السياق
يتحكم محرك السياق في كيفية بناء OpenClaw لسياق النموذج لكل تشغيل. ويقرر الرسائل التي يجب تضمينها، وكيفية تلخيص السجل الأقدم، وكيفية إدارة السياق عبر حدود الوكلاء الفرعيين. يأتي OpenClaw مزودًا بمحركlegacy مدمج. ويمكن لـ plugins تسجيل
محركات بديلة تحل محل دورة حياة محرك السياق النشطة.
البدء السريع
تحقق من المحرك النشط حاليًا:تثبيت plugin لمحرك سياق
يتم تثبيت plugins الخاصة بمحرك السياق مثل أي plugin أخرى في OpenClaw. ثبّت plugin أولًا، ثم حدّد المحرك في slot:contextEngine على "legacy" (أو
احذف المفتاح بالكامل — إذ إن "legacy" هو الافتراضي).
كيف يعمل
في كل مرة يشغّل فيها OpenClaw مطالبة نموذج، يشارك محرك السياق في أربع نقاط في دورة الحياة:- الاستيعاب — يُستدعى عند إضافة رسالة جديدة إلى الجلسة. ويمكن للمحرك تخزين الرسالة أو فهرستها في مخزن البيانات الخاص به.
- التجميع — يُستدعى قبل كل تشغيل للنموذج. ويعيد المحرك مجموعة
مرتبة من الرسائل (و
systemPromptAdditionاختياري) تتناسب مع ميزانية الرموز. - الضغط — يُستدعى عندما تمتلئ نافذة السياق، أو عندما يشغّل المستخدم
/compact. ويلخّص المحرك السجل الأقدم لتحرير مساحة. - بعد الدور — يُستدعى بعد اكتمال التشغيل. ويمكن للمحرك حفظ الحالة، أو تشغيل ضغط في الخلفية، أو تحديث الفهارس.
دورة حياة الوكيل الفرعي (اختياري)
يستدعي OpenClaw حاليًا خطافًا واحدًا لدورة حياة الوكيل الفرعي:- onSubagentEnded — للتنظيف عند اكتمال جلسة وكيل فرعي أو اكتساحها.
prepareSubagentSpawn جزء من الواجهة لاستخدام مستقبلي، لكن
بيئة التشغيل لا تستدعيه بعد.
إضافة مطالبة النظام
يمكن للطريقةassemble أن تعيد سلسلة systemPromptAddition. ويقوم OpenClaw
بإضافتها في بداية مطالبة النظام الخاصة بالتشغيل. ويتيح هذا للمحركات حقن
إرشادات استدعاء ديناميكية، أو تعليمات استرجاع، أو تلميحات
مدركة للسياق دون الحاجة إلى ملفات مساحة عمل ثابتة.
المحرك القديم
يحافظ المحركlegacy المدمج على السلوك الأصلي لـ OpenClaw:
- الاستيعاب: لا إجراء (يتولى مدير الجلسة حفظ الرسائل مباشرة).
- التجميع: تمرير مباشر (يتولى خط الأنابيب الحالي sanitize → validate → limit في بيئة التشغيل تجميع السياق).
- الضغط: يفوّض إلى ضغط التلخيص المدمج، الذي ينشئ ملخصًا واحدًا للرسائل الأقدم ويحافظ على الرسائل الحديثة كما هي.
- بعد الدور: لا إجراء.
systemPromptAddition.
عندما لا يكون plugins.slots.contextEngine مضبوطًا (أو يكون مضبوطًا على "legacy")،
يُستخدم هذا المحرك تلقائيًا.
محركات plugin
يمكن لـ plugin تسجيل محرك سياق باستخدام plugin API:واجهة ContextEngine
الأعضاء المطلوبة:| العضو | النوع | الغرض |
|---|---|---|
info | خاصية | معرّف المحرك واسمه وإصداره وما إذا كان يملك الضغط |
ingest(params) | طريقة | تخزين رسالة واحدة |
assemble(params) | طريقة | بناء السياق لتشغيل نموذج (يعيد AssembleResult) |
compact(params) | طريقة | تلخيص/تقليل السياق |
assemble قيمة AssembleResult تحتوي على:
messages— الرسائل المرتبة التي ستُرسل إلى النموذج.estimatedTokens(مطلوب،number) — تقدير المحرك لإجمالي الرموز في السياق المجمّع. ويستخدم OpenClaw هذا لاتخاذ قرارات حدّ الضغط وللتقارير التشخيصية.systemPromptAddition(اختياري،string) — تُضاف في بداية مطالبة النظام.
| العضو | النوع | الغرض |
|---|---|---|
bootstrap(params) | طريقة | تهيئة حالة المحرك لجلسة. تُستدعى مرة واحدة عندما يرى المحرك جلسة لأول مرة (مثل استيراد السجل). |
ingestBatch(params) | طريقة | استيعاب دور مكتمل كدفعة. تُستدعى بعد اكتمال التشغيل، مع جميع رسائل ذلك الدور دفعة واحدة. |
afterTurn(params) | طريقة | أعمال دورة الحياة بعد التشغيل (حفظ الحالة، تشغيل ضغط في الخلفية). |
prepareSubagentSpawn(params) | طريقة | إعداد حالة مشتركة لجلسة فرعية. |
onSubagentEnded(params) | طريقة | التنظيف بعد انتهاء وكيل فرعي. |
dispose() | طريقة | تحرير الموارد. تُستدعى أثناء إيقاف تشغيل البوابة أو إعادة تحميل plugin — وليس لكل جلسة. |
ownsCompaction
يتحكمownsCompaction فيما إذا كان الضغط التلقائي المدمج أثناء المحاولة في Pi
يبقى مفعّلًا أثناء التشغيل:
true— يملك المحرك سلوك الضغط. يعطّل OpenClaw الضغط التلقائي المدمج في Pi لذلك التشغيل، ويصبح تنفيذcompact()الخاص بالمحرك مسؤولًا عن/compact، وضغط الاسترداد من تجاوز السعة، وأي ضغط استباقي يريد تنفيذه فيafterTurn().falseأو غير مضبوط — قد يستمر تشغيل الضغط التلقائي المدمج في Pi أثناء تنفيذ المطالبة، لكن تظل طريقةcompact()الخاصة بالمحرك النشط مستدعاة من أجل/compactوالاسترداد من تجاوز السعة.
ownsCompaction: false أن OpenClaw يعود تلقائيًا إلى
مسار الضغط الخاص بالمحرك القديم.
وهذا يعني أن هناك نمطين صالحين لـ plugin:
- وضع التملك — نفّذ خوارزمية الضغط الخاصة بك واضبط
ownsCompaction: true. - وضع التفويض — اضبط
ownsCompaction: falseواجعلcompact()تستدعيdelegateCompactionToRuntime(...)منopenclaw/plugin-sdk/coreلاستخدام سلوك الضغط المدمج في OpenClaw.
compact() التي لا تنفّذ أي شيء غير آمنة لمحرك نشط غير مالك لأن ذلك
يعطّل مسار /compact العادي ومسار ضغط الاسترداد من تجاوز السعة
لـ slot ذلك المحرك.
مرجع الإعدادات
kind: "context-engine" أن تُحمّل وتنفّذ
شيفرة التسجيل الخاصة بها؛ إذ يحدد plugins.slots.contextEngine فقط
معرّف المحرك المسجل الذي يحله OpenClaw عندما يحتاج إلى محرك سياق.
العلاقة مع الضغط والذاكرة
- الضغط هو إحدى مسؤوليات محرك السياق. يفوّض المحرك القديم إلى التلخيص المدمج في OpenClaw. ويمكن لمحركات plugin تنفيذ أي استراتيجية ضغط (ملخصات DAG، أو استرجاع متجهي، وما إلى ذلك).
- plugins الذاكرة (
plugins.slots.memory) منفصلة عن محركات السياق. توفّر plugins الذاكرة البحث/الاسترجاع؛ بينما تتحكم محركات السياق فيما يراه النموذج. ويمكنهما العمل معًا — فقد يستخدم محرك سياق بيانات plugin الذاكرة أثناء التجميع. ويُفضّل أن تستخدم محركات plugin التي تريد مسار مطالبة الذاكرة النشطbuildMemorySystemPromptAddition(...)منopenclaw/plugin-sdk/core، إذ يحوّل مقاطع مطالبة الذاكرة النشطة إلىsystemPromptAdditionجاهزة للإضافة في البداية. وإذا احتاج المحرك إلى تحكم على مستوى أدنى، فلا يزال بإمكانه سحب الأسطر الخام منopenclaw/plugin-sdk/memory-host-coreعبرbuildActiveMemoryPromptSection(...). - تهذيب الجلسة (قص نتائج الأدوات القديمة داخل الذاكرة) يظل يعمل بغض النظر عن محرك السياق النشط.
نصائح
- استخدم
openclaw doctorللتحقق من أن محركك يُحمَّل بشكل صحيح. - إذا كنت تبدّل بين المحركات، فستستمر الجلسات الحالية بسجلها الحالي. وسيتولى المحرك الجديد التشغيلات المستقبلية.
- تُسجّل أخطاء المحرك وتظهر في التشخيصات. وإذا فشل محرك plugin
في التسجيل أو تعذر حل معرّف المحرك المحدد، فلن يعود OpenClaw
تلقائيًا؛ بل ستفشل التشغيلات حتى تصلح plugin أو
تعيد
plugins.slots.contextEngineإلى"legacy". - لأغراض التطوير، استخدم
openclaw plugins install -l ./my-engineلربط دليل plugin محليًا من دون نسخه.
ذو صلة
- السياق — كيف يُبنى السياق لأدوار الوكيل
- معمارية Plugin — تسجيل plugins لمحرك السياق
- الضغط — تلخيص المحادثات الطويلة