Sessions and memory
Dreaming
Dreaming คือระบบรวมหน่วยความจำพื้นหลังใน memory-core ซึ่งช่วยให้ OpenClaw ย้ายสัญญาณระยะสั้นที่มีน้ำหนักสูงเข้าสู่หน่วยความจำถาวร พร้อมคงให้กระบวนการอธิบายและตรวจทานได้
สิ่งที่ Dreaming เขียน
Dreaming เก็บผลลัพธ์ไว้สองชนิด:
- สถานะของเครื่อง ใน
memory/.dreams/(ที่เก็บการเรียกคืน, สัญญาณระยะ, จุดตรวจการนำเข้า, ล็อก) - ผลลัพธ์ที่มนุษย์อ่านได้ ใน
DREAMS.md(หรือdreams.mdที่มีอยู่) และไฟล์รายงานระยะที่เลือกได้ภายใต้memory/dreaming/<phase>/YYYY-MM-DD.md
การเลื่อนชั้นระยะยาวยังคงเขียนเฉพาะไปที่ MEMORY.md
โมเดลของระยะ
Dreaming ใช้สามระยะที่ทำงานร่วมกัน:
| ระยะ | วัตถุประสงค์ | การเขียนแบบถาวร |
|---|---|---|
| Light | จัดเรียงและเตรียมวัสดุระยะสั้นล่าสุด | ไม่ |
| Deep | ให้คะแนนและเลื่อนชั้นผู้สมัครที่คงทน | ใช่ (MEMORY.md) |
| REM | สะท้อนธีมและแนวคิดที่เกิดซ้ำ | ไม่ |
ระยะเหล่านี้เป็นรายละเอียดการทำงานภายใน ไม่ใช่ "โหมด" แยกต่างหากที่ผู้ใช้กำหนดค่า
ระยะ Light
ระยะ Light นำเข้าสัญญาณหน่วยความจำรายวันล่าสุดและร่องรอยการเรียกคืน ตัดรายการซ้ำ และเตรียมบรรทัดผู้สมัคร
- อ่านจากสถานะการเรียกคืนระยะสั้น ไฟล์หน่วยความจำรายวันล่าสุด และทรานสคริปต์เซสชันที่ปกปิดข้อมูลแล้วเมื่อมี
- เขียนบล็อก
## Light Sleepที่มีการจัดการเมื่อที่เก็บข้อมูลรวมเอาต์พุตแบบอินไลน์ - บันทึกสัญญาณเสริมแรงสำหรับการจัดอันดับ Deep ภายหลัง
- ไม่เขียนไปที่
MEMORY.md
ระยะ Deep
ระยะ Deep ตัดสินใจว่าสิ่งใดจะกลายเป็นหน่วยความจำระยะยาว
- จัดอันดับผู้สมัครด้วยการให้คะแนนแบบถ่วงน้ำหนักและเกตเกณฑ์
- ต้องผ่าน
minScore,minRecallCountและminUniqueQueries - คืนสภาพสแนปเพ็ตจากไฟล์รายวันสดก่อนเขียน เพื่อข้ามสแนปเพ็ตที่ล้าสมัยหรือถูกลบ
- เพิ่มรายการที่เลื่อนชั้นแล้วไปยัง
MEMORY.md - เขียนสรุป
## Deep SleepลงในDREAMS.mdและเลือกเขียนmemory/dreaming/deep/YYYY-MM-DD.mdได้
ระยะ REM
ระยะ REM สกัดรูปแบบและสัญญาณเชิงสะท้อน
- สร้างสรุปธีมและการสะท้อนจากร่องรอยระยะสั้นล่าสุด
- เขียนบล็อก
## REM Sleepที่มีการจัดการเมื่อที่เก็บข้อมูลรวมเอาต์พุตแบบอินไลน์ - บันทึกสัญญาณเสริมแรง REM ที่ใช้โดยการจัดอันดับ Deep
- ไม่เขียนไปที่
MEMORY.md
การนำเข้าทรานสคริปต์เซสชัน
Dreaming สามารถนำเข้าทรานสคริปต์เซสชันที่ปกปิดข้อมูลแล้วเข้าสู่คอร์ปัส Dreaming ได้ เมื่อมีทรานสคริปต์ ทรานสคริปต์จะถูกป้อนเข้าสู่ระยะ Light ควบคู่กับสัญญาณหน่วยความจำรายวันและร่องรอยการเรียกคืน เนื้อหาส่วนบุคคลและละเอียดอ่อนจะถูกปกปิดก่อนนำเข้า
ไดอารี่ความฝัน
Dreaming ยังเก็บ ไดอารี่ความฝัน แบบเล่าเรื่องไว้ใน DREAMS.md หลังจากแต่ละระยะมีเนื้อหาเพียงพอ memory-core จะรันเทิร์น subagent พื้นหลังแบบพยายามอย่างดีที่สุดและเพิ่มรายการไดอารี่สั้น ๆ โดยใช้โมเดลรันไทม์เริ่มต้น เว้นแต่กำหนดค่า dreaming.model ไว้ หากโมเดลที่กำหนดค่าไม่พร้อมใช้งาน ไดอารี่ความฝันจะลองอีกครั้งหนึ่งด้วยโมเดลเริ่มต้นของเซสชัน
ยังมีเลนเติมย้อนหลังตามหลักฐานสำหรับงานตรวจทานและกู้คืน:
คำสั่งเติมย้อนหลัง
memory rem-harness --path ... --groundedแสดงตัวอย่างเอาต์พุตไดอารี่ตามหลักฐานจากบันทึกย้อนหลังYYYY-MM-DD.mdmemory rem-backfill --path ...เขียนรายการไดอารี่ตามหลักฐานที่ย้อนกลับได้ลงในDREAMS.mdmemory rem-backfill --path ... --stage-short-termเตรียมผู้สมัครแบบถาวรที่มีหลักฐานเข้าสู่ที่เก็บหลักฐานระยะสั้นเดียวกับที่ระยะ Deep ปกติใช้อยู่แล้วmemory rem-backfill --rollbackและ--rollback-short-termนำอาร์ทิแฟกต์เติมย้อนหลังที่เตรียมไว้ออกโดยไม่แตะรายการไดอารี่ทั่วไปหรือการเรียกคืนระยะสั้นสด
Control UI เปิดเผยโฟลว์เติมย้อนหลัง/รีเซ็ตไดอารี่เดียวกัน เพื่อให้คุณตรวจสอบผลลัพธ์ในซีนความฝันก่อนตัดสินใจว่าผู้สมัครที่มีหลักฐานควรได้รับการเลื่อนชั้นหรือไม่ ซีนยังแสดงเลนตามหลักฐานที่แยกชัดเจน เพื่อให้คุณเห็นว่ารายการระยะสั้นที่เตรียมไว้รายการใดมาจากการเล่นซ้ำย้อนหลัง รายการที่เลื่อนชั้นรายการใดนำโดยหลักฐาน และล้างเฉพาะรายการที่เตรียมไว้ซึ่งเป็นแบบมีหลักฐานเท่านั้นโดยไม่แตะสถานะระยะสั้นสดทั่วไป
สัญญาณการจัดอันดับ Deep
การจัดอันดับ Deep ใช้สัญญาณฐานแบบถ่วงน้ำหนักหกรายการบวกการเสริมแรงของระยะ:
| สัญญาณ | น้ำหนัก | คำอธิบาย |
|---|---|---|
| ความถี่ | 0.24 | จำนวนสัญญาณระยะสั้นที่รายการสะสมไว้ |
| ความเกี่ยวข้อง | 0.30 | คุณภาพการดึงคืนโดยเฉลี่ยของรายการ |
| ความหลากหลายของคำค้น | 0.15 | บริบทคำค้น/วันที่แตกต่างกันที่ทำให้รายการปรากฏ |
| ความใหม่ | 0.15 | คะแนนความสดใหม่ที่ลดค่าตามเวลา |
| การรวมความจำ | 0.10 | ความแรงของการเกิดซ้ำหลายวัน |
| ความมั่งคั่งเชิงแนวคิด | 0.06 | ความหนาแน่นของแท็กแนวคิดจากสแนปเพ็ต/พาธ |
การพบในระยะ Light และ REM เพิ่มบูสต์เล็กน้อยที่ลดค่าตามความใหม่จาก memory/.dreams/phase-signals.json
ผลลัพธ์ shadow trial สามารถวางทับบนคะแนนฐานนั้นเป็นสัญญาณตรวจทาน
ก่อนการเขียนแบบถาวรใด ๆ การทดลองที่มีประโยชน์ให้บูสต์เล็กน้อย
แบบมีขอบเขตแก่ผู้สมัคร การทดลองที่เป็นกลางจะคงไว้ให้รอก่อน และการทดลองที่เป็นอันตรายจะทำเครื่องหมายว่า
ถูกปฏิเสธสำหรับรอบการให้คะแนนนั้น สัญญาณนี้ยังคงเป็นแบบรายงานเท่านั้น: สามารถ
เปลี่ยนลำดับผู้สมัครหรือเมตาดาต้าการตรวจทานได้ แต่จะไม่เขียนไปยัง
MEMORY.md หรือเลื่อนชั้นผู้สมัครด้วยตัวเอง
ความครอบคลุมรายงาน shadow trial ของ QA
QA Lab มีสถานการณ์แบบรายงานเท่านั้นสำหรับสำรวจว่า shadow trial ของ Dreaming ในอนาคตอาจตรวจทานหน่วยความจำผู้สมัครก่อนเลื่อนชั้นอย่างไร สถานการณ์จะขอให้ เอเจนต์เปรียบเทียบคำตอบฐานกับคำตอบที่สามารถใช้หน่วยความจำผู้สมัคร แล้วเขียนรายงานภายในเครื่องพร้อมคำตัดสิน เหตุผล และแฟล็กความเสี่ยง
ความครอบคลุมนี้ตั้งใจจำกัดไว้ที่ QA โดยตรวจสอบว่าอาร์ทิแฟกต์รายงาน
แยกจาก MEMORY.md และเอเจนต์ไม่อ้างว่าผู้สมัคร
ถูกเลื่อนชั้นแล้ว สิ่งนี้ไม่ได้เพิ่มพฤติกรรม shadow-trial ในโปรดักชันหรือเปลี่ยน
เอนจินการเลื่อนชั้นระยะ Deep
ตัวรัน shadow-trial ของ memory-core คงสัญญาแบบรายงานเท่านั้นเดียวกันนั้นไว้สำหรับ
พาธโค้ดที่ต้องการอาร์ทิแฟกต์ที่เสถียร โดยรับผู้สมัคร พรอมป์ทดลอง
ผลลัพธ์ฐาน ผลลัพธ์ผู้สมัคร คำตัดสิน เหตุผล แฟล็กความเสี่ยง และการอ้างอิง
หลักฐาน จากนั้นเขียนรายงานด้วย promotion action: report-only คำตัดสินที่มีประโยชน์
แมปเป็นคำแนะนำ promote คำตัดสินที่เป็นกลางแมปเป็น defer และ
คำตัดสินที่เป็นอันตรายแมปเป็น reject; ไม่มีคำแนะนำใดเขียนไปยัง
MEMORY.md หรือใช้การเลื่อนชั้นระยะ Deep
การจัดกำหนดการ
เมื่อเปิดใช้ memory-core จะจัดการงาน Cron หนึ่งงานโดยอัตโนมัติสำหรับการกวาด Dreaming เต็มรูปแบบ การกวาดแต่ละครั้งรันระยะตามลำดับ: light → REM → deep
การกวาดรวมเวิร์กสเปซรันไทม์หลักและเวิร์กสเปซเอเจนต์ที่กำหนดค่าไว้ โดยตัดรายการซ้ำตามพาธ เพื่อให้การกระจายเวิร์กสเปซของ subagent ไม่ตัด DREAMS.md และสถานะหน่วยความจำของเอเจนต์หลักออก
พฤติกรรมจังหวะเริ่มต้น:
| การตั้งค่า | ค่าเริ่มต้น |
|---|---|
dreaming.frequency |
0 3 * * * |
dreaming.model |
โมเดลเริ่มต้น |
เริ่มต้นอย่างรวดเร็ว
เปิดใช้ Dreaming
{ "plugins": { "entries": { "memory-core": { "config": { "dreaming": { "enabled": true } } } } }}จังหวะการกวาดแบบกำหนดเอง
{ "plugins": { "entries": { "memory-core": { "config": { "dreaming": { "enabled": true, "timezone": "America/Los_Angeles", "frequency": "0 */6 * * *" } } } } }}คำสั่งสแลช
/dreaming status/dreaming on/dreaming off/dreaming help/dreaming on และ /dreaming off เปลี่ยนการกำหนดค่าทั่วทั้ง Gateway ผู้เรียกผ่านช่องทาง
ต้องเป็นเจ้าของ และไคลเอนต์ Gateway ต้องมี operator.admin
/dreaming status และ /dreaming help ยังคงเป็นแบบอ่านอย่างเดียว
เวิร์กโฟลว์ CLI
แสดงตัวอย่าง / ใช้การเลื่อนชั้น
openclaw memory promoteopenclaw memory promote --applyopenclaw memory promote --limit 5openclaw memory status --deepmemory promote แบบแมนนวลใช้เกณฑ์ระยะ Deep เป็นค่าเริ่มต้น เว้นแต่ถูกเขียนทับด้วยแฟล็ก CLI
อธิบายการเลื่อนชั้น
อธิบายว่าทำไมผู้สมัครเฉพาะรายจึงจะเลื่อนชั้นหรือไม่เลื่อนชั้น:
openclaw memory promote-explain "router vlan"openclaw memory promote-explain "router vlan" --jsonตัวอย่างฮาร์เนส REM
แสดงตัวอย่างการสะท้อน REM ความจริงของผู้สมัคร และเอาต์พุตการเลื่อนชั้น Deep โดยไม่เขียนสิ่งใด:
openclaw memory rem-harnessopenclaw memory rem-harness --jsonค่าเริ่มต้นสำคัญ
การตั้งค่าทั้งหมดอยู่ภายใต้ plugins.entries.memory-core.config.dreaming
enabledbooleandefault: falseเปิดหรือปิดการกวาด Dreaming
frequencystringdefault: 0 3 * * *จังหวะ Cron สำหรับการกวาด Dreaming เต็มรูปแบบ
modelstringการเขียนทับโมเดล subagent ของไดอารี่ความฝันแบบเลือกได้ ใช้ค่า provider/model แบบบัญญัติเมื่อกำหนด allowlist ของ subagent allowedModels ด้วย
phases.deep.maxPromotedSnippetTokensnumberdefault: 160จำนวนโทเค็นโดยประมาณสูงสุดที่เก็บจากแต่ละสแนปเพ็ตการเรียกคืนระยะสั้นที่เลื่อนชั้นเข้าสู่ MEMORY.md ที่มาของการจัดอันดับยังคงมองเห็นได้
UI ความฝัน
เมื่อเปิดใช้ แท็บ ความฝัน ของ Gateway จะแสดง:
- สถานะเปิดใช้ Dreaming ปัจจุบัน
- สถานะระดับระยะและการมีอยู่ของการกวาดที่มีการจัดการ
- จำนวนระยะสั้น แบบมีหลักฐาน สัญญาณ และที่เลื่อนชั้นวันนี้
- เวลารันตามกำหนดการครั้งถัดไป
- เลนซีนแบบมีหลักฐานที่แยกชัดเจนสำหรับรายการเล่นซ้ำย้อนหลังที่เตรียมไว้
- ตัวอ่านไดอารี่ความฝันแบบขยายได้ที่รองรับโดย
doctor.memory.dreamDiary
Dreaming ไม่เคยรัน: สถานะแสดงว่าถูกบล็อก
หาก openclaw memory status รายงาน Dreaming status: blocked แสดงว่า Cron ที่มีการจัดการมีอยู่ แต่ Heartbeat ของเอเจนต์เริ่มต้นไม่ทำงาน ตรวจสอบว่า Heartbeat เปิดใช้สำหรับเอเจนต์เริ่มต้นและเป้าหมายไม่ใช่ none จากนั้นรัน openclaw memory status --deep อีกครั้งหลังช่วง Heartbeat ถัดไป