Skip to main content
تسرد هذه الصفحة كل إعدادات الضبط الخاصة بالبحث في ذاكرة OpenClaw. للاطلاع على نظرات عامة مفاهيمية، راجع:

نظرة عامة على الذاكرة

كيفية عمل الذاكرة.

المحرك المضمّن

واجهة SQLite الخلفية الافتراضية.

محرك QMD

عملية جانبية محلية أولًا.

البحث في الذاكرة

مسار البحث وضبطه.

Active Memory

وكيل فرعي للذاكرة مخصص للجلسات التفاعلية.
توجد جميع إعدادات البحث في الذاكرة ضمن agents.defaults.memorySearch في openclaw.json (أو تجاوز agents.list[].memorySearch خاص بكل وكيل)، ما لم يُذكر خلاف ذلك.
إذا كنت تبحث عن مفتاح تشغيل ميزة Active Memory وإعدادات الوكيل الفرعي، فتوجد ضمن plugins.entries.active-memory بدلًا من memorySearch.تستخدم Active Memory نموذجًا ذا بوابتين:
  1. يجب تمكين الـ plugin واستهداف معرّف الوكيل الحالي
  2. يجب أن يكون الطلب جلسة محادثة تفاعلية دائمة مؤهلة
راجع Active Memory للاطلاع على نموذج التفعيل، والإعدادات المملوكة للـ plugin، واستمرارية النص المنسوخ، ونمط الطرح الآمن.

اختيار المزوّد

عندما لا يكون provider معيّنًا، يستخدم OpenClaw تضمينات OpenAI. عيّن provider صراحةً لاستخدام Bedrock أو DeepInfra أو Gemini أو GitHub Copilot أو Mistral أو Ollama أو Voyage أو نموذج GGUF محلي أو نقطة نهاية /v1/embeddings متوافقة مع OpenAI. تُحل الإعدادات القديمة التي ما زالت تتضمن provider: "auto" إلى openai.
قد يؤدي تغيير مزوّد التضمين أو النموذج أو إعدادات المزوّد أو المصادر أو النطاق أو التقسيم إلى مقاطع أو أداة التقسيم إلى رموز إلى جعل فهرس متجهات SQLite الحالي غير متوافق. يوقف OpenClaw البحث المتجهي مؤقتًا ويبلغ عن تحذير بشأن هوية الفهرس بدلًا من إعادة تضمين كل شيء تلقائيًا. أعِد البناء عندما تكون مستعدًا باستخدام openclaw memory status --index --agent <id> أو openclaw memory index --force --agent <id>.
عندما لا يكون provider معيّنًا، أو يكون provider: "auto" القديم موجودًا، أو يحدد provider: "none" عمدًا وضع FTS فقط، يمكن لاسترجاع الذاكرة أن يظل يستخدم ترتيب FTS المعجمي عندما لا تكون التضمينات متاحة. تفشل المزوّدات غير المحلية المحددة صراحةً بشكل مغلق. إذا عيّنت memorySearch.provider إلى مزوّد فعلي مدعوم عن بُعد، مثل Bedrock أو DeepInfra أو Gemini أو GitHub Copilot أو LM Studio أو Mistral أو Ollama أو OpenAI أو Voyage أو مزوّد مخصص متوافق مع OpenAI، ولم يكن ذلك المزوّد متاحًا في وقت التشغيل، فإن memory_search يعيد نتيجة عدم توفر بدلًا من استخدام استرجاع FTS فقط بصمت. أصلح إعدادات المزوّد/المصادقة، أو انتقل إلى مزوّد يمكن الوصول إليه، أو عيّن provider: "none" إذا كنت تريد استرجاعًا مقصودًا باستخدام FTS فقط.

معرّفات المزوّدات المخصصة

يمكن أن يشير memorySearch.provider إلى إدخال models.providers.<id> مخصص لمحوّلات المزوّد الخاصة بالذاكرة، مثل ollama، أو لـ APIs نماذج متوافقة مع OpenAI، مثل openai-responses / openai-completions. يحل OpenClaw مالك api لذلك المزوّد من أجل محوّل التضمين، مع الحفاظ على معرّف المزوّد المخصص لمعالجة نقطة النهاية والمصادقة وبادئة النموذج. يتيح ذلك للإعدادات متعددة وحدات GPU أو متعددة المضيفين تخصيص تضمينات الذاكرة لنقطة نهاية محلية محددة:

