Sessions and memory
البحث في الذاكرة
يعثر memory_search على الملاحظات ذات الصلة من ملفات الذاكرة لديك، حتى عندما
تختلف الصياغة عن النص الأصلي. يعمل ذلك عبر فهرسة الذاكرة في مقاطع صغيرة
والبحث فيها باستخدام التضمينات، أو الكلمات المفتاحية، أو كليهما.
البدء السريع
يستخدم بحث الذاكرة تضمينات OpenAI افتراضيًا. لاستخدام خلفية تضمينات أخرى، عيّن مزودًا صراحةً:
{ agents: { defaults: { memorySearch: { provider: "openai", // or "gemini", "local", "ollama", "openai-compatible", etc. }, }, },}في إعدادات نقاط النهاية المتعددة التي تتضمن مزودين مخصصين للذاكرة، يمكن أن يكون
provider أيضًا إدخالًا مخصصًا من models.providers.<id>، مثل ollama-5080،
عندما يعيّن ذلك المزود api: "ollama" أو مالكًا آخر لمحول تضمينات الذاكرة.
للتضمينات المحلية من دون مفتاح API، ثبّت
@openclaw/llama-cpp-provider وعيّن provider: "local". قد تظل نسخ المصدر
تتطلب موافقة بناء أصلية: pnpm approve-builds ثم
pnpm rebuild node-llama-cpp.
تتطلب بعض نقاط نهاية التضمينات المتوافقة مع OpenAI تسميات غير متماثلة مثل
input_type: "query" لعمليات البحث وinput_type: "document" أو "passage"
للمقاطع المفهرسة. اضبط ذلك باستخدام memorySearch.queryInputType و
memorySearch.documentInputType؛ راجع مرجع إعدادات الذاكرة.
المزودون المدعومون
| المزود | المعرّف | يحتاج إلى مفتاح API | ملاحظات |
|---|---|---|---|
| Bedrock | bedrock |
لا | يستخدم سلسلة اعتماد AWS |
| DeepInfra | deepinfra |
نعم | الافتراضي: BAAI/bge-m3 |
| Gemini | gemini |
نعم | يدعم فهرسة الصور/الصوت |
| GitHub Copilot | github-copilot |
لا | يستخدم اشتراك Copilot |
| Local | local |
لا | نموذج GGUF، تنزيل ~0.6 GB |
| Mistral | mistral |
نعم | |
| Ollama | ollama |
لا | محلي/مستضاف ذاتيًا |
| OpenAI | openai |
نعم | الافتراضي |
| OpenAI-compatible | openai-compatible |
عادةً | عام /v1/embeddings |
| Voyage | voyage |
نعم |
آلية عمل البحث
يشغّل OpenClaw مساري استرجاع بالتوازي ويدمج النتائج:
flowchart LR
Q["Query"] --> E["Embedding"]
Q --> T["Tokenize"]
E --> VS["Vector Search"]
T --> BM["BM25 Search"]
VS --> M["Weighted Merge"]
BM --> M
M --> R["Top Results"]- البحث المتجهي يعثر على الملاحظات ذات المعنى المشابه ("مضيف Gateway" يطابق "الجهاز الذي يشغّل OpenClaw").
- بحث الكلمات المفتاحية BM25 يعثر على التطابقات الدقيقة (المعرّفات، سلاسل الأخطاء، مفاتيح الإعداد).
إذا كان مسار واحد فقط متاحًا، يعمل المسار الآخر وحده. لا يزال وضع FTS المقصود فقط
(provider: "none") والاختيار التلقائي/الافتراضي للمزود قادرين على استخدام
الترتيب المعجمي عندما لا تتوفر التضمينات.
يختلف مزودو التضمينات غير المحليين الصريحون. إذا عيّنت
memorySearch.provider إلى مزود محدد مدعوم عن بُعد وكان ذلك المزود غير متاح
وقت التشغيل، يبلّغ memory_search أن الذاكرة غير متاحة بدلًا من استخدام نتائج
FTS فقط بصمت. هذا يجعل مزود الدلالات المعطّل والمهيأ ظاهرًا. عيّن
provider: "none" للاستدعاء المتعمد عبر FTS فقط، أو أصلح إعدادات المزود/المصادقة
لاستعادة الترتيب الدلالي.
تحسين جودة البحث
تساعد ميزتان اختياريتان عندما يكون لديك سجل ملاحظات كبير:
التناقص الزمني
تفقد الملاحظات القديمة وزن الترتيب تدريجيًا بحيث تظهر المعلومات الحديثة أولًا.
مع نصف العمر الافتراضي البالغ 30 يومًا، تحصل ملاحظة من الشهر الماضي على 50% من
وزنها الأصلي. لا تتناقص الملفات الدائمة مثل MEMORY.md أبدًا.
MMR (التنوع)
يقلل النتائج المتكررة. إذا ذكرت خمس ملاحظات إعداد الموجه نفسه، يضمن MMR أن تغطي النتائج الأعلى موضوعات مختلفة بدلًا من التكرار.
تفعيل كليهما
{ agents: { defaults: { memorySearch: { query: { hybrid: { mmr: { enabled: true }, temporalDecay: { enabled: true }, }, }, }, }, },}الذاكرة متعددة الوسائط
مع Gemini Embedding 2، يمكنك فهرسة الصور وملفات الصوت إلى جانب Markdown. تظل استعلامات البحث نصية، لكنها تطابق المحتوى المرئي والصوتي. راجع مرجع إعدادات الذاكرة للإعداد.
بحث ذاكرة الجلسة
يمكنك اختياريًا فهرسة نصوص الجلسات بحيث يستطيع memory_search استدعاء
المحادثات السابقة. هذا خيار اشتراك عبر
memorySearch.experimental.sessionMemory وsources: ["sessions"]؛ قائمة
المصادر الافتراضية مخصصة للذاكرة فقط. يفعّل العلم التجريبي فهرسة نصوص الجلسات،
بينما تتحكم sources فيما إذا كانت مقاطع الجلسات ستُبحث.
تلتزم نتائج الجلسات بـ tools.sessions.visibility: الإعداد الافتراضي tree
يعرض الجلسة الحالية والجلسات التي أنشأتها فقط. لاستدعاء جلسة غير مرتبطة للوكيل
نفسه أرسلها Gateway من جلسة رسالة مباشرة منفصلة، وسّع الرؤية عمدًا إلى agent.
عند استخدام QMD، عيّن أيضًا memory.qmd.sessions.enabled: true حتى تُصدّر
النصوص إلى مجموعة QMD. راجع
مرجع الإعدادات للتفاصيل.
استكشاف الأخطاء وإصلاحها
لا توجد نتائج؟ شغّل openclaw memory status للتحقق من الفهرس. إذا كان
فارغًا، شغّل openclaw memory index --force.
تطابقات كلمات مفتاحية فقط؟ قد لا يكون مزود التضمينات مهيأً. تحقق من
openclaw memory status --deep.
هل تنتهي مهلة التضمينات المحلية؟ يستخدم ollama وlmstudio وlocal مهلة
دفعات مضمنة أطول افتراضيًا. إذا كان المضيف بطيئًا ببساطة، عيّن
agents.defaults.memorySearch.sync.embeddingBatchTimeoutSeconds ثم أعد تشغيل
openclaw memory index --force.
نص CJK غير موجود؟ أعد بناء فهرس FTS باستخدام
openclaw memory index --force.
قراءات إضافية
- Active Memory -- ذاكرة وكيل فرعي لجلسات الدردشة التفاعلية
- الذاكرة -- تخطيط الملفات، الخلفيات، الأدوات
- مرجع إعدادات الذاكرة -- جميع مفاتيح الإعداد