Technical reference
ข้อมูลอ้างอิงการกำหนดค่า Memory
หน้านี้แสดงรายการปุ่มปรับแต่งการกำหนดค่าทั้งหมดสำหรับการค้นหาหน่วยความจำของ OpenClaw สำหรับภาพรวมเชิงแนวคิด โปรดดู:
วิธีการทำงานของหน่วยความจำ
แบ็กเอนด์ SQLite เริ่มต้น
ไซด์คาร์แบบเน้นภายในเครื่องก่อน
ไปป์ไลน์การค้นหาและการปรับแต่ง
ซับเอเจนต์หน่วยความจำสำหรับเซสชันแบบโต้ตอบ
การตั้งค่าการค้นหาหน่วยความจำทั้งหมดอยู่ใต้ agents.defaults.memorySearch ใน openclaw.json เว้นแต่จะระบุไว้เป็นอย่างอื่น
การเลือกผู้ให้บริการ
| คีย์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
provider |
string |
"openai" |
รหัสอะแดปเตอร์ embedding เช่น bedrock, deepinfra, gemini, github-copilot, local, mistral, ollama, openai, openai-compatible หรือ voyage; อาจเป็น models.providers.<id> ที่กำหนดค่าไว้ ซึ่ง api ชี้ไปยังอะแดปเตอร์ embedding หน่วยความจำหรือ API โมเดลที่เข้ากันได้กับ OpenAI |
model |
string |
ค่าเริ่มต้นของผู้ให้บริการ | ชื่อโมเดล embedding |
fallback |
string |
"none" |
รหัสอะแดปเตอร์ fallback เมื่อตัวหลักล้มเหลว |
enabled |
boolean |
true |
เปิดหรือปิดใช้งานการค้นหาหน่วยความจำ |
เมื่อไม่ได้ตั้งค่า provider OpenClaw จะใช้ embeddings ของ OpenAI ตั้งค่า provider
อย่างชัดเจนเพื่อใช้ Gemini, Voyage, Mistral, DeepInfra, Bedrock, GitHub Copilot,
Ollama, โมเดล GGUF ภายในเครื่อง หรือ endpoint /v1/embeddings ที่เข้ากันได้กับ OpenAI
การกำหนดค่าดั้งเดิมที่ยังระบุ provider: "auto" จะ resolve เป็น openai
เมื่อไม่ได้ตั้งค่า provider มี provider: "auto" ดั้งเดิมอยู่ หรือ
provider: "none" ตั้งใจเลือกโหมด FTS เท่านั้น การเรียกคืนหน่วยความจำยังสามารถ
ใช้การจัดอันดับ FTS แบบ lexical ได้เมื่อ embeddings ไม่พร้อมใช้งาน
ผู้ให้บริการที่ไม่ใช่ภายในเครื่องและระบุชัดเจนจะล้มเหลวแบบปิด หากคุณตั้ง memorySearch.provider เป็น
ผู้ให้บริการที่มีแบ็กเอนด์ระยะไกลแบบเจาะจง เช่น OpenAI, Gemini, Voyage, Mistral,
Bedrock, GitHub Copilot, DeepInfra, Ollama, LM Studio หรือผู้ให้บริการแบบกำหนดเอง
ที่เข้ากันได้กับ OpenAI และผู้ให้บริการนั้นไม่พร้อมใช้งานขณะรันไทม์ memory_search
จะคืนผลลัพธ์ว่าไม่พร้อมใช้งานแทนการใช้การเรียกคืนแบบ FTS เท่านั้นอย่างเงียบ ๆ แก้ไข
การกำหนดค่าผู้ให้บริการ/การยืนยันตัวตน เปลี่ยนไปใช้ผู้ให้บริการที่เข้าถึงได้ หรือตั้ง
provider: "none" หากคุณต้องการการเรียกคืนแบบ FTS เท่านั้นโดยตั้งใจ
รหัสผู้ให้บริการแบบกำหนดเอง
memorySearch.provider สามารถชี้ไปยังรายการ models.providers.<id> แบบกำหนดเองสำหรับอะแดปเตอร์ผู้ให้บริการเฉพาะหน่วยความจำ เช่น ollama หรือสำหรับ API โมเดลที่เข้ากันได้กับ OpenAI เช่น openai-responses / openai-completions OpenClaw จะ resolve เจ้าของ api ของผู้ให้บริการนั้นสำหรับอะแดปเตอร์ embedding พร้อมคงรหัสผู้ให้บริการแบบกำหนดเองไว้สำหรับ endpoint, auth และการจัดการคำนำหน้าโมเดล สิ่งนี้ทำให้การตั้งค่าแบบหลาย GPU หรือหลายโฮสต์สามารถอุทิศ embeddings หน่วยความจำให้กับ endpoint ภายในเครื่องเฉพาะได้:
{ models: { providers: { "ollama-5080": { api: "ollama", baseUrl: "http://gpu-box.local:11435", apiKey: "ollama-local", models: [{ id: "qwen3-embedding:0.6b" }], }, }, }, agents: { defaults: { memorySearch: { provider: "ollama-5080", model: "qwen3-embedding:0.6b", }, }, },}การ resolve คีย์ API
embeddings ระยะไกลต้องใช้คีย์ API Bedrock ใช้ลำดับข้อมูลรับรองเริ่มต้นของ AWS SDK แทน (บทบาทอินสแตนซ์, SSO, access keys)
| ผู้ให้บริการ | ตัวแปร Env | คีย์การกำหนดค่า |
|---|---|---|
| Bedrock | ลำดับข้อมูลรับรอง AWS | ไม่ต้องใช้คีย์ 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 |
โปรไฟล์ auth ผ่านการเข้าสู่ระบบด้วยอุปกรณ์ |
| Mistral | MISTRAL_API_KEY |
models.providers.mistral.apiKey |
| Ollama | OLLAMA_API_KEY (placeholder) |
-- |
| OpenAI | OPENAI_API_KEY |
models.providers.openai.apiKey |
| Voyage | VOYAGE_API_KEY |
models.providers.voyage.apiKey |
การกำหนดค่า endpoint ระยะไกล
ใช้ provider: "openai-compatible" สำหรับเซิร์ฟเวอร์ /v1/embeddings
ทั่วไปที่เข้ากันได้กับ OpenAI ซึ่งไม่ควรสืบทอดข้อมูลรับรองแชต OpenAI ส่วนกลาง
remote.baseUrlstringURL ฐาน 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
endpoint embedding ที่เข้ากันได้กับ OpenAI สามารถเลือกใช้ฟิลด์คำขอ input_type เฉพาะผู้ให้บริการได้ สิ่งนี้มีประโยชน์สำหรับโมเดล embedding แบบไม่สมมาตรที่ต้องใช้ป้ายกำกับต่างกันสำหรับ embeddings ของคำค้นหาและเอกสาร
| คีย์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
inputType |
string |
ไม่ได้ตั้งค่า | input_type ที่ใช้ร่วมกันสำหรับ embeddings ของคำค้นหาและเอกสาร |
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", }, }, },}การเปลี่ยนค่าเหล่านี้ส่งผลต่อ identity ของแคช embedding สำหรับการทำดัชนีแบบ batch ของผู้ให้บริการ และควรตามด้วยการทำ reindex หน่วยความจำเมื่อโมเดล upstream ปฏิบัติต่อป้ายกำกับต่างกัน
Bedrock
การกำหนดค่า embedding ของ Bedrock
Bedrock ใช้ลำดับข้อมูลรับรองเริ่มต้นของ AWS SDK — ไม่ต้องใช้คีย์ API หาก OpenClaw รันบน EC2 ที่มีบทบาทอินสแตนซ์ซึ่งเปิดใช้งาน Bedrock เพียงตั้งค่าผู้ให้บริการและโมเดล:
{ agents: { defaults: { memorySearch: { provider: "bedrock", model: "amazon.titan-embed-text-v2:0", }, }, },}| คีย์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
model |
string |
amazon.titan-embed-text-v2:0 |
รหัสโมเดล embedding ของ 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-1536 |
twelvelabs.marengo-embed-3-0-v1:0 |
TwelveLabs | 512 | -- |
twelvelabs.marengo-embed-2-7-v1:0 |
TwelveLabs | 1024 | -- |
ตัวแปรย่อยที่มีส่วนต่อท้ายด้าน throughput (เช่น amazon.titan-embed-text-v1:2:8k) จะสืบทอดการกำหนดค่าของโมเดลฐาน
การยืนยันตัวตน: การยืนยันตัวตนของ Bedrock ใช้ลำดับการค้นหาข้อมูลประจำตัวมาตรฐานของ AWS SDK:
- ตัวแปรสภาพแวดล้อม (
AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY) - แคชโทเค็น SSO
- ข้อมูลประจำตัวโทเค็น Web identity
- ไฟล์ข้อมูลประจำตัวและไฟล์กำหนดค่าที่ใช้ร่วมกัน
- ข้อมูลประจำตัวเมทาดาทา ECS หรือ EC2
Region จะถูกระบุจาก AWS_REGION, AWS_DEFAULT_REGION, baseUrl ของผู้ให้บริการ amazon-bedrock หรือใช้ค่าเริ่มต้นเป็น us-east-1
สิทธิ์ 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 |
ขนาดหน้าต่างบริบทสำหรับบริบท embedding ค่า 4096 ครอบคลุมชิ้นข้อมูลทั่วไป (128–512 โทเค็น) พร้อมจำกัด VRAM ที่ไม่ใช่น้ำหนักโมเดล ลดเป็น 1024–2048 บนโฮสต์ที่มีข้อจำกัด "auto" ใช้ค่าสูงสุดที่โมเดลถูกฝึกมา ซึ่งไม่แนะนำสำหรับโมเดล 8B+ (Qwen3-Embedding-8B: 40 960 โทเค็น → VRAM ~32 GB เทียบกับ ~8.8 GB ที่ 4096) |
ติดตั้งผู้ให้บริการ llama.cpp อย่างเป็นทางการก่อน: openclaw plugins install @openclaw/llama-cpp-provider
โมเดลเริ่มต้น: embeddinggemma-300m-qat-Q8_0.gguf (~0.6 GB, ดาวน์โหลดอัตโนมัติ) การ checkout ซอร์สยังต้องอนุมัติ native build: pnpm approve-builds จากนั้น pnpm rebuild node-llama-cpp
ใช้ CLI แบบสแตนด์อโลนเพื่อตรวจสอบพาธผู้ให้บริการเดียวกับที่ Gateway ใช้:
openclaw memory status --deep --agent mainopenclaw memory index --force --agent mainตั้งค่า provider: "local" อย่างชัดเจนสำหรับ embedding GGUF ภายในเครื่อง รองรับการอ้างอิงโมเดลแบบ hf: และ HTTP(S) สำหรับการกำหนดค่าภายในเครื่องแบบชัดเจน แต่สิ่งเหล่านี้จะไม่เปลี่ยนผู้ให้บริการเริ่มต้น
timeout ของ embedding แบบ inline
sync.embeddingBatchTimeoutSecondsnumberแทนที่ timeout สำหรับชุด embedding แบบ inline ระหว่างการทำดัชนีหน่วยความจำ
เมื่อไม่ได้ตั้งค่า จะใช้ค่าเริ่มต้นของผู้ให้บริการ: 600 วินาทีสำหรับผู้ให้บริการภายในเครื่อง/โฮสต์เอง เช่น local, ollama และ lmstudio และ 120 วินาทีสำหรับผู้ให้บริการแบบโฮสต์ เพิ่มค่านี้เมื่อชุด embedding ที่ใช้ CPU ภายในเครื่องทำงานปกติแต่ช้า
การกำหนดค่า hybrid search
ทั้งหมดอยู่ภายใต้ memorySearch.query.hybrid:
| คีย์ | ประเภท | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
enabled |
boolean |
true |
เปิดใช้ hybrid BM25 + vector search |
vectorWeight |
number |
0.7 |
น้ำหนักสำหรับคะแนน vector (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: { 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 การจัดการ symlink ขึ้นอยู่กับแบ็กเอนด์ที่ใช้งานอยู่: เอนจินในตัวจะละเว้น symlink ขณะที่ QMD จะทำตามพฤติกรรมของตัวสแกน QMD พื้นฐาน
สำหรับการค้นหาทรานสคริปต์ข้ามเอเจนต์ในขอบเขตเอเจนต์ ให้ใช้ agents.list[].memorySearch.qmd.extraCollections แทน memory.qmd.paths คอลเลกชันเพิ่มเติมเหล่านั้นใช้รูปแบบ { path, name, pattern? } เดียวกัน แต่จะถูกผสานเป็นรายเอเจนต์และสามารถคงชื่อที่แชร์ไว้อย่างชัดเจนเมื่อพาธชี้ออกนอกเวิร์กสเปซปัจจุบัน หากพาธที่ resolve แล้วเดียวกันปรากฏทั้งใน 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 |
10000000 |
ขนาดไฟล์สูงสุดสำหรับการทำดัชนี |
รูปแบบที่รองรับ: .jpg, .jpeg, .png, .webp, .gif, .heic, .heif (รูปภาพ); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (เสียง)
แคช Embedding
| คีย์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
cache.enabled |
boolean |
true |
แคช chunk embeddings ใน SQLite |
cache.maxEntries |
number |
50000 |
จำนวน embeddings ที่แคชสูงสุด |
ป้องกันการฝังข้อความเดิมซ้ำระหว่างการทำดัชนีใหม่หรือการอัปเดตทรานสคริปต์
การทำดัชนีแบบแบตช์
| คีย์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
remote.nonBatchConcurrency |
number |
4 |
การฝังแบบอินไลน์ขนาน |
remote.batch.enabled |
boolean |
false |
เปิดใช้ API การฝังแบบแบตช์ |
remote.batch.concurrency |
number |
2 |
งานแบตช์ขนาน |
remote.batch.wait |
boolean |
true |
รอให้แบตช์เสร็จสมบูรณ์ |
remote.batch.pollIntervalMs |
number |
-- | ช่วงเวลาการ poll |
remote.batch.timeoutMinutes |
number |
-- | หมดเวลาแบตช์ |
พร้อมใช้งานสำหรับ openai, gemini และ 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 |
เกณฑ์จำนวนข้อความสำหรับการทำดัชนีใหม่ |
การเร่งความเร็วเวกเตอร์ SQLite (sqlite-vec)
| คีย์ | ประเภท | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
store.vector.enabled |
boolean |
true |
ใช้ sqlite-vec สำหรับคิวรีเวกเตอร์ |
store.vector.extensionPath |
string |
ที่บันเดิลมา | แทนที่พาธ sqlite-vec |
เมื่อ sqlite-vec ไม่พร้อมใช้งาน OpenClaw จะย้อนกลับไปใช้ความคล้ายคลึงแบบโคไซน์ในโปรเซสโดยอัตโนมัติ
พื้นที่จัดเก็บดัชนี
ดัชนีหน่วยความจำในตัวจะอยู่ในฐานข้อมูล OpenClaw SQLite ของแต่ละเอเจนต์ที่
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; ตั้งค่าเป็นพาธแบบสัมบูรณ์เมื่อ service PATH ต่างจากเชลล์ของคุณ |
searchMode |
string |
search |
คำสั่งค้นหา: search, vsearch, query |
rerank |
boolean |
-- | ตั้งเป็น false พร้อม searchMode: "query" และ QMD 2.1+ เพื่อข้ามการจัดอันดับซ้ำของ QMD |
includeDefaultMemory |
boolean |
true |
ทำดัชนี MEMORY.md + memory/**/*.md โดยอัตโนมัติ |
paths[] |
array |
-- | พาธเพิ่มเติม: { name, path, pattern? } |
sessions.enabled |
boolean |
false |
ทำดัชนีทรานสคริปต์เซสชัน |
sessions.retentionDays |
number |
-- | ระยะเวลาเก็บทรานสคริปต์ |
sessions.exportDir |
string |
-- | ไดเรกทอรีส่งออก |
searchMode: "search" เป็นแบบ lexical/BM25 เท่านั้น OpenClaw จะไม่เรียกโพรบความพร้อมเวกเตอร์เชิงความหมายหรือการบำรุงรักษา embedding ของ QMD สำหรับโหมดนั้น รวมถึงระหว่าง memory status --deep; vsearch และ query ยังคงต้องใช้ความพร้อมเวกเตอร์และ embeddings ของ 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 รุ่นเก่าจะคงพาธความเข้ากันได้แบบต่อคอลเลกชัน แหล่งเดียวกันหมายถึงคอลเลกชันหน่วยความจำถาวรถูกจัดกลุ่มเข้าด้วยกัน ขณะที่คอลเลกชันทรานสคริปต์เซสชันยังคงเป็นอีกกลุ่มหนึ่งแยกต่างหาก เพื่อให้การกระจายแหล่งที่มายังคงมีอินพุตทั้งสองแบบ
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 |
-- | รอบเวลา embed แยกต่างหาก |
update.commandTimeoutMs |
number |
-- | หมดเวลาสำหรับคำสั่ง QMD |
update.updateTimeoutMs |
number |
-- | หมดเวลาสำหรับการดำเนินการอัปเดต QMD |
update.embedTimeoutMs |
number |
-- | หมดเวลาสำหรับการดำเนินการ embed ของ QMD |
Limits
| คีย์ | ประเภท | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
limits.maxResults |
number |
6 |
ผลลัพธ์การค้นหาสูงสุด |
limits.maxSnippetChars |
number |
-- | จำกัดความยาว snippet |
limits.maxInjectedChars |
number |
-- | จำกัดจำนวนอักขระที่ฉีดทั้งหมด |
limits.timeoutMs |
number |
4000 |
หมดเวลาการค้นหา |
Scope
ควบคุมว่าเซสชันใดรับผลลัพธ์การค้นหา QMD ได้ สคีมาเดียวกับ session.sendPolicy:
{ memory: { qmd: { scope: { default: "deny", rules: [{ action: "allow", match: { chatType: "direct" } }], }, }, },}ค่าเริ่มต้นที่จัดส่งมาอนุญาตเซสชันโดยตรงและเซสชันช่องทาง ขณะที่ยังคงปฏิเสธกลุ่ม
ค่าเริ่มต้นคือเฉพาะ DM match.keyPrefix จับคู่กับคีย์เซสชันที่ normalize แล้ว; match.rawKeyPrefix จับคู่กับคีย์ดิบรวมถึง agent:<id>:.
Citations
memory.citations ใช้กับแบ็กเอนด์ทั้งหมด:
| ค่า | พฤติกรรม |
|---|---|
auto (ค่าเริ่มต้น) |
รวมส่วนท้าย Source: <path#line> ใน snippets |
on |
รวมส่วนท้ายเสมอ |
off |
ละเว้นส่วนท้าย (ยังส่งพาธให้เอเจนต์ภายใน) |
เมื่อเปิดใช้งานการเริ่มต้น QMD ตอน gateway เริ่มทำงาน OpenClaw จะเริ่ม QMD เฉพาะสำหรับเอเจนต์ที่มีสิทธิ์ หาก update.onBoot เป็น true และไม่ได้กำหนดค่าการบำรุงรักษาแบบ interval/embed การเริ่มทำงานจะใช้ผู้จัดการแบบ one-shot สำหรับการรีเฟรชตอนบูตแล้วปิด หากกำหนดค่าช่วงเวลา update หรือ embed การเริ่มทำงานจะเปิดผู้จัดการ QMD อายุยาว เพื่อให้เป็นเจ้าของ watcher และตัวจับเวลา interval ได้; update.onBoot: false จะข้ามเฉพาะการรีเฟรชทันทีตอนบูตเท่านั้น
ตัวอย่าง 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 ทำงานเป็นการกวาดตามกำหนดการครั้งเดียว และใช้เฟสภายในแบบ light/deep/REM เป็นรายละเอียดการใช้งานภายใน
สำหรับพฤติกรรมเชิงแนวคิดและคำสั่ง slash โปรดดู Dreaming
การตั้งค่าผู้ใช้
| คีย์ | ประเภท | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
enabled |
boolean |
false |
เปิดหรือปิด Dreaming ทั้งหมด |
frequency |
string |
0 3 * * * |
รอบเวลา Cron แบบไม่บังคับสำหรับการกวาด Dreaming แบบเต็ม |
model |
string |
โมเดลเริ่มต้น | การแทนที่โมเดลซับเอเจนต์ Dream Diary แบบไม่บังคับ |
phases.deep.maxPromotedSnippetTokens |
number |
160 |
จำนวนโทเค็นโดยประมาณสูงสุดที่เก็บจาก snippet การเรียกคืนระยะสั้นแต่ละรายการที่เลื่อนขึ้นไปยัง 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", }, }, }, }, },}