Sessions and memory

ภาพรวมหน่วยความจำ

OpenClaw จดจำสิ่งต่าง ๆ โดยเขียนไฟล์ Markdown แบบข้อความธรรมดาลงในพื้นที่ทำงานของเอเจนต์ (ค่าเริ่มต้น ~/.openclaw/workspace) โมเดลจะจดจำเฉพาะสิ่งที่บันทึก ลงดิสก์เท่านั้น โดยไม่มีสถานะที่ซ่อนอยู่

วิธีการทำงาน

เอเจนต์มีไฟล์ที่เกี่ยวข้องกับหน่วยความจำสามประเภท:

  • MEMORY.md — หน่วยความจำระยะยาว ข้อเท็จจริงถาวร ค่ากำหนด และ การตัดสินใจ โดยโหลดเมื่อเริ่มเซสชัน
  • memory/YYYY-MM-DD.md (หรือ memory/YYYY-MM-DD-<slug>.md) — บันทึกรายวัน บริบทและข้อสังเกตที่บันทึกต่อเนื่อง บันทึกที่ระบุวันที่ของวันนี้และเมื่อวานจะโหลด โดยอัตโนมัติเมื่อใช้ /new หรือ /reset แบบไม่มีส่วนต่อท้าย ส่วนรูปแบบที่มี slug เช่นที่ เขียนโดยฮุกหน่วยความจำเซสชันที่ให้มาพร้อมระบบ จะถูกโหลดควบคู่กับ ไฟล์ที่มีเฉพาะวันที่
  • DREAMS.md (ไม่บังคับ) — Dream Diary และสรุปการกวาดข้อมูลจาก Dreaming สำหรับ การตรวจสอบโดยมนุษย์ รวมถึงรายการเติมข้อมูลย้อนหลังที่มีหลักฐานรองรับ

ข้อมูลใดควรอยู่ที่ใด

MEMORY.md คือชั้นข้อมูลที่กระชับและผ่านการคัดสรร ซึ่งประกอบด้วยข้อเท็จจริงถาวร ค่ากำหนด การตัดสินใจ ที่ยังมีผล และสรุปสั้น ๆ ที่ควรพร้อมใช้งานเมื่อเริ่ม เซสชัน ไม่ใช่บทถอดเสียงดิบ บันทึกรายวัน หรือคลังข้อมูลที่ครอบคลุมทุกอย่าง

ไฟล์ memory/YYYY-MM-DD.md คือชั้นข้อมูลสำหรับการทำงาน ซึ่งประกอบด้วยบันทึกรายวันที่มีรายละเอียด ข้อสังเกต สรุปเซสชัน และบริบทดิบที่อาจยังมีประโยชน์ ในภายหลัง ไฟล์เหล่านี้ได้รับการทำดัชนีสำหรับ memory_search และ memory_get แต่จะไม่ถูก แทรกลงในพรอมต์เริ่มต้นทุกครั้งที่โต้ตอบ

เมื่อเวลาผ่านไป เอเจนต์จะกลั่นกรองเนื้อหาที่มีประโยชน์จากบันทึกรายวันลงใน MEMORY.md และลบรายการหน่วยความจำระยะยาวที่ล้าสมัย คำสั่งพื้นที่ทำงาน ที่สร้างขึ้นและกระบวนการ Heartbeat จะดำเนินการนี้เป็นระยะ จึงไม่จำเป็นต้อง แก้ไข MEMORY.md ด้วยตนเองสำหรับทุกรายละเอียด

