Technical reference

مرجع پیکربندی حافظه

این صفحه تمام گزینه‌های پیکربندی جست‌وجوی حافظه در OpenClaw را فهرست می‌کند. برای مرور مفهومی، به این صفحات مراجعه کنید:

تمام تنظیمات جست‌وجوی حافظه، مگر آنکه خلافش ذکر شود، در agents.defaults.memorySearch در openclaw.json قرار دارند (یا می‌توان آن‌ها را برای هر عامل با agents.list[].memorySearch بازنویسی کرد).


انتخاب ارائه‌دهنده

کلید نوع پیش‌فرض توضیحات
enabled boolean true فعال یا غیرفعال‌کردن جست‌وجوی حافظه
provider string "openai" شناسهٔ تطبیق‌دهندهٔ تعبیه‌سازی مانند bedrock، deepinfra، gemini، github-copilot، local، mistral، ollama، openai، openai-compatible یا voyage؛ همچنین می‌تواند یک models.providers.<id> پیکربندی‌شده باشد که api آن به یک تطبیق‌دهندهٔ تعبیه‌سازی حافظه یا API مدل سازگار با OpenAI اشاره می‌کند
model string پیش‌فرض ارائه‌دهنده نام مدل تعبیه‌سازی
fallback string "none" شناسهٔ تطبیق‌دهندهٔ جایگزین هنگام شکست گزینهٔ اصلی

وقتی provider تنظیم نشده باشد، OpenClaw از تعبیه‌سازی‌های OpenAI استفاده می‌کند. برای استفاده از Bedrock، DeepInfra، Gemini، GitHub Copilot، Mistral، Ollama، Voyage، یک مدل محلی GGUF یا نقطهٔ پایانی سازگار با OpenAI در /v1/embeddings، مقدار provider را صریحاً تنظیم کنید. پیکربندی‌های قدیمی که همچنان شامل provider: "auto" هستند، به openai نگاشت می‌شوند.

وقتی provider تنظیم نشده باشد، مقدار قدیمی provider: "auto" وجود داشته باشد یا provider: "none" عمداً حالت فقط FTS را انتخاب کند، در صورت دردسترس‌نبودن تعبیه‌سازی‌ها، بازیابی حافظه همچنان می‌تواند از رتبه‌بندی واژگانی FTS استفاده کند.

ارائه‌دهندگان صریح و غیرمحلی در صورت خطا بسته می‌مانند. اگر memorySearch.provider را روی یک ارائه‌دهندهٔ مشخص مبتنی بر راه دور مانند Bedrock، DeepInfra، Gemini، GitHub Copilot، LM Studio، Mistral، Ollama، OpenAI، Voyage یا یک ارائه‌دهندهٔ سفارشی سازگار با OpenAI تنظیم کنید و آن ارائه‌دهنده هنگام اجرا در دسترس نباشد، memory_search به‌جای استفادهٔ بی‌سروصدا از بازیابی فقط FTS، نتیجهٔ عدم دسترسی را برمی‌گرداند. پیکربندی ارائه‌دهنده/احراز هویت را اصلاح کنید، به یک ارائه‌دهندهٔ در دسترس تغییر دهید، یا اگر عمداً بازیابی فقط FTS را می‌خواهید، provider: "none" را تنظیم کنید.

شناسه‌های سفارشی ارائه‌دهنده

memorySearch.provider می‌تواند برای تطبیق‌دهنده‌های ارائه‌دهندهٔ ویژهٔ حافظه مانند ollama یا APIهای مدل سازگار با OpenAI مانند openai-responses / openai-completions به یک ورودی سفارشی models.providers.<id> اشاره کند. OpenClaw مالک api آن ارائه‌دهنده را برای تطبیق‌دهندهٔ تعبیه‌سازی شناسایی می‌کند، درحالی‌که شناسهٔ سفارشی ارائه‌دهنده را برای مدیریت نقطهٔ پایانی، احراز هویت و پیشوند مدل حفظ می‌کند. به این ترتیب، راه‌اندازی‌های چند-GPU یا چندمیزبان می‌توانند تعبیه‌سازی‌های حافظه را به یک نقطهٔ پایانی محلی مشخص اختصاص دهند:

