المستوى: متوسط–متقدم · وقت القراءة: ~8 دقائق
إذا كنت تبني نظام multi-agent باستخدام OpenClaw، فالذاكرة هي الفرق بين agent يبدأ من الصفر كل جلسة، وآخر يتذكر كل قرار وكل سياق سبق.
هذا الدليل يوثّق ثلاثة أشياء: كيفية التحقق من أن الذاكرة تعمل، وكيف تُصلح المشاكل الشائعة، وكيف تضمن أن كل agent يحفظ ويسترجع تلقائياً — بدون أي تكلفة API خارجية.
أولاً: كيف تعمل الذاكرة في OpenClaw
قبل أي إعداد، من المهم فهم أن OpenClaw يستخدم Hybrid Search — يجمع بين نوعين من البحث:
- Vector Search — يبحث بالمعنى والسياق عبر embeddings
- FTS (Full-Text Search) — يبحث بالكلمات المطابقة
كل agent عنده قاعدة بيانات SQLite منفصلة تُخزَّن في:
~/.openclaw/memory/<agent-name>.sqlite
والـ embedding model المستخدم افتراضياً هو nomic-embed-text عبر Ollama — يعني محلياً على جهازك، بدون أي API call خارجي.
ثانياً: التحقق من حالة الذاكرة
الخطوة الأولى دائماً: معرفة الوضع الحالي.
openclaw memory statusناتج مثالي يبدو هكذا:
Memory Search (main)
Provider: openai (requested: openai)
Model: nomic-embed-text
Indexed: 9/9 files · 32 chunks
Dirty: no
Vector: ready
FTS: ready
Embedding cache: enabled (41)
ماذا تعني هذه المؤشرات؟
| الحالة | المعنى | الإجراء |
|---|---|---|
Dirty: yes | ملفات جديدة لم تُفهرس بعد | openclaw memory index --force |
Indexed: 0/X files | لم يحدث indexing أصلاً | تحقق من مجلد الـ memory |
memory directory missing | المجلد غير موجود | أنشئه يدوياً (الخطوة التالية) |
ثالثاً: إصلاح مشكلة المجلدات الناقصة
من أشيع المشاكل أن بعض الـ agents لا تجد مجلد memory الخاص بها، فتظهر رسالة Issues: memory directory missing.
الحل مباشر:
# أنشئ المجلدات لكل الـ agents دفعة واحدة
mkdir -p ~/.openclaw/workspace/agents/{summarizer,strategist,publisher,artist,researcher}/memory
# أعد بناء الـ index
openclaw memory index --force
# تحقق من النتيجة
openclaw memory statusالنتيجة المتوقعة: كل الـ agents تظهر Dirty: no ✅
رابعاً: الإعداد الذي يغفل عنه الجميع
هذه هي الخطوة الأهم — ويتجاوزها معظم الناس.
الـ indexing تلقائي، لكن كتابة المحادثات لملفات الذاكرة تحتاج إعداداً صريحاً.
تحقق أولاً من الإعداد الحالي:
grep -A 8 "memoryFlush" ~/.openclaw/openclaw.json
grep -A 8 "compaction" ~/.openclaw/openclaw.json❌ الإعداد الناقص
"compaction": {
"mode": "safeguard"
}هذا يضغط المحادثة عند امتلاء الـ context — لكنه لا يكتب شيئاً للذاكرة.
✅ الإعداد الصحيح
"compaction": {
"mode": "safeguard",
"memoryFlush": {
"enabled": true,
"softThresholdTokens": 32000,
"prompt": "Save decisions, state changes, lessons, blockers, approved actions, and open tasks to memory/YYYY-MM-DD.md. Skip routine conversation. If nothing worth storing: NO_FLUSH"
}
},بعد التعديل، أعد التشغيل:
openclaw gateway restartخامساً: كيف تسير العملية بعد الإعداد
عندما يكون كل شيء مضبوطاً، هذا ما يحدث تلقائياً في كل جلسة:
المحادثة تقترب من الـ context limit
↓
memoryFlush يُفعَّل تلقائياً
↓
الـ Agent يكتب ملخصاً في memory/YYYY-MM-DD.md
↓
File Watcher يكتشف الملف الجديد
↓
nomic-embed-text يولّد embeddings محلياً (مجاناً)
↓
يُحفظ في SQLite جاهز للاسترجاع ✅
سادساً: إعداد أمر المحرر في Terminal
مشكلة شائعة عند تعديل ملفات الإعدادات: عدم وجود أمر المحرر في الـ PATH.
لإصلاحها من داخل أي محرر (VS Code، Cursor، Antigravity):
Cmd+Shift+P → "Install 'code' command in PATH"
لو تريد اسماً موحّداً بغض النظر عن المحرر:
# مثال لـ Antigravity
echo 'alias code="antigravity"' >> ~/.zshrc
source ~/.zshrcقائمة التحقق النهائية
قبل ما تعتبر الإعداد مكتملاً، تأكد من كل نقطة:
- كل الـ agents تظهر
Dirty: no -
Vector: readyعلى كل agent -
FTS: readyعلى كل agent -
memoryFlushمُفعَّل فيopenclaw.json - مجلدات memory موجودة لكل agent
-
nomic-embed-textيعمل محلياً بدون تكلفة API
خلاصة
الإعداد الافتراضي لـ OpenClaw يوفر indexing تلقائياً ممتازاً، لكنه لا يضمن حفظ المحادثات بدون تفعيل memoryFlush صراحةً.
الإصلاحات الموثّقة هنا تضمن أن كل agent في نظامك يتذكر السياق عبر الجلسات — مما يرفع جودة المخرجات بشكل ملحوظ، خصوصاً في أنظمة الـ multi-agent التي تمتد لفترات طويلة.
عبدالكريم العنزي — Astral
