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

مرجع تهيئة الذاكرة

تسرد هذه الصفحة كل خيارات التهيئة لبحث ذاكرة OpenClaw. للحصول على نظرات عامة مفاهيمية، راجع: توجد جميع إعدادات بحث الذاكرة تحت agents.defaults.memorySearch في openclaw.json ما لم يُذكر خلاف ذلك.

اختيار الموفر

المفتاحالنوعالافتراضيالوصف
providerstringيُكتشف تلقائيًامعرّف مهايئ التضمين: openai، gemini، voyage، mistral، ollama، local
modelstringالافتراضي للموفراسم نموذج التضمين
fallbackstring"none"معرّف المهايئ الاحتياطي عند فشل الأساسي
enabledbooleantrueتمكين أو تعطيل بحث الذاكرة

ترتيب الاكتشاف التلقائي

عندما لا يتم تعيين provider، يختار OpenClaw أول خيار متاح:
  1. local — إذا كانت memorySearch.local.modelPath مهيأة والملف موجودًا.
  2. openai — إذا أمكن حل مفتاح OpenAI.
  3. gemini — إذا أمكن حل مفتاح Gemini.
  4. voyage — إذا أمكن حل مفتاح Voyage.
  5. mistral — إذا أمكن حل مفتاح Mistral.
ollama مدعوم لكنه لا يُكتشف تلقائيًا (عيّنه صراحةً).

حل مفتاح API

تتطلب عمليات التضمين البعيدة مفتاح API. يحل OpenClaw المفتاح من: ملفات تعريف المصادقة، أو models.providers.*.apiKey، أو متغيرات البيئة.
الموفرمتغير البيئةمفتاح التهيئة
OpenAIOPENAI_API_KEYmodels.providers.openai.apiKey
GeminiGEMINI_API_KEYmodels.providers.google.apiKey
VoyageVOYAGE_API_KEYmodels.providers.voyage.apiKey
MistralMISTRAL_API_KEYmodels.providers.mistral.apiKey
OllamaOLLAMA_API_KEY (عنصر نائب)
يغطي Codex OAuth الدردشة/الإكمالات فقط ولا يفي بطلبات التضمين.

تهيئة نقطة النهاية البعيدة

لنقاط النهاية المخصصة المتوافقة مع OpenAI أو لتجاوز الإعدادات الافتراضية للموفر:
المفتاحالنوعالوصف
remote.baseUrlstringعنوان URL أساسي مخصص للـ API
remote.apiKeystringتجاوز مفتاح API
remote.headersobjectرؤوس HTTP إضافية (تُدمج مع الإعدادات الافتراضية للموفر)
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai",
        model: "text-embedding-3-small",
        remote: {
          baseUrl: "https://api.example.com/v1/",
          apiKey: "YOUR_KEY",
        },
      },
    },
  },
}

تهيئة خاصة بـ Gemini

المفتاحالنوعالافتراضيالوصف
modelstringgemini-embedding-001يدعم أيضًا gemini-embedding-2-preview
outputDimensionalitynumber3072بالنسبة إلى Embedding 2: 768 أو 1536 أو 3072
يؤدي تغيير النموذج أو outputDimensionality إلى إعادة فهرسة كاملة تلقائية.

تهيئة التضمين المحلي

المفتاحالنوعالافتراضيالوصف
local.modelPathstringيُنزَّل تلقائيًاالمسار إلى ملف نموذج GGUF
local.modelCacheDirstringافتراضي node-llama-cppدليل التخزين المؤقت للنماذج المُنزَّلة
النموذج الافتراضي: embeddinggemma-300m-qat-Q8_0.gguf (~0.6 غيغابايت، يُنزَّل تلقائيًا). يتطلب بناءً أصليًا: pnpm approve-builds ثم pnpm rebuild node-llama-cpp.

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

كلها تحت memorySearch.query.hybrid:
المفتاحالنوعالافتراضيالوصف
enabledbooleantrueتمكين بحث BM25 + المتجهات الهجين
vectorWeightnumber0.7الوزن لدرجات المتجهات (0-1)
textWeightnumber0.3الوزن لدرجات BM25 (0-1)
candidateMultipliernumber4مضاعف حجم مجموعة المرشحين

MMR (التنوع)

المفتاحالنوعالافتراضيالوصف
mmr.enabledbooleanfalseتمكين إعادة الترتيب باستخدام MMR
mmr.lambdanumber0.70 = أقصى تنوع، 1 = أقصى صلة