json5
{  models: {    providers: {      "ollama-5080": {        api: "ollama",        baseUrl: "http://gpu-box.local:11435",        apiKey: "ollama-local",        models: [{ id: "qwen3-embedding:0.6b", name: "Qwen3 Embedding 0.6B" }],      },    },  },  agents: {    defaults: {      memorySearch: {        provider: "ollama-5080",        model: "qwen3-embedding:0.6b",      },    },  },}

تفکیک کلید API

تعبیه‌سازی‌های راه دور به کلید API نیاز دارند. Bedrock در عوض از زنجیرهٔ پیش‌فرض اعتبارنامهٔ AWS SDK استفاده می‌کند (نقش‌های نمونه، SSO، کلیدهای دسترسی یا کلید API مربوط به Bedrock).

ارائه‌دهنده متغیر محیطی کلید پیکربندی
Bedrock زنجیرهٔ اعتبارنامهٔ AWS یا AWS_BEARER_TOKEN_BEDROCK به کلید API نیازی نیست
DeepInfra DEEPINFRA_API_KEY models.providers.deepinfra.apiKey
Gemini GEMINI_API_KEY models.providers.google.apiKey
GitHub Copilot COPILOT_GITHUB_TOKEN، GH_TOKEN، GITHUB_TOKEN نمایهٔ احراز هویت از طریق ورود دستگاه
Mistral MISTRAL_API_KEY models.providers.mistral.apiKey
Ollama OLLAMA_API_KEY (مقدار جای‌نگهدار) --
OpenAI OPENAI_API_KEY models.providers.openai.apiKey
Voyage VOYAGE_API_KEY models.providers.voyage.apiKey

پیکربندی نقطهٔ پایانی راه دور

برای یک سرور عمومی سازگار با OpenAI در /v1/embeddings که نباید اعتبارنامه‌های سراسری گفت‌وگوی OpenAI را به ارث ببرد، از provider: "openai-compatible" استفاده کنید.

remote.baseUrlstring

نشانی پایهٔ سفارشی API.

remote.apiKeystring

بازنویسی کلید API.

remote.headersobject

سرآیندهای اضافی HTTP (ادغام‌شده با پیش‌فرض‌های ارائه‌دهنده).

json5
{  agents: {    defaults: {      memorySearch: {        provider: "openai-compatible",        model: "text-embedding-3-small",        remote: {          baseUrl: "https://api.example.com/v1/",          apiKey: "YOUR_KEY",        },      },    },  },}

پیکربندی ویژهٔ ارائه‌دهنده

Gemini
کلید نوع پیش‌فرض توضیحات
model string gemini-embedding-001 از gemini-embedding-2-preview نیز پشتیبانی می‌کند
outputDimensionality number 3072 برای Embedding 2: مقدار 768، 1536 یا 3072
انواع ورودی سازگار با OpenAI

نقاط پایانی تعبیه‌سازی سازگار با OpenAI می‌توانند استفاده از فیلدهای درخواست input_type ویژهٔ ارائه‌دهنده را فعال کنند. این قابلیت برای مدل‌های تعبیه‌سازی نامتقارنی مفید است که برای تعبیه‌سازی پرس‌وجو و سند به برچسب‌های متفاوت نیاز دارند.

کلید نوع پیش‌فرض توضیحات
inputType string تنظیم‌نشده input_type مشترک برای تعبیه‌سازی پرس‌وجو و سند
queryInputType string تنظیم‌نشده input_type هنگام پرس‌وجو؛ inputType را بازنویسی می‌کند
documentInputType string تنظیم‌نشده input_type نمایه/سند؛ inputType را بازنویسی می‌کند
json5
{  agents: {    defaults: {      memorySearch: {        provider: "openai-compatible",        remote: {          baseUrl: "https://embeddings.example/v1",          apiKey: "${EMBEDDINGS_API_KEY}",        },        model: "asymmetric-embedder",        queryInputType: "query",        documentInputType: "passage",      },    },  },}

تغییر این مقادیر بر هویت حافظهٔ نهان تعبیه‌سازی برای نمایه‌سازی دسته‌ای ارائه‌دهنده اثر می‌گذارد و اگر مدل بالادستی با برچسب‌ها رفتار متفاوتی دارد، پس از آن باید حافظه را دوباره نمایه‌سازی کنید.

Bedrock

پیکربندی تعبیه‌سازی Bedrock