حل مفتاح API

تتطلب التضمينات البعيدة مفتاح API. ويستخدم Bedrock بدلًا من ذلك سلسلة بيانات الاعتماد الافتراضية لـ AWS SDK (أدوار المثيلات أو SSO أو مفاتيح الوصول أو مفتاح API لـ Bedrock).
لا يغطي OAuth الخاص بـ Codex سوى المحادثة/الإكمالات، ولا يفي بطلبات التضمين.

إعداد نقطة النهاية البعيدة

استخدم provider: "openai-compatible" لخادم /v1/embeddings عام متوافق مع OpenAI يجب ألا يرث بيانات اعتماد محادثة OpenAI العامة.
string
عنوان URL أساسي مخصص لـ API.
string
تجاوز مفتاح API.
object
ترويسات HTTP إضافية (تُدمج مع القيم الافتراضية للمزوّد).

الإعدادات الخاصة بكل مزوّد

يؤدي تغيير النموذج أو outputDimensionality إلى تغيير هوية الفهرس. يوقف OpenClaw البحث المتجهي مؤقتًا إلى أن تعيد بناء فهرس الذاكرة صراحةً.
يمكن لنقاط نهاية التضمين المتوافقة مع OpenAI الاشتراك في حقول طلب input_type الخاصة بالمزوّد. يفيد ذلك لنماذج التضمين غير المتماثلة التي تتطلب تسميات مختلفة لتضمينات الاستعلام والمستندات.
يؤثر تغيير هذه القيم في هوية ذاكرة التخزين المؤقت للتضمينات لفهرسة الدفعات لدى المزوّد، ويجب أن تتبعه إعادة فهرسة للذاكرة عندما يتعامل النموذج في المنبع مع التسميات بصورة مختلفة.

إعداد تضمين Bedrock

يستخدم Bedrock سلسلة بيانات الاعتماد الافتراضية لـ AWS SDK، بالإضافة إلى رمز حامل يتحقق منه OpenClaw، ولذلك لا تُخزّن مفاتيح API في الإعدادات. إذا كان OpenClaw يعمل على EC2 بدور مثيل مفعّل لـ Bedrock، فما عليك سوى تعيين المزوّد والنموذج:
النماذج المدعومة (مع اكتشاف العائلة والقيم الافتراضية للأبعاد):ترث المتغيرات ذات لاحقة معدل النقل (مثل amazon.titan-embed-text-v1:2:8k) ومعرّفات ملفات تعريف الاستدلال ذات بادئة المنطقة (مثل us.amazon.titan-embed-text-v2:0) تهيئة النموذج الأساسي.المنطقة: تُحدَّد بهذا الترتيب: تجاوز memorySearch.remote.baseUrl، ثم تهيئة models.providers.amazon-bedrock.baseUrl، ثم AWS_REGION، ثم AWS_DEFAULT_REGION، وأخيرًا القيمة الافتراضية us-east-1.المصادقة: يتحقق OpenClaw أولًا من AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY أو AWS_BEARER_TOKEN_BEDROCK، ثم ينتقل إلى سلسلة موفّري بيانات الاعتماد الافتراضية القياسية في AWS SDK:
  1. متغيرات البيئة (AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY)، ما لم يكن AWS_PROFILE معيّنًا أيضًا
  2. SSO (فقط عند تهيئة حقول SSO)
  3. ملفات بيانات الاعتماد والتهيئة المشتركة (fromIni، وتشمل AWS_PROFILE)
  4. عملية بيانات الاعتماد (credential_process في ملف تهيئة AWS)
  5. بيانات اعتماد رمز هوية الويب
  6. بيانات اعتماد بيانات تعريف مثيل ECS أو EC2