หาก MEMORY.md มีขนาดเกินงบประมาณไฟล์เริ่มต้น OpenClaw จะเก็บไฟล์บน ดิสก์ไว้อย่างครบถ้วน แต่จะตัดทอนสำเนาที่แทรกลงในบริบท ให้ถือว่านี่เป็น สัญญาณว่าควรย้ายเนื้อหาที่มีรายละเอียดไปยัง memory/*.md เก็บเฉพาะสรุป ถาวรไว้ใน MEMORY.md หรือเพิ่มขีดจำกัดการเริ่มต้นหากต้องการใช้งบประมาณ พรอมต์มากขึ้น ใช้ /context list, /context detail หรือ openclaw doctor เพื่อ ดูขนาดข้อมูลดิบเทียบกับขนาดที่แทรกและสถานะการตัดทอน

นำเข้าจากผู้ช่วยเขียนโค้ด

Control UI สามารถนำเข้าหน่วยความจำภายในเครื่องที่มีอยู่จาก Codex และ Claude Code เปิด SettingsImport Memory เลือกเอเจนต์ปลายทาง ตรวจสอบ ไฟล์ที่ตรวจพบ และยืนยันการนำเข้า OpenClaw จะคัดลอกเฉพาะหน่วยความจำแบบ Markdown:

  • Codex: ไฟล์ MEMORY.md และ memory_summary.md ที่รวมข้อมูลแล้วภายใต้ ~/.codex/memories (หรือ CODEX_HOME/memories) จะไม่นำเข้าไฟล์ rollout และบทถอดเสียง ดิบ
  • Claude Code: ไฟล์ Markdown จากไดเรกทอรีหน่วยความจำอัตโนมัติของแต่ละโปรเจกต์ภายใต้ ~/.claude/projects/*/memory รวมถึง autoMemoryDirectory ที่ผู้ใช้กำหนดค่าไว้ หากมี คำสั่งของโปรเจกต์ เซสชัน การตั้งค่า และข้อมูลประจำตัวไม่รวมอยู่ในการดำเนินการเฉพาะหน่วยความจำนี้

ไฟล์ที่นำเข้าจะถูกเก็บแยกกันภายใต้ memory/imports/codex/ และ memory/imports/claude-code/ ในพื้นที่ทำงานของเอเจนต์ที่เลือก ไฟล์เหล่านี้จะได้รับการทำดัชนี สำหรับ memory_search และพร้อมใช้งานผ่าน memory_get โดยจะไม่ถูกรวมเข้ากับ MEMORY.md สำหรับการเริ่มต้นของเอเจนต์ ไฟล์ต้นทางจะยังคงไม่เปลี่ยนแปลง

หน้าตัวอย่างจะแสดงความขัดแย้งที่ปลายทาง เปิดใช้ Replace existing imports เพื่อ แทนที่ไฟล์เหล่านั้น การใช้การเปลี่ยนแปลงจะสร้างข้อมูลสำรองก่อนนำเข้าที่ผ่านการตรวจสอบ และเก็บ สำเนาระดับรายการของไฟล์ที่ถูกเขียนทับไว้ในรายงานการย้ายข้อมูล

หน่วยความจำที่มีผลต่อการดำเนินการ

หน่วยความจำส่วนใหญ่เป็นบันทึก Markdown ทั่วไป แต่บางรายการมีผลต่อสิ่งที่เอเจนต์ควร ทำในภายหลัง สำหรับรายการเหล่านี้ ให้บันทึกว่าเมื่อใดจึงปลอดภัยที่จะดำเนินการตามบันทึก ไม่ใช่เพียง ข้อเท็จจริงเท่านั้น

ให้บันทึกขอบเขตการดำเนินการนั้นเมื่อบันทึกเกี่ยวข้องกับ:

  • ข้อกำหนดด้านการอนุมัติหรือสิทธิ์
  • ข้อจำกัดชั่วคราว
  • การส่งมอบงานไปยังเซสชัน เธรด หรือบุคคลอื่น
  • เงื่อนไขการหมดอายุ
  • ช่วงเวลาที่ปลอดภัยในการดำเนินการ
  • อำนาจของแหล่งที่มาหรือเจ้าของ
  • คำสั่งให้หลีกเลี่ยงการดำเนินการที่อาจน่าดึงดูดใจ

หน่วยความจำที่มีผลต่อการดำเนินการซึ่งมีประโยชน์ควรระบุอย่างชัดเจนว่า:

  • สิ่งใดเปลี่ยนแปลงพฤติกรรมในอนาคต
  • มีผลเมื่อใดหรือภายใต้เงื่อนไขใด
  • หมดอายุเมื่อใด หรือสิ่งใดทำให้สามารถดำเนินการได้
  • เอเจนต์ควรหลีกเลี่ยงการทำสิ่งใด
  • ใครคือแหล่งที่มาหรือเจ้าของ หากข้อมูลนี้มีผลต่อความไว้วางใจหรืออำนาจ

