البدء السريع
الصق فيopenclaw.json للحصول على إعداد افتراضي آمن: تشغيل Plugin، وتقييده بـ main،
وجلسات الرسائل المباشرة فقط، مع وراثة النموذج من الجلسة.
plugins.entries.* (بما في ذلك active-memory.config) ضمن فئة الإعدادات التي لا تتطلب إعادة
تشغيل:
يعيد Gateway تحميل وقت تشغيل Plugin تلقائياً ولا تلزم إعادة تشغيل يدوية.
إذا أردت فرض إعادة تشغيل كاملة رغم ذلك، فنفّذ:
- يشغّل
plugins.entries.active-memory.enabled: trueالـPlugin - يُدرج
config.agents: ["main"]الوكيلmainوحده - يقيّده
config.allowedChatTypes: ["direct"]بجلسات الرسائل المباشرة (أدرج المجموعات/القنوات صراحةً) - يثبّت
config.model(اختياري) نموذجاً مخصصاً للاستدعاء؛ وإذا لم يُعيَّن، يرث نموذج الجلسة الحالية - لا يُستخدم
config.modelFallbackإلا عند تعذر تحديد نموذج صريح أو موروث - يتجاوز
config.fastModeاختيارياً الوضع السريع للاستدعاء من دون تغيير الوكيل الرئيسي - يمثّل
config.promptStyle: "balanced"الإعداد الافتراضي لوضعrecent - لا يزال Active memory يعمل فقط لجلسات الدردشة التفاعلية الدائمة المؤهلة (راجع متى يعمل)
آلية العمل
لا يمكن للوكيل الفرعي الحاجب استدعاء سوى أدوات استدعاء الذاكرة المضبوطة (راجع أدوات الذاكرة). إذا كانت الصلة بين الاستعلام والذاكرة المتاحة ضعيفة، فإنه يعيدNONE ويتابع الرد الرئيسي
من دون سياق إضافي.
Active memory ميزة لإثراء المحادثات، وليست ميزة استدلال
على مستوى المنصة بأكملها:
استخدمه عندما تكون الجلسة دائمة وموجّهة للمستخدم، ولدى الوكيل
ذاكرة طويلة الأمد ذات قيمة يمكن البحث فيها، وتكون الاستمرارية/التخصيص أهم
من الحتمية الصرفة للموجّه: تفضيلات ثابتة، وعادات متكررة،
وسياق طويل الأمد ينبغي أن يظهر بصورة طبيعية. ولا يلائم
الأتمتة، أو العاملين الداخليين، أو مهام API لمرة واحدة، أو أي موضع قد يكون فيه
التخصيص المخفي مفاجئاً.
متى يعمل
يجب اجتياز بوابتين معاً:- الإدراج عبر الإعدادات — يكون Plugin مفعّلاً ومعرّف الوكيل الحالي موجوداً في
config.agents. - أهلية وقت التشغيل — تكون الجلسة جلسة دردشة تفاعلية دائمة مؤهلة، ويكون نوع دردشتها مسموحاً، ولا يكون معرّف محادثتها مستبعداً.
أنواع الجلسات
يتحكمconfig.allowedChatTypes في أنواع المحادثات التي يجوز أن تشغّل
Active memory. الإعداد الافتراضي:
direct وgroup وchannel وexplicit (جلسات بنمط البوابة
ذات معرّف جلسة مبهم، مثل agent:main:explicit:portal-123).
تعمل جلسات الرسائل المباشرة افتراضياً؛ أما جلسات المجموعات والقنوات والجلسات الصريحة
فتحتاج إلى إدراجها:
config.allowedChatIds وconfig.deniedChatIds:
- يمثّل
allowedChatIdsقائمة سماح بمعرّفات المحادثات المحددة. عندما لا تكون فارغة، لا يعمل Active memory إلا للجلسات التي يوجد معرّف محادثتها في القائمة — وهذا يضيّق نطاق كل أنواع الدردشة المسموح بها دفعةً واحدة، بما فيها الرسائل المباشرة. للإبقاء على كل الرسائل المباشرة مع تضييق نطاق المجموعات فقط، أضف أيضاً معرّفات النظراء المباشرين إلىallowedChatIds، أو أبقِallowedChatTypesمقيّداً بطرح المجموعة/القناة الذي تختبره. - يمثّل
deniedChatIdsقائمة حظر تتغلب دائماً علىallowedChatTypesوallowedChatIds.
chat_id/open_id، أو معرّف دردشة Telegram، أو معرّف قناة Slack). المطابقة
غير حساسة لحالة الأحرف. إذا لم يكن allowedChatIds فارغاً وتعذّر على OpenClaw
تحديد معرّف محادثة للجلسة، يتخطى Active memory الجولة
بدلاً من التخمين.
مفتاح تبديل الجلسة
أوقف Active memory مؤقتاً أو استأنفه لجلسة الدردشة الحالية من دون تعديل الإعدادات:plugins.entries.active-memory.config.enabled أو أي إعداد عام آخر.
لإيقافه مؤقتاً/استئنافه لكل الجلسات بدلاً من ذلك، استخدم الصيغة العامة (تتطلب
المالك أو operator.admin):
plugins.entries.active-memory.config.enabled لكنها
تُبقي plugins.entries.active-memory.enabled مفعّلاً، كي يظل الأمر
متاحاً لإعادة تشغيل Active memory لاحقاً.
كيفية رؤيته
افتراضياً، يحقن Active memory بادئة موجّه مخفية غير موثوقة لا تظهر في الرد العادي. شغّل مفاتيح تبديل الجلسة التي تطابق المخرجات المطلوبة:- يضيف
/verbose onسطر حالة:🧩 Active Memory: status=ok elapsed=842ms query=recent summary=34 chars - يضيف
/trace onملخص تصحيح أخطاء:🔎 Active Memory Debug: Lemon pepper wings with blue cheese.
/trace raw، تعرض كتلة Model Input (User Role) المتتبعة
البادئة المخفية الأولية:
أوضاع الاستعلام
يتحكمconfig.queryMode في مقدار المحادثة الذي يراه الوكيل الفرعي
الحاجب. اختر أصغر وضع يظل قادراً على الإجابة عن المتابعات جيداً؛ وزِد
timeoutMs مع نمو حجم السياق، من message إلى recent ثم إلى full.
- message
- recent
- full
تُرسل أحدث رسالة للمستخدم فقط.استخدمه عندما تريد أسرع سلوك، وأقوى انحياز نحو استدعاء
التفضيلات الثابتة، ولا تحتاج جولات المتابعة إلى
سياق المحادثة. ابدأ بنحو
3000-5000 ms لـ config.timeoutMs.أنماط الموجّه
يتحكمconfig.promptStyle في مدى ميل الوكيل الفرعي أو صرامته بشأن
إعادة الذاكرة:
التعيين الافتراضي عندما لا يكون
config.promptStyle معيّناً:
config.promptStyle الصريح التعيين دائماً.
سياسة النموذج الاحتياطي
إذا لم يكنconfig.model معيّناً، يحدد Active memory نموذجاً بهذا الترتيب:
config.modelFallbackPolicy حقل توافق مهملاً مُحتفظاً به
للإعدادات القديمة؛ ولم يعد يغيّر سلوك وقت التشغيل — إذ إن modelFallback
هو الملاذ الأخير حصراً في السلسلة أعلاه، وليس تجاوز فشل وقت التشغيل الذي
يستبدل النموذج بآخر عند حدوث خطأ في النموذج المحدد.
توصيات السرعة
تركconfig.model دون تعيين (لوراثة نموذج الجلسة) هو الخيار الافتراضي الأكثر أمانًا: إذ يتبع تفضيلات المزوّد والمصادقة والنموذج الحالية لديك. للحصول على زمن استجابة أقل، استخدم بدلًا من ذلك نموذجًا سريعًا مخصصًا — فجودة الاسترجاع مهمة، لكن زمن الاستجابة هنا أهم منه في مسار الإجابة الرئيسي، ونطاق الأدوات محدود (أدوات استرجاع الذاكرة فقط).
خيارات جيدة للنماذج السريعة:
cerebras/gpt-oss-120b، نموذج استرجاع مخصص منخفض زمن الاستجابةgoogle/gemini-3-flash، خيار احتياطي منخفض زمن الاستجابة دون تغيير نموذج المحادثة الأساسي- نموذج جلستك المعتاد، بترك
config.modelدون تعيين
إعداد Cerebras
chat/completions للنموذج المختار — إذ إن ظهور /v1/models وحده لا يضمن ذلك.
أدوات الذاكرة
يحددconfig.toolsAllow أسماء الأدوات الفعلية التي يمكن للوكيل الفرعي الحاجب استدعاؤها. تعتمد القيم الافتراضية على مزوّد الذاكرة النشط:
إذا لم تكن أي من الأدوات المكوّنة متاحة، أو فشل تشغيل الوكيل الفرعي، تتخطى Active Memory الاسترجاع في ذلك الدور وتستمر الإجابة الرئيسية دون سياق الذاكرة. بالنسبة إلى أدوات الاسترجاع المخصصة، يُعدّ خرج الأداة غير الفارغ والظاهر للنموذج دليلًا على الاسترجاع، ما لم تُبلغ حقول النتائج المنظّمة صراحةً عن نتيجة فارغة أو فشل.
لا يقبل
toolsAllow سوى أسماء أدوات ذاكرة فعلية: تُرشَّح أحرف البدل وإدخالات group:* وأدوات الوكيل الأساسية (read وexec وmessage وweb_search وما شابهها) بصمت قبل بدء الوكيل الفرعي المخفي.
memory-core المدمج
لا حاجة إلىtoolsAllow صريح:
ذاكرة LanceDB
يكفي تحديد خانة الذاكرة لكي تستخدم Active Memory memory_recall:
Lossless Claw
Lossless Claw هو Plugin خارجي لمحرك السياق (openclaw plugins install @martian-engineering/lossless-claw) وله أدوات استرجاع خاصة به. أعدّه أولًا بوصفه محرك سياق؛ راجع محرك السياق. ثم وجّه Active Memory إلى أدواته:
lcm_expand إلى toolsAllow هنا؛ إذ يستخدمه Lossless Claw أداةً منخفضة المستوى للتوسيع المفوّض، وليس مخصصًا للوكيل الفرعي ذي المستوى الأعلى في Active Memory.
منافذ تجاوز متقدمة
ليست جزءًا من الإعداد الموصى به. يتجاوزconfig.thinking مستوى تفكير الوكيل الفرعي (القيمة الافتراضية "off"، لأن Active Memory تعمل ضمن مسار الإجابة، ويضيف وقت التفكير الإضافي مباشرةً زمن استجابة ظاهرًا للمستخدم):
config.fastMode الوضع السريع للوكيل الفرعي الحاجب للذاكرة فقط. استخدم true أو false أو "auto"؛ واتركه دون تعيين لوراثة القيم الافتراضية المعتادة للوكيل والجلسة والنموذج. يستخدم "auto" حدّ fastAutoOnSeconds المكوّن لنموذج الاسترجاع:
config.promptAppend تعليمات المشغّل بعد الموجّه الافتراضي وقبل سياق المحادثة — اقرنه بـ toolsAllow مخصص عندما يحتاج Plugin ذاكرة غير أساسي إلى ترتيب محدد للأدوات أو إلى تشكيل الاستعلام:
config.promptOverride الموجّه الافتراضي بالكامل (ويظل سياق المحادثة مضافًا بعده). لا يُنصح به إلا عند اختبار عقد استرجاع مختلف عمدًا — إذ ضُبط الموجّه الافتراضي لإرجاع إما NONE أو سياق موجز لحقائق المستخدم إلى النموذج الرئيسي:
استمرارية نصوص الجلسات
تنشئ عمليات تشغيل الوكيل الفرعي الحاجبة نص جلسةsession.jsonl فعليًا أثناء الاستدعاء. ويُكتب افتراضيًا إلى دليل مؤقت ثم يُحذف فور انتهاء التشغيل.
للاحتفاظ بنصوص الجلسات هذه على القرص لأغراض تصحيح الأخطاء:
config.transcriptDir. استخدم هذا بحذر: فقد تتراكم نصوص الجلسات بسرعة في الجلسات كثيرة النشاط، ويكرر وضع استعلام full قدرًا كبيرًا من سياق المحادثة، كما تحتوي نصوص الجلسات هذه على سياق الموجّه المخفي إضافةً إلى الذكريات المسترجعة.
الإعداد
توجد جميع إعدادات Active Memory ضمنplugins.entries.active-memory.
حقول ضبط مفيدة:
الإعداد الموصى به
ابدأ باستخدامrecent:
/verbose on لسطر الحالة و/trace on لملخص تصحيح الأخطاء
أثناء الضبط — يُرسل كلاهما كمتابعة بعد الرد الرئيسي، وليس
قبله. ثم انتقل إلى message لزمن انتقال أقل، أو full إذا كان السياق الإضافي
يستحق تشغيلًا أبطأ للوكيل الفرعي.
مهلة البدء البارد
قبل v2026.5.2، كان الـ Plugin يمددtimeoutMs ضمنيًا بمقدار 30000
مللي ثانية إضافية أثناء البدء البارد، بحيث يمكن لإحماء النموذج وتحميل فهرس التضمينات وأول
استدعاء مشاركة ميزانية واحدة أكبر. نقل الإصدار v2026.5.2 هذه المهلة خلف
إعداد setupGraceTimeoutMs صريح: أصبح timeoutMs الآن ميزانية عمل
الاستدعاء افتراضيًا، ما لم تختر تفعيلها. يغلّف خطاف الحظر هذه الميزانية في
مرحلتين ثابتتين: ما يصل إلى 1500 مللي ثانية للفحص المسبق للجلسة/الإعداد قبل بدء
الاستدعاء، ثم 1500 مللي ثانية ثابتة ومنفصلة لتسوية الإلغاء واستعادة نص الجلسة
بعد توقف عمل الاستدعاء. لا تمدد أي من السماحين تنفيذ النموذج أو الأداة.
إذا أجريت ترقية من v2026.4.x وضبطت timeoutMs لبيئة
المهلة الضمنية القديمة (ومن أمثلتها قيمة البدء الموصى بها timeoutMs: 15000)،
فاضبط setupGraceTimeoutMs: 30000 لاستعادة الميزانية الفعلية السابقة للإصدار v5.2:
timeoutMs + setupGraceTimeoutMs + 3000 مللي ثانية (ميزانية عمل
الاسترجاع المضبوطة، إضافةً إلى ما يصل إلى 1500 مللي ثانية للفحص التمهيدي،
وسماح ثابت قدره 1500 مللي ثانية لإكمال ما بعد الاسترجاع). يستخدم مشغّل
الاسترجاع المضمّن ميزانية المهلة الفعلية نفسها، لذا يغطي setupGraceTimeoutMs
كلاً من مراقب مهلة إنشاء الموجّه الخارجي وتشغيل الاسترجاع الداخلي الحاظر.
بالنسبة إلى بوابات Gateway ذات الموارد المحدودة حيث يُقبل زمن بدء التشغيل
البارد بوصفه مقايضة، تعمل القيم المنخفضة (5000-15000 مللي ثانية) أيضًا —
وتتمثل المقايضة في زيادة احتمال أن يعيد أول استرجاع بعد إعادة تشغيل Gateway
نتيجة فارغة أثناء اكتمال الإحماء.
تصحيح الأخطاء
إذا لم تظهر Active Memory حيث تتوقع:- تأكد من تمكين Plugin ضمن
plugins.entries.active-memory.enabled. - تأكد من إدراج معرّف الوكيل الحالي في
config.agents. - تأكد من إجراء الاختبار عبر جلسة محادثة تفاعلية مستمرة.
- فعّل
config.logging: trueوراقب سجلات Gateway. - تحقق من أن البحث في الذاكرة نفسه يعمل باستخدام
openclaw status --deep.
maxSummaryChars. وإذا كانت Active Memory
بطيئة جدًا، فاخفض queryMode أو timeoutMs، أو قلّل عدد الأدوار الحديثة
والحد الأقصى للأحرف لكل دور.
المشكلات الشائعة
تعتمد Active Memory على مسار الاسترجاع الخاص بـ Plugin الذاكرة المضبوط، لذا ترجع معظم النتائج غير المتوقعة في الاسترجاع إلى مشكلات موفّر التضمينات، لا إلى أخطاء في Active Memory. يستخدم المسار الافتراضيmemory-core كلاً من
memory_search وmemory_get؛ بينما تستخدم خانة memory-lancedb
القيمة memory_recall. إذا كنت تستخدم Plugin ذاكرة آخر، فتأكد من أن
config.toolsAllow يسمّي الأدوات التي يسجّلها ذلك Plugin فعليًا.
تغيّر موفّر التضمينات أو توقف عن العمل
تغيّر موفّر التضمينات أو توقف عن العمل
إذا لم تكن
memorySearch.provider مضبوطة، يستخدم OpenClaw تضمينات OpenAI.
اضبط memorySearch.provider صراحةً لتضمينات Bedrock أو DeepInfra أو Gemini أو
GitHub Copilot أو LM Studio أو المحلية أو Mistral أو Ollama أو Voyage أو
المتوافقة مع OpenAI. إذا تعذّر تشغيل الموفّر المضبوط، فقد يتراجع
memory_search إلى الاسترجاع المعجمي فقط؛ ولا ترجع إخفاقات وقت التشغيل
تلقائيًا إلى موفّر بديل بعد اختيار موفّر بالفعل.لا تضبط memorySearch.fallback الاختيارية إلا عندما تريد بديلاً واحدًا مقصودًا.
راجع البحث في الذاكرة للاطلاع على القائمة الكاملة
للموفّرين والأمثلة.يبدو الاسترجاع بطيئًا أو فارغًا أو غير متسق
يبدو الاسترجاع بطيئًا أو فارغًا أو غير متسق
- فعّل
/trace onلإظهار ملخص تصحيح أخطاء Active Memory المملوك للـ Plugin في الجلسة. - فعّل
/verbose onلرؤية سطر حالة🧩 Active Memory: ...أيضًا بعد كل رد. - راقب سجلات Gateway بحثًا عن
active-memory: ... start|doneأوmemory sync failed (search-bootstrap)أو أخطاء تضمينات الموفّر. - شغّل
openclaw status --deepلفحص الواجهة الخلفية للبحث في الذاكرة وسلامة الفهرس. - إذا كنت تستخدم
ollama، فتأكد من تثبيت نموذج التضمين (ollama list).
يعيد أول استرجاع بعد إعادة تشغيل Gateway القيمة `status=timeout`
يعيد أول استرجاع بعد إعادة تشغيل Gateway القيمة `status=timeout`
في v2026.5.2 والإصدارات اللاحقة، إذا لم يكتمل إعداد بدء التشغيل البارد
(إحماء النموذج + تحميل فهرس التضمينات) عند تشغيل أول استرجاع، فقد يصل
التشغيل إلى ميزانية
timeoutMs المضبوطة ويعيد
status=timeout مع مخرجات فارغة. تعرض سجلات Gateway
active-memory timeout after Nms عند أول رد مؤهل تقريبًا بعد إعادة التشغيل.راجع مهلة بدء التشغيل البارد ضمن الإعداد الموصى به
لمعرفة قيمة setupGraceTimeoutMs الموصى بها.