Sessions and memory

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

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

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

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

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

หากคุณมีคีย์ API สำหรับ OpenAI, Gemini, Voyage, Mistral หรือ DeepInfra เอนจินในตัว จะตรวจพบโดยอัตโนมัติและเปิดใช้การค้นหาแบบเวกเตอร์ ไม่ต้องตั้งค่าใดๆ

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

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

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

หากต้องการบังคับใช้ผู้ให้บริการ embedding ในเครื่องแบบในตัว ให้ติดตั้งแพ็กเกจรันไทม์ node-llama-cpp แบบไม่บังคับไว้ข้าง OpenClaw จากนั้นชี้ local.modelPath ไปยังไฟล์ GGUF:

{
  agents: {
    defaults: {
      memorySearch: {
        provider: "local",
        fallback: "none",
        local: {
          modelPath: "~/.node-llama-cpp/models/embeddinggemma-300m-qat-Q8_0.gguf",
        },
      },
    },
  },
}

ผู้ให้บริการ embedding ที่รองรับ

ผู้ให้บริการ ID ตรวจพบอัตโนมัติ หมายเหตุ
OpenAI openai ใช่ ค่าเริ่มต้น: text-embedding-3-small
Gemini gemini ใช่ รองรับมัลติโหมด (ภาพ + เสียง)
Voyage voyage ใช่
Mistral mistral ใช่
DeepInfra deepinfra ใช่ ค่าเริ่มต้น: BAAI/bge-m3
Ollama ollama ไม่ใช่ ในเครื่อง ตั้งค่าอย่างชัดเจน
Local local ใช่ (เป็นอันดับแรก) รันไทม์ node-llama-cpp แบบไม่บังคับ

การตรวจพบอัตโนมัติจะเลือกผู้ให้บริการรายแรกที่สามารถระบุคีย์ API ได้ ตาม ลำดับที่แสดง ตั้งค่า memorySearch.provider เพื่อแทนที่

การจัดทำดัชนีทำงานอย่างไร

OpenClaw จัดทำดัชนี MEMORY.md และ memory/*.md เป็นชังก์ (~400 โทเค็นพร้อม ส่วนทับซ้อน 80 โทเค็น) และจัดเก็บไว้ในฐานข้อมูล SQLite แยกตามเอเจนต์

  • ตำแหน่งดัชนี: ~/.openclaw/memory/<agentId>.sqlite
  • การบำรุงรักษาพื้นที่จัดเก็บ: ไฟล์เสริม SQLite WAL ถูกจำกัดขนาดด้วย checkpoint เป็นระยะและ ตอนปิดระบบ
  • การเฝ้าดูไฟล์: การเปลี่ยนแปลงไฟล์หน่วยความจำจะทริกเกอร์การจัดทำดัชนีใหม่แบบ debounce (1.5 วินาที)
  • การจัดทำดัชนีใหม่อัตโนมัติ: เมื่อผู้ให้บริการ embedding, โมเดล หรือค่าการตั้งค่าการแบ่งชังก์ เปลี่ยนแปลง ดัชนีทั้งหมดจะถูกสร้างใหม่โดยอัตโนมัติ
  • จัดทำดัชนีใหม่ตามต้องการ: openclaw memory index --force

ควรใช้เมื่อใด

เอนจินในตัวเป็นตัวเลือกที่เหมาะสำหรับผู้ใช้ส่วนใหญ่:

  • ใช้งานได้ทันทีโดยไม่ต้องมีการพึ่งพาเพิ่มเติม
  • จัดการการค้นหาด้วยคีย์เวิร์ดและแบบเวกเตอร์ได้ดี
  • รองรับผู้ให้บริการ embedding ทั้งหมด
  • การค้นหาแบบไฮบริดรวมข้อดีที่สุดของทั้งสองแนวทางการดึงข้อมูล

พิจารณาเปลี่ยนไปใช้ QMD หากคุณต้องการ reranking, query expansion หรือต้องการจัดทำดัชนีไดเรกทอรีนอกพื้นที่ทำงาน

พิจารณา Honcho หากคุณต้องการหน่วยความจำข้ามเซสชันพร้อม การสร้างโมเดลผู้ใช้โดยอัตโนมัติ

การแก้ไขปัญหา

การค้นหาหน่วยความจำถูกปิดใช้อยู่หรือไม่ ตรวจสอบ openclaw memory status หากไม่พบผู้ให้บริการ ให้ตั้งค่ารายหนึ่งอย่างชัดเจนหรือเพิ่มคีย์ API

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

openclaw memory status --deep --agent main
openclaw memory index --force --agent main

ทั้งคำสั่ง CLI แบบสแตนด์อโลนและ Gateway ใช้ id ผู้ให้บริการ local เดียวกัน หากตั้งค่าผู้ให้บริการเป็น auto embeddings ในเครื่องจะถูกพิจารณาเป็นอันดับแรกเฉพาะเมื่อ memorySearch.local.modelPath ชี้ไปยังไฟล์ในเครื่องที่มีอยู่

ผลลัพธ์เก่าหรือไม่ เรียกใช้ openclaw memory index --force เพื่อสร้างใหม่ ตัวเฝ้าดู อาจพลาดการเปลี่ยนแปลงในกรณีพิเศษที่พบได้ยาก

sqlite-vec ไม่โหลดหรือไม่ OpenClaw จะถอยกลับไปใช้ cosine similarity ภายในโปรเซส โดยอัตโนมัติ openclaw memory status --deep รายงานที่เก็บเวกเตอร์ในเครื่อง แยกจากผู้ให้บริการ embedding ดังนั้น Vector store: unavailable ชี้ ไปที่การโหลด sqlite-vec ขณะที่ Embeddings: unavailable ชี้ไปที่ provider/auth หรือความพร้อมของโมเดล ตรวจสอบบันทึกเพื่อดูข้อผิดพลาดการโหลดที่เฉพาะเจาะจง

การตั้งค่า

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

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