Sessions and memory
กลไกหน่วยความจำในตัว
เอนจินในตัวเป็นแบ็กเอนด์หน่วยความจำเริ่มต้น โดยจัดเก็บดัชนีหน่วยความจำของคุณ ไว้ในฐานข้อมูล SQLite แยกสำหรับแต่ละเอเจนต์ และไม่ต้องใช้การขึ้นต่อกันเพิ่มเติม เพื่อเริ่มต้นใช้งาน
ความสามารถที่มีให้
- การค้นหาด้วยคำสำคัญ ผ่านการทำดัชนีข้อความแบบเต็ม FTS5 (การให้คะแนนแบบ BM25)
- การค้นหาแบบเวกเตอร์ ผ่าน embeddings จากผู้ให้บริการที่รองรับ
- การค้นหาแบบผสม ที่รวมทั้งสองวิธีเพื่อให้ได้ผลลัพธ์ที่ดีที่สุด
- การรองรับ CJK ผ่านการแยกโทเค็นแบบไตรแกรมสำหรับภาษาจีน ญี่ปุ่น และเกาหลี
- การเร่งความเร็วด้วย sqlite-vec สำหรับการค้นหาเวกเตอร์ภายในฐานข้อมูล (ไม่บังคับ)
เริ่มต้นใช้งาน
โดยค่าเริ่มต้น เอนจินในตัวใช้ embeddings ของ OpenAI หากกำหนดค่า OPENAI_API_KEY หรือ
models.providers.openai.apiKey ไว้แล้ว การค้นหาแบบเวกเตอร์จะทำงาน
โดยไม่ต้องกำหนดค่าหน่วยความจำเพิ่มเติม
หากต้องการระบุผู้ให้บริการอย่างชัดเจน:
{ agents: { defaults: { memorySearch: { provider: "openai", }, }, },}หากไม่มีผู้ให้บริการ embeddings จะใช้ได้เฉพาะการค้นหาด้วยคำสำคัญเท่านั้น
หากต้องการบังคับใช้ 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", }, }, }, },}ผู้ให้บริการ embeddings ที่รองรับ
| ผู้ให้บริการ | ID | หมายเหตุ |
|---|---|---|
| Bedrock | bedrock |
ใช้ลำดับการค้นหาข้อมูลประจำตัวของ AWS |
| DeepInfra | deepinfra |
ค่าเริ่มต้น: BAAI/bge-m3 |
| Gemini | gemini |
รองรับหลายรูปแบบ (รูปภาพ + เสียง) |
| GitHub Copilot | github-copilot |
ใช้การสมัครสมาชิก Copilot ของคุณ |
| LM Studio | lmstudio |
ภายในเครื่อง/โฮสต์ด้วยตนเอง |
| ภายในเครื่อง | 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 - การบำรุงรักษาพื้นที่จัดเก็บ: ไฟล์ประกอบ WAL ของ SQLite ถูกจำกัดขนาดด้วยการทำ checkpoint เป็นระยะและเมื่อปิดระบบ
- การเฝ้าดูไฟล์: การเปลี่ยนแปลงไฟล์หน่วยความจำจะกระตุ้นให้จัดทำดัชนีใหม่แบบหน่วงรวมเหตุการณ์ (ค่าเริ่มต้น 1.5 วินาที)
- การจัดทำดัชนีใหม่อัตโนมัติ: ดัชนีจะสร้างใหม่โดยอัตโนมัติเมื่อผู้ให้บริการ embeddings, โมเดล, การกำหนดค่าการแบ่งส่วน, แหล่งข้อมูลที่กำหนดค่าไว้ หรือขอบเขตเปลี่ยนแปลง
- การจัดทำดัชนีใหม่ตามต้องการ:
openclaw memory index --force
ควรใช้เมื่อใด
เอนจินในตัวเป็นตัวเลือกที่เหมาะสมสำหรับผู้ใช้ส่วนใหญ่:
- ใช้งานได้ทันทีโดยไม่ต้องใช้การขึ้นต่อกันเพิ่มเติม
- รองรับการค้นหาด้วยคำสำคัญและแบบเวกเตอร์ได้ดี
- รองรับผู้ให้บริการ embeddings ทั้งหมด
- การค้นหาแบบผสมรวมข้อดีของแนวทางการค้นคืนข้อมูลทั้งสองแบบ
พิจารณาเปลี่ยนไปใช้ QMD หากคุณต้องการจัดอันดับผลลัพธ์ใหม่ ขยายคำค้น หรือต้องการจัดทำดัชนีไดเรกทอรีที่อยู่นอกพื้นที่ทำงาน
พิจารณาใช้ 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 จะกลับไปใช้การคำนวณความคล้ายแบบโคไซน์
ภายในโปรเซสโดยอัตโนมัติ openclaw memory status --deep รายงานสถานะ
พื้นที่จัดเก็บเวกเตอร์ภายในเครื่องแยกจากผู้ให้บริการ embeddings ดังนั้น Vector store: unavailable บ่งชี้ปัญหาการโหลด sqlite-vec ขณะที่ Embeddings: unavailable
บ่งชี้ปัญหาความพร้อมของผู้ให้บริการ/การยืนยันตัวตนหรือโมเดล ตรวจสอบบันทึกเพื่อดูข้อผิดพลาด
ในการโหลดที่เฉพาะเจาะจง
การกำหนดค่า
สำหรับการตั้งค่าผู้ให้บริการ embeddings การปรับแต่งการค้นหาแบบผสม (น้ำหนัก, MMR, การลดน้ำหนัก ตามเวลา) การจัดทำดัชนีแบบกลุ่ม หน่วยความจำหลายรูปแบบ sqlite-vec พาธเพิ่มเติม และตัวเลือก การกำหนดค่าอื่นทั้งหมด โปรดดู เอกสารอ้างอิงการกำหนดค่าหน่วยความจำ