أذونات IAM: يحتاج دور IAM أو المستخدم إلى:
لتحقيق مبدأ أقل الصلاحيات، احصر InvokeModel في النموذج المحدد:
ثبّت موفّر llama.cpp الرسمي أولًا: openclaw plugins install @openclaw/llama-cpp-provider. النموذج الافتراضي: embeddinggemma-300m-qat-Q8_0.gguf (~0.6 GB، يُنزَّل تلقائيًا). لا تزال نسخ المصدر تتطلب الموافقة على البناء الأصلي: pnpm approve-builds ثم pnpm rebuild node-llama-cpp.استخدم CLI المستقل للتحقق من مسار الموفّر نفسه الذي يستخدمه Gateway:
تُفيد قيم local.contextSize الرقمية أيضًا في تحديد node-llama-cpp التلقائي لطبقات GPU كي تتلاءم أوزان النموذج وسياق التضمين المطلوب معًا. يُبلغ openclaw memory status --deep عن آخر واجهة خلفية معروفة لـ llama.cpp والجهاز والتفريغ والسياق المطلوب وحقائق الذاكرة ذات الطابع الزمني بعد تحميل بيئة التشغيل؛ ولا تؤدي الحالة الخاملة إلى تحميل نموذج.عيّن provider: "local" صراحةً للتضمينات المحلية بصيغة GGUF. تُدعَم hf: ومراجع نماذج HTTP(S) في التهيئات المحلية الصريحة (عبر آلية حل النماذج في node-llama-cpp)، لكنها لا تغيّر الموفّر الافتراضي.

مهلة التضمين المضمّن

number
تجاوز مهلة دفعات التضمين المضمّنة أثناء فهرسة الذاكرة.عند عدم التعيين، يُستخدم الإعداد الافتراضي للموفّر: 600 ثانية للموفّرين المحليين/المستضافين ذاتيًا مثل local وollama وlmstudio، و120 ثانية للموفّرين المستضافين. زد هذه القيمة عندما تكون دفعات التضمين المحلية المعتمدة على CPU سليمة لكنها بطيئة.

سلوك الفهرسة

تقع جميعها ضمن memorySearch.sync ما لم يُذكر خلاف ذلك:
number
حجم الجزء بالرموز المستخدم عند تقسيم مصادر الذاكرة قبل التضمين (الافتراضي: 400).
number
تداخل الرموز بين الأجزاء المتجاورة للحفاظ على السياق قرب حدود التقسيم (الافتراضي: 80).
يؤدي تغيير chunking.tokens أو chunking.overlap إلى تغيير حدود الأجزاء وإبطال هوية الفهرس الحالية (راجع التحذير ضمن اختيار الموفّر).

تهيئة البحث الهجين

تقع جميعها ضمن memorySearch.query: وتقع هذه ضمن memorySearch.query.hybrid:

مثال كامل


مسارات ذاكرة إضافية

يمكن أن تكون المسارات مطلقة أو نسبية إلى مساحة العمل. تُفحص الأدلة تكراريًا بحثًا عن ملفات .md. تعتمد معالجة الروابط الرمزية على الواجهة الخلفية النشطة: يتخطى المحرك المضمّن الروابط الرمزية، بينما يتبع QMD سلوك ماسح QMD الأساسي. للبحث في النصوص المنسوخة عبر الوكلاء ضمن نطاق وكيل، استخدم agents.list[].memorySearch.qmd.extraCollections بدلًا من memory.qmd.paths. تتبع تلك المجموعات الإضافية بنية { path, name, pattern? } نفسها، لكنها تُدمج لكل وكيل ويمكنها الاحتفاظ بأسماء مشتركة صريحة عندما يشير المسار إلى خارج مساحة العمل الحالية. إذا ظهر المسار المحلول نفسه في كل من memory.qmd.paths وmemorySearch.qmd.extraCollections، يحتفظ QMD بالإدخال الأول ويتخطى التكرار.

الذاكرة متعددة الوسائط (Gemini)

فهرس الصور والصوت إلى جانب Markdown باستخدام Gemini Embedding 2:
ينطبق فقط على الملفات في extraPaths. تظل جذور الذاكرة الافتراضية مقتصرة على Markdown. يتطلب gemini-embedding-2-preview. يجب أن تكون قيمة fallback هي "none".
التنسيقات المدعومة: .jpg و.jpeg و.png و.webp و.gif و.heic و.heif (الصور)؛ و.mp3 و.wav و.ogg و.opus و.m4a و.aac و.flac (الصوت).

ذاكرة التخزين المؤقت للتضمينات

يمنع إعادة تضمين النص غير المتغير أثناء إعادة الفهرسة أو تحديثات النصوص المنسوخة. اترك maxEntries دون تعيين للحصول على ذاكرة تخزين مؤقت غير محدودة؛ وعيّنه عندما يكون نمو مساحة القرص أهم من أقصى سرعة لإعادة الفهرسة. عند تعيينه، تُحذف أقدم الإدخالات أولًا (وفق وقت آخر تحديث) بمجرد تجاوز ذاكرة التخزين المؤقت للحد.