Bedrock از زنجیرهٔ پیش‌فرض اعتبارنامهٔ AWS SDK به‌همراه یک توکن حامل بررسی‌شده توسط OpenClaw استفاده می‌کند؛ بنابراین هیچ کلید API در پیکربندی ذخیره نمی‌شود. اگر OpenClaw روی EC2 با نقش نمونهٔ دارای دسترسی Bedrock اجرا می‌شود، کافی است ارائه‌دهنده و مدل را تنظیم کنید:

json5
{  agents: {    defaults: {      memorySearch: {        provider: "bedrock",        model: "amazon.titan-embed-text-v2:0",      },    },  },}
کلید نوع پیش‌فرض توضیحات
model string amazon.titan-embed-text-v2:0 هر شناسهٔ مدل تعبیه‌سازی Bedrock
outputDimensionality number پیش‌فرض مدل برای Titan V2: مقدار 256، 512 یا 1024

مدل‌های پشتیبانی‌شده (همراه با تشخیص خانواده و پیش‌فرض‌های ابعاد):

شناسه مدل ارائه‌دهنده ابعاد پیش‌فرض ابعاد قابل پیکربندی
amazon.titan-embed-text-v2:0 Amazon 1024 256, 512, 1024
amazon.titan-embed-text-v1 Amazon 1536 --
amazon.titan-embed-g1-text-02 Amazon 1536 --
amazon.titan-embed-image-v1 Amazon 1024 --
amazon.nova-2-multimodal-embeddings-v1:0 Amazon 1024 256, 384, 1024, 3072
cohere.embed-english-v3 Cohere 1024 --
cohere.embed-multilingual-v3 Cohere 1024 --
cohere.embed-v4:0 Cohere 1536 256, 384, 512, 768, 1024, 1536
twelvelabs.marengo-embed-3-0-v1:0 TwelveLabs 512 --
twelvelabs.marengo-embed-2-7-v1:0 TwelveLabs 1024 --