หน่วยความจำสามารถเก็บบริบทการอนุมัติไว้ได้ แต่ไม่ได้บังคับใช้นโยบาย ให้ใช้ การตั้งค่าการอนุมัติของ OpenClaw แซนด์บ็อกซ์ และงานตามกำหนดเวลาสำหรับการควบคุม การปฏิบัติงานอย่างเคร่งครัด

ตัวอย่าง:

md
กำลังออกแบบการย้าย API ในอีกเซสชันหนึ่ง การโต้ตอบในอนาคตไม่ควรแก้ไขการใช้งาน API จากเธรดนี้ ให้ใช้ข้อค้นพบที่นี่เป็นเพียงข้อมูลประกอบการออกแบบจนกว่าแผนการย้ายจะพร้อมใช้งาน

อีกตัวอย่างหนึ่ง:

md
รายงานจากแหล่งที่ไม่น่าเชื่อถือต้องได้รับการตรวจสอบก่อนนำไปใช้ในระดับถาวร การโต้ตอบในอนาคตควรถือว่ารายงานนี้เป็นเพียงหลักฐาน และอย่าจัดเก็บเป็นหน่วยความจำถาวรจนกว่าผู้ตรวจสอบที่เชื่อถือได้จะยืนยันเนื้อหา

นี่ไม่ใช่สคีมาที่จำเป็นสำหรับหน่วยความจำทุกรายการ ข้อเท็จจริงทั่วไปสามารถคงไว้แบบกระชับ ใช้ขอบเขตที่มีผลต่อการดำเนินการเมื่อการสูญเสียข้อมูลด้านเวลา อำนาจ การหมดอายุ หรือ บริบทว่าปลอดภัยต่อการดำเนินการหรือไม่ อาจทำให้เอเจนต์ดำเนินการผิดพลาดในภายหลัง

ใช้ ข้อผูกพัน สำหรับการติดตามผลที่อนุมานขึ้นและมีอายุสั้น ใช้ งานตามกำหนดเวลา สำหรับการแจ้งเตือนที่แน่นอน การตรวจสอบตามเวลา และงานที่เกิดซ้ำ หน่วยความจำยังคงสามารถสรุปบริบทถาวรเกี่ยวกับ เส้นทางใดเส้นทางหนึ่งได้

ข้อผูกพันที่อนุมาน

การติดตามผลในอนาคตบางอย่างไม่ใช่ข้อเท็จจริงถาวร หากกล่าวถึงการสัมภาษณ์ ในวันพรุ่งนี้ หน่วยความจำที่มีประโยชน์อาจเป็น "สอบถามความคืบหน้าหลังการสัมภาษณ์" ไม่ใช่ "จัดเก็บ สิ่งนี้ไว้ตลอดไปใน MEMORY.md"

ข้อผูกพัน คือหน่วยความจำการติดตามผลที่ต้องเลือกเปิดใช้และมีอายุสั้น สำหรับกรณีนี้ OpenClaw จะอนุมานข้อมูลเหล่านี้ในกระบวนการเบื้องหลังที่ซ่อนอยู่ จำกัดขอบเขตไว้ที่เอเจนต์และช่องทางเดียวกัน และส่งการสอบถามความคืบหน้าที่ครบกำหนดผ่าน Heartbeat ส่วนการแจ้งเตือนที่ระบุอย่างชัดเจนยังคงใช้ งานตามกำหนดเวลา

เครื่องมือหน่วยความจำ

เอเจนต์มีเครื่องมือสองรายการสำหรับทำงานกับหน่วยความจำ:

  • memory_search — ค้นหาบันทึกที่เกี่ยวข้องด้วยการค้นหาเชิงความหมาย แม้ว่า ถ้อยคำจะแตกต่างจากต้นฉบับ
  • memory_get — อ่านไฟล์หน่วยความจำหรือช่วงบรรทัดที่ระบุ

เครื่องมือทั้งสองมาจาก Plugin หน่วยความจำที่ใช้งานอยู่ (ค่าเริ่มต้น: memory-core)

การค้นหาหน่วยความจำ