الفهرسة الدفعية

متاحة لـ gemini وopenai وvoyage. تكون الدفعات في OpenAI عادةً الأسرع والأقل تكلفة لعمليات الملء اللاحقة الكبيرة. يتحكم remote.nonBatchConcurrency في استدعاءات التضمين المضمنة التي تستخدمها المزوّدات المحلية/ذاتية الاستضافة والمزوّدات المستضافة عندما لا تكون واجهات API الدفعية للمزوّد نشطة. القيمة الافتراضية في Ollama هي 1 للفهرسة غير الدفعية لتجنب إرهاق المضيفات المحلية الأصغر؛ عيّن قيمة أعلى على الأجهزة الأكبر. هذا منفصل عن sync.embeddingBatchTimeoutSeconds، الذي يتحكم في مهلة استدعاءات التضمين المضمنة.

البحث في ذاكرة الجلسة (تجريبي)

فهرس النصوص المنسوخة للجلسات واعرضها عبر memory_search:
فهرسة الجلسات اختيارية وتعمل بصورة غير متزامنة. قد تكون النتائج قديمة قليلًا. توجد سجلات الجلسات على القرص، لذا تعامل مع الوصول إلى نظام الملفات بوصفه حد الثقة.
تلتزم نتائج النصوص المنسوخة للجلسات أيضًا بـ tools.sessions.visibility. لا يكشف نطاق الرؤية الافتراضي tree إلا الجلسة الحالية والجلسات التي أنشأتها. لاسترجاع جلسة غير مرتبطة بالوكيل نفسه أرسلها Gateway من جلسة مختلفة، مثل رسالة مباشرة، وسّع نطاق الرؤية عمدًا إلى agent (أو all فقط عندما يكون الاسترجاع عبر الوكلاء مطلوبًا أيضًا وتسمح به سياسة التواصل بين الوكلاء). تضع الأمثلة أدناه هذه الإعدادات ضمن agents.defaults. يمكن أيضًا تطبيق إعدادات memorySearch المكافئة في تجاوز خاص بكل وكيل عندما ينبغي لوكيل واحد فقط فهرسة النصوص المنسوخة للجلسات والبحث فيها. للاسترجاع من Gateway إلى الرسائل المباشرة ضمن الوكيل نفسه:
عند استخدام QMD، لا يصدّر agents.defaults.memorySearch.experimental.sessionMemory و sources: ["sessions"] النصوص المنسوخة إلى QMD بمفردهما. عيّن memory.qmd.sessions.enabled: true أيضًا.

تسريع المتجهات في SQLite ‏(sqlite-vec)

عندما لا يتوفر sqlite-vec، يعود OpenClaw تلقائيًا إلى تشابه جيب التمام داخل العملية.

تخزين الفهرس

توجد فهارس الذاكرة المدمجة في قاعدة بيانات OpenClaw SQLite الخاصة بكل وكيل في agents/<agentId>/agent/openclaw-agent.sqlite.

إعداد الواجهة الخلفية لـ QMD

