الانتقال إلى المحتوى الرئيسي

تجارب

بحث ذاكرة مساحة العمل

الهدف: مساحة عمل على نمط 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)​

قطعتان للدمج:

  1. حلقة تحكم على نمط Letta/MemGPT
  • الاحتفاظ بـ "نواة" صغيرة دائمًا في السياق (الشخصية + حقائق المستخدم الرئيسية)
  • كل شيء آخر خارج السياق ويتم استرجاعه عبر أدوات
  • كتابات الذاكرة هي استدعاءات أدوات صريحة (إلحاق/استبدال/إدراج)، يتم حفظها، ثم إعادة حقنها في الدور التالي
  1. الطبقة الأساسية للذاكرة على نمط 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 30d
    • openclaw 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): "تصادم الفضاء الجزئي" للاسترجاع التقريبي لأقرب الجيران.

خطة ربط الجلسة غير المرتبطة بقناة محددةاستكشاف تكوين النموذج