เมื่อกำหนดค่าผู้ให้บริการ embedding แล้ว memory_search จะใช้การค้นหาแบบผสม: ความคล้ายคลึงของเวกเตอร์ (ความหมายเชิงความหมาย) ร่วมกับการจับคู่คำสำคัญ (คำที่ตรงกัน ทุกประการ เช่น ID และสัญลักษณ์โค้ด) คุณสมบัตินี้ใช้งานได้ทันทีเมื่อมีคีย์ API สำหรับผู้ให้บริการที่รองรับ

ดู การค้นหาหน่วยความจำ เพื่อดูวิธีการทำงานของการค้นหา ตัวเลือก การปรับแต่ง และการตั้งค่าผู้ให้บริการ

แบ็กเอนด์หน่วยความจำ

ในตัว (ค่าเริ่มต้น)

ทำงานบน SQLite ใช้งานได้ทันทีด้วยการค้นหาคำสำคัญ ความคล้ายคลึงของเวกเตอร์ และ การค้นหาแบบผสม โดยไม่ต้องมีการขึ้นต่อกันเพิ่มเติม

QMD

ส่วนประกอบเสริมที่เน้นการทำงานภายในเครื่อง พร้อมการจัดอันดับซ้ำ การขยายคำค้น และความสามารถในการทำดัชนี ไดเรกทอรีภายนอกพื้นที่ทำงาน

Honcho

หน่วยความจำข้ามเซสชันที่ออกแบบมาเพื่อ AI พร้อมการสร้างแบบจำลองผู้ใช้ การค้นหาเชิงความหมาย และ การรับรู้หลายเอเจนต์ ต้องติดตั้ง Plugin

LanceDB

หน่วยความจำที่รองรับด้วย LanceDB พร้อม embedding ที่เข้ากันได้กับ OpenAI การเรียกคืนอัตโนมัติ การบันทึกอัตโนมัติ และรองรับ embedding ของ Ollama ภายในเครื่อง ต้องติดตั้ง Plugin

ชั้นวิกิความรู้

หากต้องการให้หน่วยความจำถาวรทำงานคล้ายฐานความรู้ที่ได้รับการดูแล มากกว่าบันทึกดิบ ให้ใช้ Plugin memory-wiki ที่ให้มาพร้อมระบบ ซึ่งจะคอมไพล์ความรู้ถาวร เป็นคลังวิกิที่มีโครงสร้างหน้าแบบกำหนดแน่นอน ข้อกล่าวอ้างและหลักฐานที่มีโครงสร้าง การติดตาม ความขัดแย้งและความใหม่ แดชบอร์ดที่สร้างขึ้น สรุปย่อที่คอมไพล์แล้ว และเครื่องมือ แบบวิกิโดยตรง (wiki_status, wiki_search, wiki_get, wiki_apply, wiki_lint)

memory-wiki ไม่ได้แทนที่ Plugin หน่วยความจำที่ใช้งานอยู่ โดย Plugin หน่วยความจำที่ใช้งานอยู่ ยังคงเป็นเจ้าของการเรียกคืน การนำไปใช้ในระดับถาวร และ Dreaming ส่วน memory-wiki จะเพิ่ม ชั้นความรู้ที่มีข้อมูลแหล่งที่มาอย่างละเอียดควบคู่กัน

การถ่ายโอนหน่วยความจำอัตโนมัติ

ก่อนที่ Compaction จะสรุปการสนทนา OpenClaw จะดำเนินการโต้ตอบแบบเงียบเพื่อเตือนเอเจนต์ให้บันทึกบริบทสำคัญ ลงในไฟล์หน่วยความจำ คุณสมบัตินี้เปิดไว้เป็นค่าเริ่มต้น กำหนด agents.defaults.compaction.memoryFlush.enabled: false เพื่อปิด

หากต้องการให้การโต้ตอบเพื่อดูแลข้อมูลนี้ทำงานบนโมเดลภายในเครื่อง ให้กำหนดการแทนที่ที่เจาะจง ซึ่งมีผลเฉพาะกับการโต้ตอบเพื่อถ่ายโอนหน่วยความจำ (โดยจะไม่สืบทอดสายโซ่โมเดลสำรอง ของเซสชันที่ใช้งานอยู่):

