Sessions and memory
ภาพรวมของหน่วยความจำ
OpenClaw จดจำสิ่งต่าง ๆ โดยเขียน ไฟล์ Markdown แบบข้อความล้วน ใน workspace ของ agent ของคุณ โมเดลจะ "จำ" เฉพาะสิ่งที่ถูกบันทึกลงดิสก์เท่านั้น ไม่มี สถานะที่ซ่อนอยู่
วิธีทำงาน
agent ของคุณมีไฟล์ที่เกี่ยวข้องกับหน่วยความจำสามไฟล์:
MEMORY.md— หน่วยความจำระยะยาว ข้อเท็จจริง ความชอบ และ การตัดสินใจที่คงทน โหลดเมื่อเริ่มทุกเซสชัน DMmemory/YYYY-MM-DD.md(หรือmemory/YYYY-MM-DD-<slug>.md) — บันทึกรายวัน บริบทและข้อสังเกตที่กำลังดำเนินอยู่ บันทึกของวันนี้และเมื่อวานจะถูกโหลด โดยอัตโนมัติ และตอนนี้ตัวแปรที่มี slug เช่นไฟล์ที่เขียนโดย hook session-memory ที่มาพร้อมระบบบน/newหรือ/resetจะถูกหยิบขึ้นมาพร้อมกับ ไฟล์แบบมีวันที่อย่างเดียวด้วยDREAMS.md(ไม่บังคับ) — บันทึก Dreaming และสรุปการกวาด Dreaming สำหรับให้มนุษย์ตรวจทาน รวมถึงรายการเติมย้อนหลังจากประวัติที่มีหลักฐานรองรับ
ไฟล์เหล่านี้อยู่ใน workspace ของ agent (ค่าเริ่มต้น ~/.openclaw/workspace)
อะไรควรอยู่ที่ไหน
MEMORY.md คือชั้นที่กระชับและคัดสรรแล้ว ใช้สำหรับข้อเท็จจริงที่คงทน
ความชอบ การตัดสินใจที่ยืนอยู่ และสรุปสั้น ๆ ที่ควรพร้อมใช้งานเมื่อเริ่ม
เซสชันส่วนตัวหลัก ไม่ได้มีไว้เป็น transcript ดิบ บันทึกรายวัน หรือ archive
แบบครบถ้วน
ไฟล์ memory/YYYY-MM-DD.md คือชั้นสำหรับทำงาน ใช้สำหรับบันทึกรายวันแบบละเอียด
ข้อสังเกต สรุปเซสชัน และบริบทดิบที่อาจยังมีประโยชน์ภายหลัง ไฟล์เหล่านี้ถูกทำ
ดัชนีสำหรับ memory_search และ memory_get แต่จะไม่ถูกใส่เข้าไปใน prompt
bootstrap ปกติในทุก turn
เมื่อเวลาผ่านไป agent ควรกลั่นเนื้อหาที่มีประโยชน์จากบันทึกรายวัน
เข้าไปใน MEMORY.md และลบรายการระยะยาวที่ล้าสมัยออก คำสั่ง workspace
ที่สร้างขึ้นและ flow Heartbeat สามารถทำสิ่งนี้เป็นระยะได้ คุณไม่จำเป็นต้อง
แก้ไข MEMORY.md เองสำหรับรายละเอียดทุกอย่างที่ต้องจำ
ถ้า MEMORY.md โตเกินงบไฟล์ bootstrap OpenClaw จะเก็บไฟล์บนดิสก์ไว้ครบถ้วน
แต่จะตัดทอนสำเนาที่ใส่เข้าไปในบริบทของโมเดล ให้มองสิ่งนี้เป็นสัญญาณให้ย้าย
เนื้อหาแบบละเอียดกลับไปที่ memory/*.md เก็บเฉพาะสรุปที่คงทนไว้ใน
MEMORY.md หรือเพิ่มขีดจำกัด bootstrap ถ้าคุณตั้งใจจะใช้งบ prompt มากขึ้น
ใช้ /context list, /context detail หรือ openclaw doctor เพื่อดูขนาดดิบ
เทียบกับขนาดที่ถูกใส่เข้าไป และสถานะการตัดทอน
หน่วยความจำที่ไวต่อการกระทำ
หน่วยความจำส่วนใหญ่เขียนเป็นบันทึก Markdown ปกติได้ แต่บางหน่วยความจำส่งผลต่อสิ่งที่ agent ควรทำภายหลัง สำหรับกรณีเหล่านั้น ให้บันทึกว่าเมื่อใดจึงปลอดภัยที่จะดำเนินการตามบันทึกนั้น ไม่ใช่บันทึกแค่ข้อเท็จจริงเอง
ให้บันทึกขอบเขตการกระทำนั้นเมื่อบันทึกเกี่ยวข้องกับ:
- ข้อกำหนดด้านการอนุมัติหรือสิทธิ์อนุญาต
- ข้อจำกัดชั่วคราว
- การส่งต่องานไปยังเซสชัน เธรด หรือบุคคลอื่น
- เงื่อนไขหมดอายุ
- เวลาที่ปลอดภัยสำหรับการดำเนินการ
- อำนาจของแหล่งที่มาหรือเจ้าของ
- คำสั่งให้หลีกเลี่ยงการกระทำที่ดูน่าทำ
หน่วยความจำที่ไวต่อการกระทำที่มีประโยชน์ควรทำให้ชัดเจนว่า:
- อะไรเปลี่ยนพฤติกรรมในอนาคต
- ใช้เมื่อใดหรือภายใต้เงื่อนไขใด
- หมดอายุเมื่อใด หรืออะไรที่ปลดล็อกให้ดำเนินการได้
- agent ควรหลีกเลี่ยงการทำอะไร
- ใครคือแหล่งที่มาหรือเจ้าของ ถ้าสิ่งนั้นส่งผลต่อความน่าเชื่อถือหรืออำนาจ
หน่วยความจำสามารถรักษาบริบทการอนุมัติไว้ได้ แต่ไม่ได้บังคับใช้นโยบาย ใช้การตั้งค่าการอนุมัติของ OpenClaw, sandboxing และงานตามกำหนดเวลา สำหรับการควบคุมการปฏิบัติงานที่เข้มงวด
ตัวอย่าง:
The API migration is being designed in another session. Future turns should not edit the API implementation from this thread; use findings here only as design input until the migration plan lands.อีกตัวอย่าง:
A report from an untrusted source needs review before promotion. Future turns should treat it as evidence only; do not store it as durable memory until a trusted reviewer confirms the contents.ใช้ commitments สำหรับงานติดตามผลที่อนุมานได้และมีอายุสั้น ใช้ งานตามกำหนดเวลา สำหรับการเตือนที่แน่นอน การตรวจตามเวลา และงานที่เกิดซ้ำ หน่วยความจำยังสามารถสรุปบริบทที่คงทนรอบเส้นทางใดเส้นทางหนึ่งได้
นี่ไม่ใช่ schema ที่บังคับสำหรับทุกหน่วยความจำ ข้อเท็จจริงง่าย ๆ สามารถเขียนให้กระชับได้ ใช้ขอบเขตที่ไวต่อการกระทำเมื่อการสูญเสียบริบทด้านเวลา อำนาจ การหมดอายุ หรือความปลอดภัยในการดำเนินการ อาจทำให้ agent ทำสิ่งผิดในภายหลัง
commitment ที่อนุมานได้
งานติดตามผลในอนาคตบางอย่างไม่ใช่ข้อเท็จจริงที่คงทน ถ้าคุณพูดถึงการสัมภาษณ์
พรุ่งนี้ หน่วยความจำที่มีประโยชน์อาจเป็น "ตรวจสอบหลังการสัมภาษณ์" ไม่ใช่
"เก็บสิ่งนี้ไว้ตลอดไปใน MEMORY.md"
Commitments คือหน่วยความจำติดตามผลแบบ opt-in และมีอายุสั้นสำหรับกรณีนี้ OpenClaw อนุมานสิ่งเหล่านี้ในรอบเบื้องหลังที่ซ่อนอยู่ จำกัดขอบเขตไว้ที่ agent และช่องทางเดียวกัน และส่งการเช็กอินที่ถึงกำหนดผ่าน Heartbeat การเตือนแบบชัดเจนยังคงใช้ งานตามกำหนดเวลา
เครื่องมือหน่วยความจำ
agent มีเครื่องมือสองอย่างสำหรับทำงานกับหน่วยความจำ:
memory_search— ค้นหาบันทึกที่เกี่ยวข้องด้วยการค้นหาเชิงความหมาย แม้เมื่อ ถ้อยคำแตกต่างจากต้นฉบับmemory_get— อ่านไฟล์หน่วยความจำหรือช่วงบรรทัดที่ระบุ
เครื่องมือทั้งสองจัดเตรียมโดย Plugin Active Memory (ค่าเริ่มต้น: memory-core)
Plugin คู่ของ Memory Wiki
ถ้าคุณต้องการให้หน่วยความจำที่คงทนทำตัวเหมือนฐานความรู้ที่ดูแลรักษามากกว่า
เป็นเพียงบันทึกดิบ ให้ใช้ Plugin memory-wiki ที่มาพร้อมระบบ
memory-wiki คอมไพล์ความรู้ที่คงทนเป็น vault wiki โดยมี:
- โครงสร้างหน้าที่กำหนดได้แน่นอน
- claim และหลักฐานแบบมีโครงสร้าง
- การติดตามความขัดแย้งและความสดใหม่
- dashboard ที่สร้างขึ้น
- digest ที่คอมไพล์แล้วสำหรับผู้ใช้ระดับ agent/runtime
- เครื่องมือแบบ wiki-native เช่น
wiki_search,wiki_get,wiki_applyและwiki_lint
มันไม่ได้แทนที่ Plugin Active Memory Plugin Active Memory ยังเป็นเจ้าของ
การเรียกคืน การเลื่อนสถานะ และ Dreaming memory-wiki เพิ่มชั้นความรู้
ที่มี provenance สูงไว้ข้าง ๆ
ดู Memory Wiki
การค้นหาหน่วยความจำ
เมื่อกำหนดค่า provider สำหรับ embedding แล้ว memory_search จะใช้ การค้นหาแบบไฮบริด
โดยผสานความคล้ายคลึงแบบเวกเตอร์ (ความหมายเชิงความหมาย) กับการจับคู่ keyword
(คำที่ตรงกัน เช่น ID และสัญลักษณ์โค้ด) สิ่งนี้ใช้งานได้ทันทีเมื่อคุณมี
API key สำหรับ provider ที่รองรับรายใดก็ได้
สำหรับรายละเอียดเกี่ยวกับวิธีทำงานของการค้นหา ตัวเลือกการปรับแต่ง และการตั้งค่า provider ดู การค้นหาหน่วยความจำ
backend หน่วยความจำ
ใช้ SQLite เป็นฐาน ใช้งานได้ทันทีพร้อมการค้นหา keyword ความคล้ายคลึงแบบเวกเตอร์ และ การค้นหาแบบไฮบริด ไม่ต้องมี dependency เพิ่มเติม
sidecar แบบ local-first ที่มีการ rerank การขยาย query และความสามารถในการทำดัชนี directory นอก workspace
หน่วยความจำข้ามเซสชันแบบ AI-native พร้อมการสร้างโมเดลผู้ใช้ การค้นหาเชิงความหมาย และ การรับรู้หลาย agent ติดตั้งเป็น Plugin
หน่วยความจำที่มาพร้อมระบบและใช้ LanceDB เป็นฐาน พร้อม embedding ที่เข้ากันได้กับ OpenAI, auto-recall, auto-capture และการรองรับ embedding ของ Ollama แบบ local
ชั้น wiki ความรู้
การ flush หน่วยความจำอัตโนมัติ
ก่อนที่ Compaction จะสรุปการสนทนาของคุณ OpenClaw จะรัน turn เงียบที่เตือน agent ให้บันทึกบริบทสำคัญลงในไฟล์หน่วยความจำ สิ่งนี้เปิดเป็นค่าเริ่มต้น คุณไม่จำเป็นต้องกำหนดค่าใด ๆ
เพื่อให้ turn งานดูแลนี้อยู่บนโมเดล local ให้ตั้งค่า override โมเดล memory-flush แบบเจาะจง:
{ "agents": { "defaults": { "compaction": { "memoryFlush": { "model": "ollama/qwen3:8b" } } } }}override นี้ใช้เฉพาะกับ turn memory-flush และไม่สืบทอด fallback chain ของเซสชันที่กำลังใช้งานอยู่
Dreaming
Dreaming คือรอบ consolidation เบื้องหลังแบบไม่บังคับสำหรับหน่วยความจำ มันรวบรวม
สัญญาณระยะสั้น ให้คะแนน candidate และเลื่อนสถานะเฉพาะรายการที่ผ่านคุณสมบัติ
เข้าสู่หน่วยความจำระยะยาว (MEMORY.md)
ออกแบบมาเพื่อรักษาให้หน่วยความจำระยะยาวมีสัญญาณสูง:
- Opt-in: ปิดเป็นค่าเริ่มต้น
- ตามกำหนดเวลา: เมื่อเปิดใช้งาน
memory-coreจะจัดการ cron job ที่เกิดซ้ำหนึ่งงาน สำหรับการกวาด Dreaming แบบเต็มโดยอัตโนมัติ - มี threshold: การเลื่อนสถานะต้องผ่านประตูด้านคะแนน ความถี่การ recall และ ความหลากหลายของ query
- ตรวจทานได้: สรุป phase และรายการบันทึกถูกเขียนไปยัง
DREAMS.mdเพื่อให้มนุษย์ตรวจทาน
สำหรับพฤติกรรมของ phase สัญญาณการให้คะแนน และรายละเอียดบันทึก Dreaming ดู Dreaming
การเติมย้อนหลังที่มีหลักฐานรองรับและการเลื่อนสถานะแบบสด
ตอนนี้ระบบ Dreaming มี lane ตรวจทานที่เกี่ยวข้องกันอย่างใกล้ชิดสองแบบ:
- Dreaming แบบสด ทำงานจาก store Dreaming ระยะสั้นภายใต้
memory/.dreams/และเป็นสิ่งที่ phase ลึกปกติใช้เมื่อตัดสินใจว่าอะไร สามารถเลื่อนชั้นเข้าMEMORY.mdได้ - การเติมย้อนหลังที่มีหลักฐานรองรับ อ่านบันทึกประวัติ
memory/YYYY-MM-DD.mdเป็นไฟล์รายวันแบบ standalone และเขียนผลลัพธ์การตรวจทานแบบมีโครงสร้างลงในDREAMS.md
การเติมย้อนหลังที่มีหลักฐานรองรับมีประโยชน์เมื่อคุณต้องการ replay บันทึกเก่าและตรวจดูว่า
ระบบคิดว่าอะไรคงทน โดยไม่ต้องแก้ไข MEMORY.md เอง
เมื่อคุณใช้:
openclaw memory rem-backfill --path ./memory --stage-short-termcandidate ที่คงทนและมีหลักฐานรองรับจะไม่ถูกเลื่อนสถานะโดยตรง แต่จะถูก stage เข้าไปใน store Dreaming ระยะสั้นเดียวกันที่ phase ลึกปกติใช้อยู่แล้ว นั่นหมายความว่า:
DREAMS.mdยังคงเป็นพื้นผิวสำหรับให้มนุษย์ตรวจทาน- store ระยะสั้นยังคงเป็นพื้นผิวการจัดอันดับสำหรับเครื่อง
MEMORY.mdยังคงถูกเขียนโดยการเลื่อนสถานะแบบลึกเท่านั้น
ถ้าคุณตัดสินใจว่า replay ไม่มีประโยชน์ คุณสามารถลบ artifact ที่ stage ไว้ โดยไม่แตะรายการบันทึกปกติหรือสถานะ recall ปกติ:
openclaw memory rem-backfill --rollbackopenclaw memory rem-backfill --rollback-short-termCLI
openclaw memory status # Check index status and provideropenclaw memory search "query" # Search from the command lineopenclaw memory index --force # Rebuild the indexอ่านเพิ่มเติม
- engine หน่วยความจำในตัว: backend SQLite เริ่มต้น
- engine หน่วยความจำ QMD: sidecar แบบ local-first ขั้นสูง
- หน่วยความจำ Honcho: หน่วยความจำข้ามเซสชันแบบ AI-native
- Memory LanceDB: Plugin ที่ใช้ LanceDB เป็นฐานพร้อม embedding ที่เข้ากันได้กับ OpenAI
- Memory Wiki: vault ความรู้ที่คอมไพล์แล้วและเครื่องมือแบบ wiki-native
- การค้นหาหน่วยความจำ: pipeline การค้นหา, provider และการปรับแต่ง
- Dreaming: การเลื่อนสถานะเบื้องหลังจาก recall ระยะสั้นสู่หน่วยความจำระยะยาว
- อ้างอิงการกำหนดค่าหน่วยความจำ: ปุ่มปรับ config ทั้งหมด
- Compaction: วิธีที่ Compaction โต้ตอบกับหน่วยความจำ