بحث ذاكرة مساحة العمل
الهدف: مساحة عمل على نمط Clawd (agents.defaults.workspace، الافتراضي ~/.openclaw/workspace) حيث يتم تخزين "الذاكرة" كملف Markdown واحد لكل يوم (memory/YYYY-MM-DD.md) بالإضافة إلى مجموعة صغيرة من الملفات الثابتة (مثل memory.md، SOUL.md). يقترح هذا المستند بنية ذاكرة ذات أولوية عدم الاتصال (offline-first) تحتفظ بـ Markdown كمصدر حقيقي قانوني قابل للمراجعة، ولكن تضيف استرجاعًا منظمًا (بحث، ملخصات كيانات، تحديثات ثقة) عبر فهرس مشتق.
لماذا التغيير؟
الإعداد الحالي (ملف واحد لكل يوم) ممتاز من أجل:
- التدوين اليومي "للإلحاق فقط"
- التحرير البشري
- المتانة + إمكانية التدقيق المدعومة بـ git
- تسجيل منخفض الاحتكاك ("فقط اكتبه")
لكنه ضعيف من أجل:
- استرجاع عالي الاستدعاء ("ماذا قررنا بشأن X؟"، "آخر مرة حاولنا فيها Y؟")
- إجابات مركزة على الكيانات ("أخبرني عن أليس / القلعة / warelay") دون إعادة قراءة العديد من الملفات
- استقرار الرأي/التفضيل (والدليل عندما يتغير)
- قيود زمنية ("ما الذي كان صحيحًا خلال نوفمبر 2025؟") وحل التعارضات
أهداف التصميم
- بدون اتصال (Offline): يعمل بدون شبكة؛ يمكن تشغيله على الكمبيوتر المحمول/القلعة؛ لا يعتمد على السحابة.
- قابل للتفسير (Explainable): يجب أن تكون العناصر المسترجعة قابلة للإسناد (ملف + موقع) وقابلة للفصل عن الاستدلال.
- منخفض التعقيد (Low ceremony): يبقى التسجيل اليومي بـ Markdown، دون عمل مخططات معقدة.
- تدريجي (Incremental): النسخة v1 مفيدة مع FTS فقط؛ البحث الدلالي/المتجهي والرسوم البيانية هي ترقيات اختيارية.
- ملائم للوكيل (Agent-friendly): يجعل "استرجاع الذاكرة ضمن ميزانية الرموز (token budgets)" سهلاً (إرجاع حزم صغيرة من الحقائق).
النموذج النجمي الشمالي (Hindsight × Letta)
قطعتان للدمج:
- حلقة تحكم على نمط Letta/MemGPT
- الاحتفاظ بـ "نواة" صغيرة دائمًا في السياق (الشخصية + حقائق المستخدم الرئيسية)
- كل شيء آخر خارج السياق ويتم استرجاعه عبر أدوات
- كتابات الذاكرة هي استدعاءات أدوات صريحة (إلحاق/استبدال/إدراج)، يتم حفظها، ثم إعادة حقنها في الدور التالي
- الطبقة الأساسية للذاكرة على نمط Hindsight
- فصل ما يتم ملاحظته عما يتم الاعتقاد به عما يتم تلخيصه
- دعم الاحتفاظ/الاسترجاع/التأمل
- آراء تحمل درجة ثقة يمكن أن تتطور مع الأدلة
- استرجاع واعي بالكيانات + استعلامات زمنية (حتى بدون رسوم بيانية معرفية كاملة)
البنية المقترحة (Markdown كمصدر للحقيقة + فهرس مشتق)
المخزن القانوني (ملائم لـ git)
الاحتفاظ بـ ~/.openclaw/workspace كذاكرة قانونية قابلة للقراءة من قبل البشر. تخطيط مساحة العمل المقترح:
~/.openclaw/workspace/
memory.md # صغير: حقائق دائمة + تفضيلات (أشبه بالنواة)
memory/
YYYY-MM-DD.md # السجل اليومي (إلحاق؛ سردي)
bank/ # صفحات ذاكرة "مُهيكلة" (ثابتة، قابلة للمراجعة)
world.md # حقائق موضوعية عن العالم
experience.md # ما فعله الوكيل (من وجهة نظر المتكلم)
opinions.md # تفضيلات/أحكام ذاتية + درجة ثقة + مؤشرات أدلة
entities/
Peter.md
The-Castle.md
warelay.md
...
ملاحظات:
- السجل اليومي يبقى سجلًا يوميًا. لا حاجة لتحويله إلى JSON.
- ملفات
bank/هي مُنتقاة، تُنتج بواسطة وظائف التأمل، ويمكن تحريرها يدويًا أيضًا. memory.mdيبقى "صغيرًا + أشبه بالنواة": الأشياء التي تريد أن يراها Clawd في كل جلسة.
المخزن المشتق (استرجاع آلي)
إضافة فهرس مشتق تحت مساحة العمل (ليس بالضرورة متتبعًا بـ git):
~/.openclaw/workspace/.memory/index.sqlite
دعمه بـ:
- مخطط SQLite للحقائق + روابط الكيانات + بيانات وصفية للآراء
- SQLite FTS5 للاسترجاع المعجمي (سريع، صغير الحجم، بدون اتصال)
- جدول تضمينات اختياري للاسترجاع الدلالي (لا يزال بدون اتصال)
الفهرس دائمًا قابل لإعادة البناء من Markdown.
الاحتفاظ / الاسترجاع / التأمل (الحلقة التشغيلية)
الاحتفاظ: توحيد السجلات اليومية إلى "حقائق"
الرؤية الرئيسية لـ Hindsight التي تهم هنا: تخزين حقائق سردية مستقلة بذاتها، وليس مقاطع صغيرة. قاعدة عملية لـ memory/YYYY-MM-DD.md:
- في نهاية اليوم (أو خلاله)، إضافة قسم
## Retainيحتوي على 2–5 نقاط ذات تعداد هي:- سردية (يتم الحفاظ على السياق عبر الأدوار)
- مستقلة بذاتها (تكون مفهومة بمفردها لاحقًا)
- موسومة بنوع + إشارات للكيانات
مثال:
## Retain
- W @Peter: Currently in Marrakech (Nov 27–Dec 1, 2025) for Andy’s birthday.
- B @warelay: I fixed the Baileys WS crash by wrapping connection.update handlers in try/catch (see memory/2025-11-27.md).
- O(c=0.95) @Peter: Prefers concise replies (<1500 chars) on WhatsApp; long content goes into files.
تحليل بسيط:
- بادئة النوع:
W(عالم)،B(تجربة/سيرة ذاتية)،O(رأي)،S(ملاحظة/ملخص؛ عادة ما يتم توليده) - الكيانات:
@Peter،@warelay، إلخ (المعرفات تُرسم إلىbank/entities/*.md) - ثقة الرأي:
O(c=0.0..1.0)اختياري
إذا كنت لا تريد من المؤلفين التفكير في ذلك: يمكن لوظيفة التأمل استنتاج هذه النقاط من بقية السجل، لكن وجود قسم ## Retain صريح هو أسهل "رافعة للجودة".
الاسترجاع: استعلامات على الفهرس المشتق
يجب أن يدعم الاسترجاع:
- معجمي: "العثور على مصطلحات / أسماء / أوامر دقيقة" (FTS5)
- مركز على الكيان: "أخبرني عن X" (صفحات الكيان + حقائق مرتبطة بالكيان)
- زمني: "ماذا حدث حوالي 27 نوفمبر" / "منذ الأسبوع الماضي"
- رأي: "ماذا يفضل بيتر؟" (مع درجة ثقة + أدلة)
يجب أن يكون تنسيق الإرجاع ملائمًا للوكيل ويشير إلى المصادر:
kind(world|experience|opinion|observation)timestamp(اليوم المصدر، أو النطاق الزمني المستخرج إذا كان موجودًا)entities(["Peter","warelay"])content(الحقيقة السردية)source(memory/2025-11-27.md#L12إلخ)
التأمل: إنتاج صفحات مستقرة + تحديث المعتقدات
التأمل هو وظيفة مجدولة (يوميًا أو مع نبض ultrathink) تقوم بـ:
- تحديث
bank/entities/*.mdمن الحقائق الحديثة (ملخصات الكيانات) - تحديث درجة الثقة في
bank/opinions.mdبناءً على التعزيز/التناقض - اقتراح تحريرات لـ
memory.mdاختياريًا (الحقائق الدائمة "أشبه بالنواة")
تطور الرأي (بسيط، قابل للتفسير):
- لكل رأي:
- عبارة
- درجة ثقة
c ∈ [0,1] - last_updated
- روابط أدلة (معرفات حقائق داعمة + متناقضة)
- عند وصول حقائق جديدة:
- العثور على آراء مرشحة عن طريق تداخل الكيانات + التشابه (FTS أولاً، التضمينات لاحقًا)
- تحديث درجة الثقة بفروق صغيرة؛ القفزات الكبيرة تتطلب تناقضًا قويًا + أدلة متكررة
التكامل مع CLI: مستقل مقابل تكامل عميق
التوصية: تكامل عميق في OpenClaw، ولكن الاحتفاظ بمكتبة أساسية قابلة للفصل.
لماذا التكامل في OpenClaw؟
- OpenClaw يعرف بالفعل:
- مسار مساحة العمل (
agents.defaults.workspace) - نموذج الجلسة + النبضات
- أنماط التسجيل + استكشاف الأخطاء
- مسار مساحة العمل (
- تريد أن يستدعي الوكيل نفسه الأدوات:
openclaw memory recall "…" --k 25 --since 30dopenclaw memory reflect --since 7d
لماذا لا يزال الفصل لمكتبة؟
- الحفاظ على منطق الذاكرة قابلًا للاختبار بدون بوابة/وقت تشغيل
- إعادة الاستخدام من سياقات أخرى (نصوص محلية، تطبيق سطح مكتب مستقبلي، إلخ)
الشكل: يُقصد بأدوات الذاكرة أن تكون طبقة CLI + مكتبة صغيرة، ولكن هذا استكشافي فقط.
"S-Collide" / SuCo: متى تستخدمه (بحث)
إذا كان "S-Collide" يشير إلى SuCo (تصادم الفضاء الجزئي): فهو نهج استرجاع ANN يستهدف مفاضلات قوية بين الاستدعاء/الكمون باستخدام تصادمات مُتعلمة/مُهيكلة في أفضية جزئية (ورقة: arXiv 2411.14754، 2024). منظور عملي لـ ~/.openclaw/workspace:
- لا تبدأ بـ SuCo.
- ابدأ بـ SQLite FTS + (اختياري) تضمينات بسيطة؛ ستحصل على معظم مزايا تجربة المستخدم فورًا.
- فكر في حلول من فئة SuCo/HNSW/ScaNN فقط عندما:
- يكون النص كبيرًا (عشرات/مئات الآلاف من المقاطع)
- يصبح البحث بالتضمين بالقوة الغاشمة بطيئًا جدًا
- تكون جودة الاستدعاء مقيدة بشكل كبير بالبحث المعجمي
بدائل ملائمة لعدم الاتصال (بزيادة التعقيد):
- SQLite FTS5 + مرشحات بيانات وصفية (بدون تعلم آلي)
- تضمينات + بحث بالقوة الغاشمة (يعمل بشكل مدهش إذا كان عدد المقاطع منخفضًا)
- فهرس HNSW (شائع، قوي؛ يحتاج إلى ربط مكتبة)
- SuCo (درجة بحث؛ جذاب إذا كان هناك تنفيذ متين يمكن تضمينه)
سؤال مفتوح:
- ما هو أفضل نموذج تضمين بدون اتصال لـ "ذاكرة المساعد الشخصي" على أجهزتك (كمبيوتر محمول + كمبيوتر مكتبي)؟
- إذا كان لديك Ollama بالفعل: قم بالتضمين باستخدام نموذج محلي؛ وإلا فقم بشحن نموذج تضمين صغير في سلسلة الأدوات.
أصغر تجربة رائدة مفيدة
إذا كنت تريد نسخة دنيا لا تزال مفيدة:
- أضف صفحات كيانات في
bank/وقسم## Retainفي السجلات اليومية. - استخدم SQLite FTS للاسترجاع مع إشارات للمصادر (المسار + أرقام الأسطر).
- أضف التضمينات فقط إذا تطلبت جودة الاسترجاع أو نطاقه ذلك.
المراجع
- مفاهيم Letta / MemGPT: "كتل ذاكرة أساسية" + "ذاكرة أرشيفية" + ذاكرة ذات تحرير ذاتي مدفوعة بالأدوات.
- التقرير الفني لـ Hindsight: "الاحتفاظ / الاسترجاع / التأمل"، ذاكرة ذات أربع شبكات، استخراج حقائق سردية، تطور ثقة الرأي.
- SuCo: arXiv 2411.14754 (2024): "تصادم الفضاء الجزئي" للاسترجاع التقريبي لأقرب الجيران.
خطة ربط الجلسة غير المرتبطة بقناة محددةاستكشاف تكوين النموذج