الاضمحلال الزمني (الحداثة)

المفتاحالنوعالافتراضيالوصف
temporalDecay.enabledbooleanfalseتمكين تعزيز الحداثة
temporalDecay.halfLifeDaysnumber30تنخفض الدرجة إلى النصف كل N يومًا
الملفات الدائمة (MEMORY.md والملفات غير المؤرخة في memory/) لا يطبق عليها الاضمحلال أبدًا.

مثال كامل

{
  agents: {
    defaults: {
      memorySearch: {
        query: {
          hybrid: {
            vectorWeight: 0.7,
            textWeight: 0.3,
            mmr: { enabled: true, lambda: 0.7 },
            temporalDecay: { enabled: true, halfLifeDays: 30 },
          },
        },
      },
    },
  },
}

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

المفتاحالنوعالوصف
extraPathsstring[]أدلة أو ملفات إضافية للفهرسة
{
  agents: {
    defaults: {
      memorySearch: {
        extraPaths: ["../team-docs", "/srv/shared-notes"],
      },
    },
  },
}
يمكن أن تكون المسارات مطلقة أو نسبة إلى مساحة العمل. تُفحص الأدلة بشكل递归 بحثًا عن ملفات .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:
المفتاحالنوعالافتراضيالوصف
multimodal.enabledbooleanfalseتمكين الفهرسة متعددة الوسائط
multimodal.modalitiesstring[]["image"] أو ["audio"] أو ["all"]
multimodal.maxFileBytesnumber10000000الحد الأقصى لحجم الملف للفهرسة
ينطبق هذا فقط على الملفات ضمن extraPaths. تظل جذور الذاكرة الافتراضية خاصة بـ Markdown فقط. يتطلب gemini-embedding-2-preview. يجب أن تكون قيمة fallback هي "none". التنسيقات المدعومة: .jpg و.jpeg و.png و.webp و.gif و.heic و.heif (صور)؛ .mp3 و.wav و.ogg و.opus و.m4a و.aac و.flac (صوت).

التخزين المؤقت للتضمين

المفتاحالنوعالافتراضيالوصف
cache.enabledbooleanfalseتخزين تضمينات المقاطع في SQLite
cache.maxEntriesnumber50000الحد الأقصى للتضمينات المخزنة
يمنع إعادة تضمين النص غير المتغير أثناء إعادة الفهرسة أو تحديثات النصوص.

الفهرسة على دفعات

المفتاحالنوعالافتراضيالوصف
remote.batch.enabledbooleanfalseتمكين API التضمين الدفعي
remote.batch.concurrencynumber2مهام الدفعات المتوازية
remote.batch.waitbooleantrueانتظار اكتمال الدفعة
remote.batch.pollIntervalMsnumberفترة الاستطلاع
remote.batch.timeoutMinutesnumberمهلة الدفعة
متاح لـ openai وgemini وvoyage. عادةً ما تكون دفعات OpenAI الأسرع والأرخص لعمليات التعبئة الخلفية الكبيرة.

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

افهرس نصوص الجلسات وأظهرها عبر memory_search:
المفتاحالنوعالافتراضيالوصف
experimental.sessionMemorybooleanfalseتمكين فهرسة الجلسات
sourcesstring[]["memory"]أضف "sessions" لتضمين النصوص
sync.sessions.deltaBytesnumber100000عتبة البايت لإعادة الفهرسة
sync.sessions.deltaMessagesnumber50عتبة الرسائل لإعادة الفهرسة
فهرسة الجلسات اختيارية وتعمل بشكل غير متزامن. قد تكون النتائج قديمة قليلًا. تُخزن سجلات الجلسات على القرص، لذا اعتبر الوصول إلى نظام الملفات هو حد الثقة.

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

المفتاحالنوعالافتراضيالوصف
store.vector.enabledbooleantrueاستخدام sqlite-vec لاستعلامات المتجهات
store.vector.extensionPathstringمضمّنتجاوز مسار sqlite-vec
عندما لا يكون sqlite-vec متاحًا، يعود OpenClaw تلقائيًا إلى تشابه جيب التمام داخل العملية.

تخزين الفهرس

المفتاحالنوعالافتراضيالوصف
store.pathstring~/.openclaw/memory/{agentId}.sqliteموقع الفهرس (يدعم الرمز {agentId})
store.fts.tokenizerstringunicode61محلل FTS5 (unicode61 أو trigram)