گونه‌های دارای پسوند توان عملیاتی (برای مثال، 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 به این موارد نیاز دارد:

json
{  "Effect": "Allow",  "Action": "bedrock:InvokeModel",  "Resource": "*"}

برای رعایت اصل حداقل دسترسی، دامنه InvokeModel را به مدل مشخص محدود کنید:

text
arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0
محلی (GGUF + llama.cpp)
کلید نوع پیش‌فرض توضیحات
local.modelPath string بارگیری خودکار مسیر فایل مدل GGUF
local.modelCacheDir string پیش‌فرض node-llama-cpp پوشه نهانگاه مدل‌های بارگیری‌شده
local.contextSize number | "auto" 4096 اندازه پنجره زمینه برای زمینه تعبیه‌سازی. مقدار 4096 قطعه‌های معمول (۱۲۸ تا ۵۱۲ توکن) را پوشش می‌دهد و در عین حال VRAM غیرمرتبط با وزن‌ها را محدود می‌کند. در میزبان‌های دارای منابع محدود، آن را به ۱۰۲۴ تا ۲۰۴۸ کاهش دهید. "auto" از حداکثر آموزش‌دیده مدل استفاده می‌کند؛ برای مدل‌های 8B و بزرگ‌تر توصیه نمی‌شود (Qwen3-Embedding-8B: تا ۴۰٬۹۶۰ توکن می‌تواند مصرف VRAM را به حدود ۳۲ گیگابایت برساند).

ابتدا ارائه‌دهنده رسمی llama.cpp را نصب کنید: openclaw plugins install @openclaw/llama-cpp-provider. مدل پیش‌فرض: embeddinggemma-300m-qat-Q8_0.gguf (حدود ۰٫۶ گیگابایت، با بارگیری خودکار). نسخه‌های دریافت‌شده از کد منبع همچنان به تأیید ساخت بومی نیاز دارند: ابتدا pnpm approve-builds و سپس pnpm rebuild node-llama-cpp.

برای تأیید همان مسیر ارائه‌دهنده‌ای که Gateway استفاده می‌کند، از CLI مستقل استفاده کنید:

bash
openclaw memory status --deep --agent mainopenclaw memory index --force --agent main

مقادیر عددی local.contextSize همچنین جانمایی خودکار لایه‌های GPU در node-llama-cpp را هدایت می‌کنند تا وزن‌های مدل و زمینه تعبیه‌سازی درخواستی با هم در حافظه جای گیرند. پس از بارگیری زمان اجرا، دستور openclaw memory status --deep آخرین اطلاعات شناخته‌شده و دارای مهر زمانی درباره بک‌اند llama.cpp، دستگاه، برون‌سپاری، زمینه درخواستی و حافظه را گزارش می‌کند؛ بررسی غیرفعال وضعیت، مدلی را بارگیری نمی‌کند.

برای تعبیه‌سازی‌های محلی GGUF، مقدار provider: "local" را صریحاً تنظیم کنید. ارجاع‌های مدل hf: و HTTP(S) برای پیکربندی‌های محلی صریح پشتیبانی می‌شوند (از طریق سازوکار حل مدل node-llama-cpp)، اما ارائه‌دهنده پیش‌فرض را تغییر نمی‌دهند.

مهلت زمانی تعبیه‌سازی درون‌خطی

sync.embeddingBatchTimeoutSecondsnumber

مهلت زمانی دسته‌های تعبیه‌سازی درون‌خطی هنگام نمایه‌سازی حافظه را بازنویسی کنید.

در صورت تنظیم‌نشدن، مقدار پیش‌فرض ارائه‌دهنده استفاده می‌شود: ۶۰۰ ثانیه برای ارائه‌دهندگان محلی یا خودمیزبان مانند local، ollama و lmstudio و ۱۲۰ ثانیه برای ارائه‌دهندگان میزبانی‌شده. اگر دسته‌های تعبیه‌سازی محلی وابسته به CPU سالم اما کند هستند، این مقدار را افزایش دهید.


رفتار نمایه‌سازی

همه موارد زیر، مگر آنکه خلافش ذکر شده باشد، زیرمجموعه memorySearch.sync هستند:

کلید نوع پیش‌فرض توضیحات
onSessionStart boolean true همگام‌سازی نمایه حافظه هنگام آغاز نشست
onSearch boolean true همگام‌سازی تنبل هنگام جست‌وجو، پس از تشخیص تغییرات محتوا
watch boolean true پایش فایل‌های حافظه (chokidar) و زمان‌بندی نمایه‌سازی مجدد هنگام تغییرات
watchDebounceMs number 1500 پنجره تأخیر برای ادغام رویدادهای سریع پایش فایل
intervalMinutes number 0 فاصله زمانی نمایه‌سازی مجدد دوره‌ای برحسب دقیقه (0 آن را غیرفعال می‌کند)
sessions.postCompactionForce boolean true اجبار به نمایه‌سازی مجدد نشست پس از به‌روزرسانی‌های رونوشت که با Compaction فعال شده‌اند
chunking.tokensnumber

اندازهٔ قطعه برحسب توکن که هنگام تقسیم منابع حافظه پیش از تعبیه‌سازی استفاده می‌شود (پیش‌فرض: 400).

chunking.overlapnumber

هم‌پوشانی توکن‌ها میان قطعه‌های مجاور برای حفظ زمینه در نزدیکی مرزهای تقسیم (پیش‌فرض: 80).


پیکربندی جست‌وجوی ترکیبی

همه در memorySearch.query:

کلید نوع پیش‌فرض توضیحات
maxResults number 6 حداکثر نتایج حافظه که پیش از تزریق بازگردانده می‌شوند
minScore number 0.35 حداقل امتیاز مرتبط‌بودن برای گنجاندن یک نتیجه

و در memorySearch.query.hybrid:

کلید نوع پیش‌فرض توضیحات
enabled boolean true فعال‌سازی جست‌وجوی ترکیبی BM25 و برداری
vectorWeight number 0.7 وزن امتیازهای برداری (0 تا 1)
textWeight number 0.3 وزن امتیازهای BM25 (0 تا 1)
candidateMultiplier number 4 ضریب اندازهٔ مجموعهٔ نامزدها

MMR (تنوع)

کلید نوع پیش‌فرض توضیحات
mmr.enabled boolean false فعال‌سازی رتبه‌بندی مجدد MMR
mmr.lambda number 0.7 0 = بیشترین تنوع، 1 = بیشترین ارتباط

افت زمانی (تازگی)

کلید نوع پیش‌فرض توضیحات
temporalDecay.enabled boolean false فعال‌سازی تقویت نتایج تازه‌تر
temporalDecay.halfLifeDays number 30 امتیاز در هر N روز به نصف می‌رسد

فایل‌های همیشه‌سبز (MEMORY.md و فایل‌های بدون تاریخ در memory/) هرگز دچار افت نمی‌شوند.

مثال کامل

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

مسیرهای حافظهٔ اضافی

کلید نوع توضیحات
extraPaths string[] پوشه‌ها یا فایل‌های اضافی برای نمایه‌سازی
json5
{  agents: {    defaults: {      memorySearch: {        extraPaths: ["../team-docs", "/srv/shared-notes"],      },    },  },}

مسیرها می‌توانند مطلق یا نسبت به فضای کاری باشند. پوشه‌ها به‌صورت بازگشتی برای یافتن فایل‌های .md پویش می‌شوند. نحوهٔ مدیریت پیوندهای نمادین به پشتیبان فعال بستگی دارد: موتور داخلی از پیوندهای نمادین صرف‌نظر می‌کند، درحالی‌که QMD از رفتار پویشگر زیربنایی QMD پیروی می‌کند.

برای جست‌وجوی رونوشت میان عامل‌ها در محدودهٔ یک عامل، به‌جای memory.qmd.paths از agents.list[].memorySearch.qmd.extraCollections استفاده کنید. این مجموعه‌های اضافی از همان ساختار { path, name, pattern? } پیروی می‌کنند، اما برای هر عامل جداگانه ادغام می‌شوند و وقتی مسیر به خارج از فضای کاری فعلی اشاره می‌کند، می‌توانند نام‌های مشترک صریح را حفظ کنند. اگر مسیر یکسانی پس از تفکیک هم در memory.qmd.paths و هم در memorySearch.qmd.extraCollections وجود داشته باشد، QMD نخستین ورودی را نگه می‌دارد و از مورد تکراری صرف‌نظر می‌کند.


حافظهٔ چندوجهی (Gemini)

تصاویر و فایل‌های صوتی را در کنار Markdown با استفاده از Gemini Embedding 2 نمایه‌سازی کنید:

کلید نوع پیش‌فرض توضیحات
multimodal.enabled boolean false فعال‌سازی نمایه‌سازی چندوجهی
multimodal.modalities string[] -- ["image"]، ["audio"] یا ["all"]
multimodal.maxFileBytes number 10485760 حداکثر اندازهٔ فایل برای نمایه‌سازی (10 MiB)

قالب‌های پشتیبانی‌شده: .jpg، .jpeg، .png، .webp، .gif، .heic، .heif (تصاویر)؛ .mp3، .wav، .ogg، .opus، .m4a، .aac، .flac (صدا).


حافظهٔ نهان تعبیه‌سازی

کلید نوع پیش‌فرض توضیحات
cache.enabled boolean true تعبیه‌سازی‌های قطعه‌ها را در SQLite ذخیره می‌کند
cache.maxEntries number تنظیم‌نشده حد بالای تقریبی برای تعبیه‌سازی‌های ذخیره‌شده

از تعبیه‌سازی مجدد متن بدون تغییر هنگام نمایه‌سازی مجدد یا به‌روزرسانی رونوشت جلوگیری می‌کند. برای حافظهٔ نهان بدون محدودیت، maxEntries را تنظیم‌نشده باقی بگذارید؛ زمانی آن را تنظیم کنید که رشد فضای دیسک از حداکثر سرعت نمایه‌سازی مجدد مهم‌تر است. در صورت تنظیم، وقتی حافظهٔ نهان از حد تعیین‌شده فراتر رود، ابتدا قدیمی‌ترین ورودی‌ها (بر اساس زمان آخرین به‌روزرسانی) حذف می‌شوند.


نمایه‌سازی دسته‌ای

کلید نوع پیش‌فرض توضیحات
remote.nonBatchConcurrency number 4 تعبیه‌سازی‌های درون‌خطی موازی
remote.batch.enabled boolean false فعال‌سازی API تعبیه‌سازی دسته‌ای
remote.batch.concurrency number 2 کارهای دسته‌ای موازی
remote.batch.wait boolean true انتظار برای تکمیل دسته
remote.batch.pollIntervalMs number 2000 فاصلهٔ نظرسنجی
remote.batch.timeoutMinutes number 60 مهلت زمانی دسته

برای gemini، openai و voyage در دسترس است. پردازش دسته‌ای OpenAI معمولاً برای تکمیل داده‌های گذشته در مقیاس بزرگ سریع‌تر و ارزان‌تر است.

remote.nonBatchConcurrency فراخوانی‌های تعبیه‌سازی درون‌خطی را کنترل می‌کند که ارائه‌دهندگان محلی/خودمیزبان و ارائه‌دهندگان میزبانی‌شده هنگام غیرفعال بودن APIهای دسته‌ای ارائه‌دهنده استفاده می‌کنند. مقدار پیش‌فرض Ollama برای نمایه‌سازی غیردسته‌ای 1 است تا میزبان‌های محلی کوچک‌تر بیش‌ازحد تحت فشار قرار نگیرند؛ در دستگاه‌های بزرگ‌تر مقدار بیشتری تنظیم کنید.

این گزینه از sync.embeddingBatchTimeoutSeconds جدا است که مهلت زمانی فراخوانی‌های تعبیه‌سازی درون‌خطی را کنترل می‌کند.


جست‌وجوی حافظهٔ نشست (آزمایشی)

رونوشت‌های نشست را نمایه‌سازی کنید و از طریق memory_search در دسترس قرار دهید:

کلید نوع پیش‌فرض توضیحات
experimental.sessionMemory boolean false فعال‌سازی نمایه‌سازی نشست
sources string[] ["memory"] برای گنجاندن رونوشت‌ها، "sessions" را بیفزایید
sync.sessions.deltaBytes number 100000 آستانهٔ بایتی برای نمایه‌سازی مجدد
sync.sessions.deltaMessages number 50 آستانهٔ تعداد پیام برای نمایه‌سازی مجدد

نتایج رونوشت نشست نیز از tools.sessions.visibility پیروی می‌کنند. سطح مشاهده‌پذیری پیش‌فرض tree تنها نشست جاری و نشست‌هایی را که ایجاد کرده است در دسترس قرار می‌دهد. برای بازیابی یک نشست نامرتبطِ متعلق به همان عامل که Gateway آن را از نشستی دیگر ارسال کرده است، مانند یک پیام مستقیم، سطح مشاهده‌پذیری را آگاهانه به agent گسترش دهید (یا فقط زمانی از all استفاده کنید که بازیابی بین عامل‌ها نیز لازم باشد و خط‌مشی ارتباط عامل‌به‌عامل آن را مجاز بداند).

نمونه‌های زیر این تنظیمات را در agents.defaults قرار می‌دهند. همچنین اگر فقط یک عامل باید رونوشت‌های نشست را نمایه‌سازی و جست‌وجو کند، می‌توانید تنظیمات معادل memorySearch را در بازنویسی مختص همان عامل اعمال کنید.

برای بازیابی از Gateway به پیام مستقیم در همان عامل:

بک‌اند داخلی

json5
{  agents: {    defaults: {      memorySearch: {        experimental: { sessionMemory: true },        sources: ["memory", "sessions"],      },    },  },  tools: {    sessions: { visibility: "agent" },  },}

بک‌اند QMD

json5
{  agents: {    defaults: {      memorySearch: {        experimental: { sessionMemory: true },        sources: ["memory", "sessions"],      },    },  },  memory: {    backend: "qmd",    qmd: {      sessions: { enabled: true },    },  },  tools: {    sessions: { visibility: "agent" },  },}

هنگام استفاده از QMD، agents.defaults.memorySearch.experimental.sessionMemory و sources: ["sessions"] به‌تنهایی رونوشت‌ها را به QMD صادر نمی‌کنند. افزون بر آن، memory.qmd.sessions.enabled: true را نیز تنظیم کنید.


شتاب‌دهی برداری SQLite (sqlite-vec)

کلید نوع پیش‌فرض توضیحات
store.vector.enabled boolean true استفاده از sqlite-vec برای پرس‌وجوهای برداری
store.vector.extensionPath string همراه بسته بازنویسی مسیر sqlite-vec

وقتی sqlite-vec در دسترس نباشد، OpenClaw به‌طور خودکار به شباهت کسینوسی درون‌پردازشی بازمی‌گردد.


ذخیره‌سازی نمایه

نمایه‌های حافظهٔ داخلی در پایگاه دادهٔ SQLite مربوط به OpenClaw هر عامل، در مسیر agents/<agentId>/agent/openclaw-agent.sqlite قرار دارند.

کلید نوع پیش‌فرض توضیحات
store.fts.tokenizer string unicode61 توکن‌ساز FTS5 (unicode61 یا trigram)

پیکربندی بک‌اند QMD

برای فعال‌سازی، memory.backend = "qmd" را تنظیم کنید. همهٔ تنظیمات QMD زیر memory.qmd قرار دارند:

کلید نوع پیش‌فرض توضیحات
command string qmd مسیر فایل اجرایی QMD؛ وقتی PATH سرویس با پوستهٔ شما متفاوت است، یک مسیر مطلق تنظیم کنید
searchMode string search فرمان جست‌وجو: search، vsearch، query
rerank boolean -- با searchMode: "query" و QMD 2.1 یا جدیدتر، برای رد کردن رتبه‌بندی مجدد QMD روی false تنظیم کنید
includeDefaultMemory boolean true نمایه‌سازی خودکار MEMORY.md و memory/**/*.md
paths[] array -- مسیرهای اضافی: { name, path, pattern? }
sessions.enabled boolean false صادر کردن رونوشت نشست‌ها به QMD
sessions.retentionDays number -- مدت نگهداری رونوشت‌ها
sessions.exportDir string -- پوشهٔ خروجی

searchMode: "search" فقط واژگانی/BM25 است. OpenClaw در این حالت، از جمله هنگام اجرای memory status --deep، بررسی‌های آمادگی بردار معنایی یا نگهداری تعبیه‌های QMD را اجرا نمی‌کند؛ vsearch و query همچنان به آمادگی برداری و تعبیه‌های QMD نیاز دارند.

rerank: false فقط حالت query در QMD را تغییر می‌دهد و به QMD 2.1 یا جدیدتر نیاز دارد. در حالت مستقیم CLI، ‏OpenClaw گزینهٔ --no-rerank را ارسال می‌کند؛ در حالت MCP مبتنی بر mcporter، مقدار rerank: false را به ابزار یکپارچهٔ پرس‌وجوی QMD می‌فرستد. برای استفاده از رفتار پیش‌فرض QMD در رتبه‌بندی مجدد پرس‌وجو، آن را تنظیم‌نشده باقی بگذارید.

OpenClaw قالب‌های فعلی مجموعه و پرس‌وجوی MCP در QMD را ترجیح می‌دهد، اما با آزمودن پرچم‌های سازگار الگوی مجموعه و نام‌های قدیمی‌تر ابزارهای MCP در صورت نیاز، نسخه‌های قدیمی‌تر QMD را نیز فعال نگه می‌دارد. وقتی QMD پشتیبانی از چند فیلتر مجموعه را اعلام کند، مجموعه‌های دارای منبع یکسان با یک فرایند QMD جست‌وجو می‌شوند؛ ساخت‌های قدیمی‌تر QMD مسیر سازگاری جداگانه برای هر مجموعه را حفظ می‌کنند. منبع یکسان یعنی مجموعه‌های حافظهٔ پایدار (فایل‌های حافظهٔ پیش‌فرض به‌همراه مسیرهای سفارشی) با هم گروه‌بندی می‌شوند، درحالی‌که مجموعه‌های رونوشت نشست‌ها گروهی جداگانه باقی می‌مانند تا تنوع‌بخشی منابع همچنان هر دو ورودی را در اختیار داشته باشد.

یکپارچه‌سازی mcporter

همهٔ تنظیمات زیر memory.qmd.mcporter قرار دارند. جست‌وجوهای QMD را به‌جای اجرای یک qmd برای هر پرس‌وجو، از طریق یک دیمن MCP با عمر طولانی به نام mcporter هدایت می‌کند و سربار شروع سرد را برای مدل‌های بزرگ‌تر کاهش می‌دهد.

کلید نوع پیش‌فرض توضیحات
enabled boolean false هدایت فراخوانی‌های QMD از طریق mcporter به‌جای اجرای qmd برای هر درخواست
serverName string qmd نام سرور mcporter که qmd mcp را با lifecycle: keep-alive اجرا می‌کند
startDaemon boolean true وقتی enabled برابر true است، دیمن mcporter را به‌طور خودکار راه‌اندازی می‌کند

به نصب بودن mcporter و قرار داشتن آن در PATH، همچنین یک سرور پیکربندی‌شدهٔ mcporter که qmd mcp را اجرا کند نیاز دارد. برای راه‌اندازی‌های محلی ساده‌تر که هزینهٔ ایجاد فرایند برای هر پرس‌وجو قابل‌قبول است، آن را غیرفعال نگه دارید.

Update schedule
کلید نوع پیش‌فرض توضیحات
update.interval string 5m بازهٔ تازه‌سازی
update.debounceMs number 15000 حذف نوسان تغییرات فایل
update.onBoot boolean true تازه‌سازی هنگام باز شدن مدیر QMD با عمر طولانی؛ برای رد کردن به‌روزرسانی فوری هنگام راه‌اندازی، روی false تنظیم کنید
update.startup string off مقداردهی اولیهٔ اختیاری QMD هنگام شروع Gateway: ‏off، idle یا immediate
update.startupDelayMs number 120000 تأخیر پیش از اجرای تازه‌سازی startup: "idle"
update.waitForBootSync boolean false مسدود کردن باز شدن مدیر تا تکمیل تازه‌سازی اولیهٔ آن
update.embedInterval string 60m تناوب جداگانهٔ تعبیه
update.commandTimeoutMs number 30000 مهلت زمانی فرمان‌های نگهداری QMD (فهرست/افزودن مجموعه)
update.updateTimeoutMs number 120000 مهلت زمانی هر چرخهٔ qmd update
update.embedTimeoutMs number 120000 مهلت زمانی هر چرخهٔ qmd embed
Limits
کلید نوع پیش‌فرض توضیحات
limits.maxResults number 4 حداکثر نتایج جست‌وجو
limits.maxSnippetChars number 450 محدود کردن طول قطعهٔ متنی
limits.maxInjectedChars number 2200 محدود کردن مجموع نویسه‌های تزریق‌شده
limits.timeoutMs number 4000 مهلت زمانی جست‌وجو
Scope

تعیین می‌کند کدام نشست‌ها می‌توانند نتایج جست‌وجوی QMD را دریافت کنند. طرح‌واره همان session.sendPolicy است:

json5
{  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 هنگام راه‌اندازی Gateway فعال باشد، OpenClaw فقط برای عامل‌های واجد شرایط QMD را راه‌اندازی می‌کند. اگر update.onBoot برابر با true باشد و هیچ نگه‌داری دوره‌ای برای به‌روزرسانی/تعبیه پیکربندی نشده باشد، هنگام راه‌اندازی از یک مدیر یک‌باره برای تازه‌سازی زمان بوت استفاده می‌شود و سپس آن مدیر بسته می‌شود. اگر بازه‌ای برای به‌روزرسانی یا تعبیه پیکربندی شده باشد، هنگام راه‌اندازی مدیر بلندمدت QMD باز می‌شود تا مالک ناظر و زمان‌سنج‌های دوره‌ای باشد؛ update.onBoot: false فقط تازه‌سازی فوری هنگام بوت را نادیده می‌گیرد.

نمونهٔ کامل QMD

json5
{  memory: {    backend: "qmd",    citations: "auto",    qmd: {      includeDefaultMemory: true,      update: { interval: "5m", debounceMs: 15000 },      limits: { maxResults: 4, 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 به‌صورت یک پیمایش زمان‌بندی‌شده اجرا می‌شود و از مرحله‌های داخلی سبک/عمیق/REM به‌عنوان جزئیات پیاده‌سازی استفاده می‌کند.

برای رفتار مفهومی و فرمان‌های اسلش، به Dreaming مراجعه کنید.

تنظیمات کاربر

کلید نوع پیش‌فرض توضیحات
enabled boolean false Dreaming را به‌طور کامل فعال یا غیرفعال می‌کند
frequency string 0 3 * * * آهنگ اختیاری Cron برای پیمایش کامل Dreaming
model string مدل پیش‌فرض بازنویسی اختیاری مدل زیرعامل Dream Diary
phases.deep.maxPromotedSnippetTokens number 160 حداکثر توکن‌های تخمینی نگه‌داری‌شده از هر قطعهٔ یادآوری کوتاه‌مدت که به MEMORY.md ارتقا یافته است؛ فرادادهٔ منشأ قابل مشاهده باقی می‌ماند

نمونه

json5
{  plugins: {    entries: {      "memory-core": {        subagent: {          allowModelOverride: true,          allowedModels: ["anthropic/claude-sonnet-4-6"],        },        config: {          dreaming: {            enabled: true,            frequency: "0 3 * * *",            model: "anthropic/claude-sonnet-4-6",          },        },      },    },  },}

مرتبط

Was this useful?
On this page

On this page