Sessions and memory

เอนจินหน่วยความจำในตัว

เอนจินในตัวเป็นแบ็กเอนด์หน่วยความจำค่าเริ่มต้น โดยจะจัดเก็บดัชนีหน่วยความจำของคุณใน ฐานข้อมูล SQLite แบบต่อเอเจนต์ และไม่ต้องใช้ dependency เพิ่มเติมเพื่อเริ่มต้นใช้งาน

สิ่งที่มีให้

  • การค้นหาด้วยคีย์เวิร์ด ผ่านการทำดัชนีข้อความแบบเต็มด้วย FTS5 (การให้คะแนน BM25)
  • การค้นหาแบบเวกเตอร์ ผ่าน embeddings จากผู้ให้บริการใดก็ได้ที่รองรับ
  • การค้นหาแบบไฮบริด ที่ผสานทั้งสองแบบเข้าด้วยกันเพื่อผลลัพธ์ที่ดีที่สุด
  • การรองรับ CJK ผ่านการตัดคำแบบ trigram สำหรับภาษาจีน ญี่ปุ่น และเกาหลี
  • การเร่งความเร็วด้วย sqlite-vec สำหรับคิวรีเวกเตอร์ในฐานข้อมูล (ไม่บังคับ)

เริ่มต้นใช้งาน

โดยค่าเริ่มต้น เอนจินในตัวจะใช้ embeddings ของ OpenAI หากคุณกำหนดค่า OPENAI_API_KEY หรือ models.providers.openai.apiKey ไว้แล้ว การค้นหาแบบเวกเตอร์ จะทำงานได้โดยไม่ต้องตั้งค่าหน่วยความจำเพิ่มเติม

หากต้องการกำหนดผู้ให้บริการอย่างชัดเจน:

json5
{  agents: {    defaults: {      memorySearch: {        provider: "openai",      },    },  },}

หากไม่มีผู้ให้บริการ embedding จะมีเฉพาะการค้นหาด้วยคีย์เวิร์ดเท่านั้น

หากต้องการบังคับใช้ embeddings แบบ GGUF ภายในเครื่อง ให้ติดตั้ง plugin ผู้ให้บริการ llama.cpp อย่างเป็นทางการ จากนั้นชี้ local.modelPath ไปยังไฟล์ GGUF:

bash
openclaw plugins install @openclaw/llama-cpp-provider
json5
{  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

ตรวจไม่พบผู้ให้บริการภายในเครื่องหรือไม่ ยืนยันว่าเส้นทางภายในเครื่องมีอยู่ แล้วรัน:

bash
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, เส้นทางเพิ่มเติม และปุ่มปรับแต่ง การกำหนดค่าอื่นทั้งหมด ดู ข้อมูลอ้างอิงการกำหนดค่าหน่วยความจำ

ที่เกี่ยวข้อง

Was this useful?
On this page

On this page