تهيئة الواجهة الخلفية لـ QMD

عيّن memory.backend = "qmd" للتمكين. توجد جميع إعدادات QMD تحت memory.qmd:
المفتاحالنوعالافتراضيالوصف
commandstringqmdمسار الملف التنفيذي لـ QMD
searchModestringsearchأمر البحث: search أو vsearch أو query
includeDefaultMemorybooleantrueفهرسة MEMORY.md وmemory/**/*.md تلقائيًا
paths[]arrayمسارات إضافية: { name, path, pattern? }
sessions.enabledbooleanfalseفهرسة نصوص الجلسات
sessions.retentionDaysnumberمدة الاحتفاظ بالنصوص
sessions.exportDirstringدليل التصدير

جدول التحديث

المفتاحالنوعالافتراضيالوصف
update.intervalstring5mفترة التحديث
update.debounceMsnumber15000إزالة ارتداد تغييرات الملفات
update.onBootbooleantrueالتحديث عند بدء التشغيل
update.waitForBootSyncbooleanfalseحظر بدء التشغيل حتى اكتمال التحديث
update.embedIntervalstringوتيرة تضمين منفصلة
update.commandTimeoutMsnumberمهلة أوامر QMD
update.updateTimeoutMsnumberمهلة عمليات تحديث QMD
update.embedTimeoutMsnumberمهلة عمليات تضمين QMD

الحدود

المفتاحالنوعالافتراضيالوصف
limits.maxResultsnumber6الحد الأقصى لنتائج البحث
limits.maxSnippetCharsnumberتقييد طول المقتطف
limits.maxInjectedCharsnumberتقييد إجمالي الأحرف المُدرجة
limits.timeoutMsnumber4000مهلة البحث

النطاق

يتحكم في الجلسات التي يمكنها تلقي نتائج بحث QMD. نفس المخطط كما في session.sendPolicy:
{
  memory: {
    qmd: {
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
    },
  },
}
الإعداد الافتراضي هو الرسائل المباشرة فقط. يطابق match.keyPrefix مفتاح الجلسة الموحّد؛ ويطابق match.rawKeyPrefix المفتاح الخام بما في ذلك agent:<id>:.

الاستشهادات

ينطبق memory.citations على جميع الواجهات الخلفية:
القيمةالسلوك
auto (افتراضي)تضمين تذييل Source: <path#line> في المقتطفات
onتضمين التذييل دائمًا
offحذف التذييل (يظل المسار يُمرر إلى الوكيل داخليًا)

مثال كامل لـ QMD

{
  memory: {
    backend: "qmd",
    citations: "auto",
    qmd: {
      includeDefaultMemory: true,
      update: { interval: "5m", debounceMs: 15000 },
      limits: { maxResults: 6, timeoutMs: 4000 },
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
      paths: [{ name: "docs", path: "~/notes", pattern: "**/*.md" }],
    },
  },
}

Dreaming (تجريبي)

تتم تهيئة Dreaming تحت plugins.entries.memory-core.config.dreaming, وليس تحت agents.defaults.memorySearch. للحصول على التفاصيل المفاهيمية وأوامر الدردشة، راجع Dreaming.
المفتاحالنوعالافتراضيالوصف
modestring"off"إعداد مسبق: off أو core أو rem أو deep
cronstringالإعداد المسبق الافتراضيتجاوز تعبير Cron للجدول الزمني
timezonestringالمنطقة الزمنية للمستخدمالمنطقة الزمنية لتقييم الجدول الزمني
limitnumberالإعداد المسبق الافتراضيالحد الأقصى للمرشحين للترقية في كل دورة
minScorenumberالإعداد المسبق الافتراضيالحد الأدنى للدرجة الموزونة للترقية
minRecallCountnumberالإعداد المسبق الافتراضيالحد الأدنى لعتبة عدد الاستدعاءات
minUniqueQueriesnumberالإعداد المسبق الافتراضيالحد الأدنى لعتبة عدد الاستعلامات المميزة

الإعدادات الافتراضية المسبقة

الوضعالوتيرةminScoreminRecallCountminUniqueQueries
offمعطل
coreيوميًا 3 صباحًا0.7532
remكل 6 ساعات0.8543
deepكل 12 ساعة0.8033

مثال

{
  plugins: {
    entries: {
      "memory-core": {
        config: {
          dreaming: {
            mode: "core",
            timezone: "America/New_York",
          },
        },
      },
    },
  },
}