Technical reference
مرجع پیکربندی حافظه
این صفحه تمام گزینههای پیکربندی جستوجوی حافظه در OpenClaw را فهرست میکند. برای مرور مفهومی، به این صفحات مراجعه کنید:
نحوهٔ کار حافظه.
پشتیبان پیشفرض SQLite.
پردازش جانبی با اولویت اجرای محلی.
خط لولهٔ جستوجو و تنظیم آن.
زیرعامل حافظه برای نشستهای تعاملی.
تمام تنظیمات جستوجوی حافظه، مگر آنکه خلافش ذکر شود، در 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 یا چندمیزبان میتوانند تعبیهسازیهای حافظه را به یک نقطهٔ پایانی محلی مشخص اختصاص دهند:
{ 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 (ادغامشده با پیشفرضهای ارائهدهنده).
{ 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 را بازنویسی میکند |
{ 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 اجرا میشود، کافی است ارائهدهنده و مدل را تنظیم کنید:
{ 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 رجوع میکند:
- متغیرهای محیطی (
AWS_ACCESS_KEY_IDبههمراهAWS_SECRET_ACCESS_KEY)، مگر اینکهAWS_PROFILEنیز تنظیم شده باشد - SSO (فقط هنگامی که فیلدهای SSO پیکربندی شده باشند)
- فایلهای مشترک اعتبارنامه و پیکربندی (
fromIni، شاملAWS_PROFILE) - فرایند اعتبارنامه (
credential_processدر فایل پیکربندی AWS) - اعتبارنامههای توکن هویت وب
- اعتبارنامههای فراداده نمونه ECS یا EC2
مجوزهای IAM: نقش یا کاربر IAM به این موارد نیاز دارد:
{ "Effect": "Allow", "Action": "bedrock:InvokeModel", "Resource": "*"}برای رعایت اصل حداقل دسترسی، دامنه InvokeModel را به مدل مشخص محدود کنید:
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 مستقل استفاده کنید:
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/) هرگز دچار افت نمیشوند.
مثال کامل
{ 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[] |
پوشهها یا فایلهای اضافی برای نمایهسازی |
{ 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 به پیام مستقیم در همان عامل:
بکاند داخلی
{ agents: { defaults: { memorySearch: { experimental: { sessionMemory: true }, sources: ["memory", "sessions"], }, }, }, tools: { sessions: { visibility: "agent" }, },}بکاند QMD
{ 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 است:
{ 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
{ 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 ارتقا یافته است؛ فرادادهٔ منشأ قابل مشاهده باقی میماند |
نمونه
{ 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", }, }, }, }, },}