Sessions and memory
เอนจินหน่วยความจำในตัว
เอนจินในตัวเป็นแบ็กเอนด์หน่วยความจำค่าเริ่มต้น โดยจะจัดเก็บดัชนีหน่วยความจำของคุณใน ฐานข้อมูล SQLite แบบต่อเอเจนต์ และไม่ต้องใช้ dependency เพิ่มเติมเพื่อเริ่มต้นใช้งาน
สิ่งที่มีให้
- การค้นหาด้วยคีย์เวิร์ด ผ่านการทำดัชนีข้อความแบบเต็มด้วย FTS5 (การให้คะแนน BM25)
- การค้นหาแบบเวกเตอร์ ผ่าน embeddings จากผู้ให้บริการใดก็ได้ที่รองรับ
- การค้นหาแบบไฮบริด ที่ผสานทั้งสองแบบเข้าด้วยกันเพื่อผลลัพธ์ที่ดีที่สุด
- การรองรับ CJK ผ่านการตัดคำแบบ trigram สำหรับภาษาจีน ญี่ปุ่น และเกาหลี
- การเร่งความเร็วด้วย sqlite-vec สำหรับคิวรีเวกเตอร์ในฐานข้อมูล (ไม่บังคับ)
เริ่มต้นใช้งาน
โดยค่าเริ่มต้น เอนจินในตัวจะใช้ embeddings ของ OpenAI หากคุณกำหนดค่า
OPENAI_API_KEY หรือ models.providers.openai.apiKey ไว้แล้ว การค้นหาแบบเวกเตอร์
จะทำงานได้โดยไม่ต้องตั้งค่าหน่วยความจำเพิ่มเติม
หากต้องการกำหนดผู้ให้บริการอย่างชัดเจน:
{ agents: { defaults: { memorySearch: { provider: "openai", }, }, },}หากไม่มีผู้ให้บริการ embedding จะมีเฉพาะการค้นหาด้วยคีย์เวิร์ดเท่านั้น
หากต้องการบังคับใช้ embeddings แบบ GGUF ภายในเครื่อง ให้ติดตั้ง plugin ผู้ให้บริการ llama.cpp อย่างเป็นทางการ
จากนั้นชี้ local.modelPath ไปยังไฟล์ GGUF:
openclaw plugins install @openclaw/llama-cpp-provider{ agents: { defaults: { memorySearch: { provider: "local", fallback: "none", local: { modelPath: "~/.node-llama-cpp/models/embeddinggemma-300m-qat-Q8_0.gguf", }, }, }, },}ผู้ให้บริการ embedding ที่รองรับ
| ผู้ให้บริการ | ID | หมายเหตุ |
|---|---|---|
| Bedrock | bedrock |
ใช้เชนข้อมูลรับรองของ AWS |
| DeepInfra | deepinfra |
ค่าเริ่มต้น: BAAI/bge-m3 |
| Gemini | gemini |
รองรับมัลติโหมด (รูปภาพ + เสียง) |
| GitHub Copilot | github-copilot |
ใช้การสมัครใช้งาน Copilot |
| ภายในเครื่อง | local |
@openclaw/llama-cpp-provider |
| Mistral | mistral |
|
| Ollama | ollama |
ภายในเครื่อง/โฮสต์เอง |
| OpenAI | openai |
ค่าเริ่มต้น: text-embedding-3-small |
| เข้ากันได้กับ OpenAI | openai-compatible |
ปลายทาง /v1/embeddings ทั่วไป |
| Voyage | voyage |
ตั้งค่า memorySearch.provider เพื่อเปลี่ยนจาก OpenAI ไปใช้ตัวเลือกอื่น
การทำดัชนีทำงานอย่างไร
OpenClaw ทำดัชนี MEMORY.md และ memory/*.md เป็นชิ้นส่วน (~400 โทเค็น พร้อม
ส่วนทับซ้อน 80 โทเค็น) และจัดเก็บไว้ในฐานข้อมูล SQLite แบบต่อเอเจนต์
- ตำแหน่งดัชนี: ฐานข้อมูลของเอเจนต์เจ้าของที่
~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite - การบำรุงรักษาพื้นที่จัดเก็บ: ไฟล์ข้างเคียง SQLite WAL ถูกจำกัดขนาดด้วย checkpoint เป็นระยะและ เมื่อปิดระบบ
- การเฝ้าดูไฟล์: การเปลี่ยนแปลงไฟล์หน่วยความจำจะเรียกการทำดัชนีใหม่แบบหน่วงเวลา (1.5 วินาที)
- การทำดัชนีใหม่อัตโนมัติ: เมื่อผู้ให้บริการ embedding, โมเดล หรือการกำหนดค่า chunking เปลี่ยนแปลง ดัชนีทั้งหมดจะถูกสร้างใหม่โดยอัตโนมัติ
- ทำดัชนีใหม่ตามต้องการ:
openclaw memory index --force
ควรใช้เมื่อใด
เอนจินในตัวเป็นตัวเลือกที่เหมาะสมสำหรับผู้ใช้ส่วนใหญ่:
- ใช้งานได้ทันทีโดยไม่ต้องมี dependency เพิ่มเติม
- จัดการการค้นหาด้วยคีย์เวิร์ดและแบบเวกเตอร์ได้ดี
- รองรับผู้ให้บริการ embedding ทั้งหมด
- การค้นหาแบบไฮบริดผสานจุดเด่นของทั้งสองแนวทางการดึงข้อมูล
พิจารณาเปลี่ยนไปใช้ QMD หากคุณต้องการ reranking, query expansion หรือต้องการทำดัชนีไดเรกทอรีนอกพื้นที่ทำงาน
พิจารณา Honcho หากคุณต้องการหน่วยความจำข้ามเซสชันพร้อม การสร้างแบบจำลองผู้ใช้อัตโนมัติ
การแก้ไขปัญหา
การค้นหาหน่วยความจำถูกปิดใช้งานอยู่หรือไม่ ตรวจสอบ openclaw memory status หากตรวจไม่พบผู้ให้บริการ
ให้กำหนดอย่างชัดเจนหรือเพิ่มคีย์ API
ตรวจไม่พบผู้ให้บริการภายในเครื่องหรือไม่ ยืนยันว่าเส้นทางภายในเครื่องมีอยู่ แล้วรัน:
openclaw memory status --deep --agent mainopenclaw memory index --force --agent mainทั้งคำสั่ง CLI แบบสแตนด์อโลนและ Gateway ใช้ id ผู้ให้บริการ local เดียวกัน
ตั้งค่า memorySearch.provider: "local" เมื่อคุณต้องการ embeddings ภายในเครื่อง
ผลลัพธ์ล้าสมัยหรือไม่ รัน openclaw memory index --force เพื่อสร้างใหม่ ตัวเฝ้าดู
อาจพลาดการเปลี่ยนแปลงในกรณีขอบที่พบได้ยาก
sqlite-vec ไม่โหลดหรือไม่ OpenClaw จะ fallback ไปใช้ cosine similarity ในกระบวนการ
โดยอัตโนมัติ openclaw memory status --deep รายงานพื้นที่จัดเก็บเวกเตอร์ภายในเครื่อง
แยกจากผู้ให้บริการ embedding ดังนั้น Vector store: unavailable จึงชี้ไปที่
การโหลด sqlite-vec ขณะที่ Embeddings: unavailable ชี้ไปที่ผู้ให้บริการ/การยืนยันตัวตน
หรือความพร้อมของโมเดล ตรวจสอบบันทึกสำหรับข้อผิดพลาดการโหลดที่เจาะจง
การกำหนดค่า
สำหรับการตั้งค่าผู้ให้บริการ embedding, การปรับแต่งการค้นหาแบบไฮบริด (น้ำหนัก, MMR, temporal decay), การทำดัชนีแบบแบตช์, หน่วยความจำมัลติโหมด, sqlite-vec, เส้นทางเพิ่มเติม และปุ่มปรับแต่ง การกำหนดค่าอื่นทั้งหมด ดู ข้อมูลอ้างอิงการกำหนดค่าหน่วยความจำ