json
{  "agents": {    "defaults": {      "compaction": {        "memoryFlush": {          "model": "ollama/qwen3:8b"        }      }    }  }}

Dreaming

Dreaming เป็นกระบวนการรวมหน่วยความจำในเบื้องหลังที่เลือกใช้ได้ โดยจะรวบรวม สัญญาณการเรียกคืนระยะสั้น ให้คะแนนรายการที่อาจเหมาะสม และนำเฉพาะรายการที่ผ่านเกณฑ์ ไปยังหน่วยความจำระยะยาว (MEMORY.md):

  • เลือกเปิดใช้: ปิดไว้เป็นค่าเริ่มต้น
  • ตามกำหนดเวลา: เมื่อเปิดใช้ memory-core จะจัดการงาน Cron ที่เกิดซ้ำหนึ่งงาน สำหรับการกวาดข้อมูล Dreaming แบบเต็มโดยอัตโนมัติ
  • มีเกณฑ์กำหนด: การนำไปใช้ในระดับถาวรต้องผ่านเกณฑ์คะแนน ความถี่ในการเรียกคืน และ ความหลากหลายของคำค้น
  • ตรวจสอบได้: ระบบจะเขียนสรุปแต่ละระยะและรายการไดอารีลงใน DREAMS.md เพื่อให้มนุษย์ตรวจสอบ

ดู Dreaming สำหรับพฤติกรรมแต่ละระยะ สัญญาณการให้คะแนน และ รายละเอียด Dream Diary

การเติมข้อมูลย้อนหลังที่มีหลักฐานรองรับและการนำข้อมูลปัจจุบันไปใช้ในระดับถาวร

ระบบ Dreaming มีช่องทางการตรวจสอบที่เกี่ยวข้องกันสองช่องทาง:

  • Dreaming ปัจจุบัน ทำงานจากที่เก็บ Dreaming ระยะสั้นภายใต้ memory/.dreams/ และเป็นส่วนที่ระยะเชิงลึกตามปกติใช้ตัดสินว่าสิ่งใด จะเลื่อนระดับไปยัง MEMORY.md
  • การเติมข้อมูลย้อนหลังที่มีหลักฐานรองรับ อ่านบันทึก memory/YYYY-MM-DD.md ในอดีตเป็น ไฟล์รายวันแยกกัน และเขียนผลลัพธ์การตรวจสอบที่มีโครงสร้างลงใน DREAMS.md

การเติมข้อมูลย้อนหลังที่มีหลักฐานรองรับมีประโยชน์สำหรับการประมวลผลบันทึกเก่าซ้ำและตรวจสอบว่าสิ่งใดที่ ระบบถือว่าเป็นข้อมูลถาวร โดยไม่ต้องแก้ไข MEMORY.md ด้วยตนเอง

bash
openclaw memory rem-backfill --path ./memory --stage-short-term

แฟล็ก --stage-short-term จะนำรายการข้อมูลถาวรที่อาจเหมาะสมและมีหลักฐานรองรับไปไว้ใน ที่เก็บ Dreaming ระยะสั้นเดียวกับที่ระยะเชิงลึกตามปกติใช้อยู่แล้ว โดยจะไม่ นำไปใช้ในระดับถาวรโดยตรง ดังนั้น:

  • DREAMS.md ยังคงเป็นพื้นผิวการตรวจสอบสำหรับมนุษย์
  • ที่เก็บระยะสั้นยังคงเป็นพื้นผิวการจัดอันดับสำหรับเครื่อง
  • MEMORY.md ยังคงถูกเขียนโดยการนำไปใช้ในระดับถาวรเชิงลึกเท่านั้น

หากต้องการยกเลิกการประมวลผลซ้ำโดยไม่กระทบรายการไดอารีทั่วไปหรือสถานะการเรียกคืน ตามปกติ:

bash
openclaw memory rem-backfill --rollbackopenclaw memory rem-backfill --rollback-short-term

CLI

bash
openclaw memory status          # ตรวจสอบสถานะดัชนีและผู้ให้บริการopenclaw memory search "query"  # ค้นหาจากบรรทัดคำสั่งopenclaw memory index --force   # สร้างดัชนีใหม่

อ่านเพิ่มเติม

Was this useful?
On this page

On this page