عيّن memory.backend = "qmd" للتفعيل. توجد جميع إعدادات QMD ضمن memory.qmd: يعتمد searchMode: "search" على البحث المعجمي/BM25 فقط. لا يشغّل OpenClaw فحوصات جاهزية المتجهات الدلالية أو صيانة تضمينات QMD لهذا الوضع، بما في ذلك أثناء memory status --deep؛ ويظل vsearch وquery يتطلبان جاهزية متجهات QMD وتضميناته. لا يغيّر rerank: false إلا وضع query في QMD ويتطلب QMD 2.1 أو أحدث. في وضع CLI المباشر، يمرر OpenClaw ‏--no-rerank؛ وفي وضع MCP المدعوم بـ mcporter، يمرر rerank: false إلى أداة الاستعلام الموحدة في QMD. اتركه دون تعيين لاستخدام سلوك إعادة ترتيب الاستعلام الافتراضي في QMD. يفضّل OpenClaw أشكال مجموعات QMD واستعلامات MCP الحالية، لكنه يحافظ على عمل إصدارات QMD الأقدم عبر تجربة علامات أنماط المجموعات المتوافقة وأسماء أدوات MCP الأقدم عند الحاجة. عندما يعلن QMD دعمه لعدة مرشحات للمجموعات، يُبحث في المجموعات ذات المصدر نفسه باستخدام عملية QMD واحدة؛ بينما تحتفظ إصدارات QMD الأقدم بمسار التوافق الخاص بكل مجموعة. ويعني المصدر نفسه أن مجموعات الذاكرة الدائمة (ملفات الذاكرة الافتراضية بالإضافة إلى المسارات المخصصة) تُجمع معًا، بينما تظل مجموعات النصوص المنسوخة للجلسات مجموعة منفصلة بحيث يظل تنويع المصادر متضمنًا لكلا المدخلين.
تظل تجاوزات نماذج QMD في جانب QMD، وليس في إعداد OpenClaw. إذا لزم تجاوز نماذج QMD عموميًا، فعيّن متغيرات البيئة مثل QMD_EMBED_MODEL وQMD_RERANK_MODEL وQMD_GENERATE_MODEL في بيئة تشغيل Gateway.

تكامل mcporter

جميعها ضمن memory.qmd.mcporter. يوجّه عمليات بحث QMD عبر برنامج MCP الخفي طويل التشغيل mcporter بدلًا من إنشاء qmd لكل استعلام، مما يقلل عبء بدء التشغيل البارد للنماذج الأكبر. يتطلب تثبيت mcporter ووجوده على PATH، بالإضافة إلى خادم mcporter مُعدّ لتشغيل qmd mcp. أبقه معطلًا للإعدادات المحلية الأبسط التي تكون فيها تكلفة إنشاء عملية لكل استعلام مقبولة.
يتحكم في الجلسات التي يمكنها تلقي نتائج بحث QMD. يستخدم المخطط نفسه كما في session.sendPolicy:
يقتصر الإعداد الافتراضي المضمّن على الرسائل الخاصة/المباشرة، ويرفض المجموعات وأنواع القنوات الأخرى. يطابق match.keyPrefix مفتاح الجلسة الموحّد؛ ويطابق match.rawKeyPrefix المفتاح الخام بما في ذلك agent:<id>:.
ينطبق memory.citations على جميع الخلفيات:
عند تمكين تهيئة QMD عند بدء Gateway، يشغّل OpenClaw ‏QMD فقط للوكلاء المؤهلين. إذا كانت update.onBoot تساوي true ولم تُهيأ أي صيانة بفاصل زمني/تضمين، يستخدم بدء التشغيل مديرًا لمرة واحدة لتنفيذ تحديث الإقلاع ثم يغلقه. وإذا هُيئ فاصل زمني للتحديث أو التضمين، يفتح بدء التشغيل مدير QMD طويل العمر ليتولى المراقب ومؤقتات الفواصل الزمنية؛ ولا يتخطى update.onBoot: false سوى تحديث الإقلاع الفوري.

مثال QMD كامل


Dreaming

تُهيأ Dreaming ضمن plugins.entries.memory-core.config.dreaming، وليس ضمن agents.defaults.memorySearch. تعمل Dreaming كعملية مسح مجدولة واحدة، وتستخدم مراحل خفيفة/عميقة/REM داخلية بوصفها تفصيلًا تنفيذيًا. للاطلاع على السلوك المفاهيمي وأوامر الشرطة المائلة، راجع Dreaming.

إعدادات المستخدم

مثال

  • تكتب Dreaming حالة الآلة إلى memory/.dreams/.
  • تكتب Dreaming المخرجات السردية القابلة للقراءة البشرية إلى DREAMS.md (أو dreams.md الموجود).
  • يستخدم dreaming.model بوابة الثقة الحالية للوكيل الفرعي في Plugin؛ اضبط plugins.entries.memory-core.subagent.allowModelOverride: true قبل تمكينه.
  • يعيد Dream Diary المحاولة مرة واحدة باستخدام نموذج الجلسة الافتراضي عندما يكون النموذج المهيأ غير متاح. تُسجّل حالات فشل الثقة أو قائمة السماح ولا يُعاد تنفيذها بصمت.
  • تُعد سياسة مراحل الخفيف/العميق/REM وحدودها سلوكًا داخليًا، وليست إعدادات موجهة للمستخدم.

ذو صلة