Sessions and memory

กลไกหน่วยความจำในตัว

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

ความสามารถที่มีให้

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

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

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

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

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

หากไม่มีผู้ให้บริการ embeddings จะใช้ได้เฉพาะการค้นหาด้วยคำสำคัญเท่านั้น

หากต้องการบังคับใช้ 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",        },      },    },  },}

ผู้ให้บริการ 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

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

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 จะกลับไปใช้การคำนวณความคล้ายแบบโคไซน์ ภายในโปรเซสโดยอัตโนมัติ openclaw memory status --deep รายงานสถานะ พื้นที่จัดเก็บเวกเตอร์ภายในเครื่องแยกจากผู้ให้บริการ embeddings ดังนั้น Vector store: unavailable บ่งชี้ปัญหาการโหลด sqlite-vec ขณะที่ Embeddings: unavailable บ่งชี้ปัญหาความพร้อมของผู้ให้บริการ/การยืนยันตัวตนหรือโมเดล ตรวจสอบบันทึกเพื่อดูข้อผิดพลาด ในการโหลดที่เฉพาะเจาะจง

การกำหนดค่า

สำหรับการตั้งค่าผู้ให้บริการ embeddings การปรับแต่งการค้นหาแบบผสม (น้ำหนัก, MMR, การลดน้ำหนัก ตามเวลา) การจัดทำดัชนีแบบกลุ่ม หน่วยความจำหลายรูปแบบ sqlite-vec พาธเพิ่มเติม และตัวเลือก การกำหนดค่าอื่นทั้งหมด โปรดดู เอกสารอ้างอิงการกำหนดค่าหน่วยความจำ

เนื้อหาที่เกี่ยวข้อง

Was this useful?
On this page

On this page