Context Engine
يتحكم محرك السياق في كيفية بناء OpenClaw لسياق النموذج لكل تشغيل. فهو يحدد الرسائل التي يجب تضمينها، وكيفية تلخيص السجل الأقدم، وكيفية إدارة السياق عبر حدود الوكلاء الفرعيين. يوفر OpenClaw محركًا مدمجًا باسمlegacy. ويمكن لـ Plugins تسجيل
محركات بديلة تستبدل دورة حياة محرك السياق النشط.
البدء السريع
تحقق من المحرك النشط:تثبيت plugin لمحرك سياق
يتم تثبيت Plugins الخاصة بمحرك السياق مثل أي plugin آخر في OpenClaw. قم بالتثبيت أولًا، ثم حدد المحرك في الـ slot:contextEngine على "legacy" (أو
احذف المفتاح بالكامل — إذ إن "legacy" هو الافتراضي).
كيف يعمل
في كل مرة يشغّل فيها OpenClaw مطالبة نموذج، يشارك محرك السياق في أربع نقاط في دورة الحياة:- Ingest — يُستدعى عند إضافة رسالة جديدة إلى الجلسة. يمكن للمحرك تخزين الرسالة أو فهرستها في مخزن البيانات الخاص به.
- Assemble — يُستدعى قبل كل تشغيل للنموذج. يعيد المحرك مجموعة
مرتبة من الرسائل (و
systemPromptAdditionاختياريًا) تتلاءم مع ميزانية الرموز. - Compact — يُستدعى عندما تمتلئ نافذة السياق، أو عندما يشغّل المستخدم
/compact. يقوم المحرك بتلخيص السجل الأقدم لتحرير مساحة. - After turn — يُستدعى بعد اكتمال التشغيل. يمكن للمحرك حفظ الحالة، أو تشغيل ضغط في الخلفية، أو تحديث الفهارس.
دورة حياة الوكيل الفرعي (اختياري)
يستدعي OpenClaw حاليًا hook واحدة فقط لدورة حياة الوكيل الفرعي:- onSubagentEnded — تنظيف عند اكتمال جلسة وكيل فرعي أو عند إزالتها.
prepareSubagentSpawn جزءًا من الواجهة لاستخدام مستقبلي، لكن
وقت التشغيل لا يستدعيها بعد.
إضافة مطالبة النظام
يمكن لطريقةassemble أن تعيد سلسلة systemPromptAddition. يقوم OpenClaw
بإضافتها في مقدمة مطالبة النظام لذلك التشغيل. يتيح ذلك للمحركات حقن
إرشادات استرجاع ديناميكية، أو تعليمات استدعاء، أو تلميحات
مدركة للسياق من دون الحاجة إلى ملفات مساحة عمل ثابتة.
المحرك القديم
يحافظ المحرك المدمجlegacy على السلوك الأصلي لـ OpenClaw:
- Ingest: لا عملية (إذ يتولى مدير الجلسة حفظ الرسائل مباشرة).
- Assemble: تمرير مباشر (يتولى المسار الحالي sanitize → validate → limit في وقت التشغيل تجميع السياق).
- Compact: يفوض إلى ضغط التلخيص المدمج، والذي ينشئ ملخصًا واحدًا للرسائل الأقدم ويُبقي الرسائل الحديثة كما هي.
- After turn: لا عملية.
systemPromptAddition.
عندما لا تكون plugins.slots.contextEngine مضبوطة (أو تكون مضبوطة على "legacy")،
يُستخدم هذا المحرك تلقائيًا.
محركات plugin
يمكن لأي plugin تسجيل محرك سياق باستخدام API الخاصة بـ plugin:واجهة 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() | طريقة | تحرير الموارد. تُستدعى أثناء إيقاف gateway أو إعادة تحميل 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 وضغط استعادة تجاوز السعة لذلك الـ engine slot.
مرجع التكوين
kind: "context-engine" والمفعلة فيمكنها أن تُحمّل وتنفّذ
شفرة التسجيل الخاصة بها؛ إذ يحدد plugins.slots.contextEngine فقط أي معرّف محرك مسجل
يحلّه OpenClaw عندما يحتاج إلى محرك سياق.
العلاقة مع الضغط والذاكرة
- الضغط هو إحدى مسؤوليات محرك السياق. يفوض المحرك القديم إلى التلخيص المدمج في OpenClaw. ويمكن لمحركات plugin تنفيذ أي استراتيجية ضغط (ملخصات DAG، أو استدعاء vector، وما إلى ذلك).
- Plugins الذاكرة (
plugins.slots.memory) منفصلة عن محركات السياق. توفر Plugins الذاكرة البحث/الاستدعاء؛ بينما تتحكم محركات السياق فيما يراه النموذج. ويمكنهما العمل معًا — فقد يستخدم محرك السياق بيانات plugin الذاكرة أثناء التجميع. - يظل تشذيب الجلسة (قص نتائج الأدوات القديمة في الذاكرة) يعمل بغض النظر عن محرك السياق النشط.
نصائح
- استخدم
openclaw doctorللتحقق من أن محركك يتم تحميله بشكل صحيح. - إذا قمت بالتبديل بين المحركات، فستستمر الجلسات الحالية بسجلها الحالي. وسيتولى المحرك الجديد التشغيلات المستقبلية.
- يتم تسجيل أخطاء المحرك وعرضها في التشخيصات. إذا فشل محرك plugin
في التسجيل أو تعذر حل معرّف المحرك المحدد، فلن يعود OpenClaw تلقائيًا؛
بل ستفشل التشغيلات حتى تصلح plugin أو
تعيد
plugins.slots.contextEngineإلى"legacy". - لأغراض التطوير، استخدم
openclaw plugins install -l ./my-engineلربط دليل plugin محلي من دون نسخه.
ذو صلة
- السياق — كيفية بناء السياق لأدوار الوكيل
- بنية plugin — تسجيل Plugins لمحركات السياق
- الضغط — تلخيص المحادثات الطويلة