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 จะรันเทิร์นซับเอเจนต์เบื้องหลังแบบพยายามเต็มที่และต่อท้ายรายการบันทึกสั้น ๆ ระบบใช้โมเดลรันไทม์ค่าเริ่มต้น เว้นแต่จะกำหนดค่า 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 เปิดเผยโฟลว์เติมข้อมูลย้อนหลัง/รีเซ็ตบันทึกแบบเดียวกัน เพื่อให้คุณตรวจสอบผลลัพธ์ในฉาก Dreams ก่อนตัดสินใจว่าตัวเลือกที่มีหลักฐานรองรับสมควรได้รับการเลื่อนชั้นหรือไม่ ฉากยังแสดงเลนที่มีหลักฐานรองรับแยกต่างหาก เพื่อให้คุณเห็นว่ารายการระยะสั้นที่เตรียมไว้รายการใดมาจากการเล่นซ้ำย้อนหลัง รายการที่เลื่อนชั้นรายการใดนำโดยหลักฐาน และล้างเฉพาะรายการที่เตรียมไว้ซึ่งมีแต่หลักฐานย้อนหลังโดยไม่แตะสถานะระยะสั้นที่ใช้งานอยู่ตามปกติ
สัญญาณการจัดอันดับ Deep
การจัดอันดับ Deep ใช้สัญญาณฐานแบบถ่วงน้ำหนักหกชนิดพร้อมการเสริมแรงจากเฟส:
| สัญญาณ | น้ำหนัก | คำอธิบาย |
|---|---|---|
| ความถี่ | 0.24 | จำนวนสัญญาณระยะสั้นที่รายการสะสมไว้ |
| ความเกี่ยวข้อง | 0.30 | คุณภาพการดึงคืนโดยเฉลี่ยของรายการ |
| ความหลากหลายของคำค้น | 0.15 | บริบทคำค้น/วันที่แตกต่างกันที่ทำให้รายการปรากฏ |
| ความใหม่ | 0.15 | คะแนนความสดใหม่ที่ลดลงตามเวลา |
| การรวบรวมความจำ | 0.10 | ความแข็งแรงของการเกิดซ้ำหลายวัน |
| ความลุ่มลึกเชิงแนวคิด | 0.06 | ความหนาแน่นของแท็กแนวคิดจากสนิปเป็ต/พาธ |
การถูกพบในเฟส Light และ REM จะเพิ่มบูสต์เล็กน้อยที่ลดลงตามความใหม่จาก memory/.dreams/phase-signals.json
ผลลัพธ์การทดลองเงาสามารถวางซ้อนบนคะแนนฐานนั้นเป็นสัญญาณตรวจทาน
ก่อนการเขียนแบบคงทนใด ๆ การทดลองที่เป็นประโยชน์จะให้บูสต์ขนาดเล็ก
ที่มีขอบเขตแก่ตัวเลือก การทดลองที่เป็นกลางจะปล่อยให้เลื่อนออกไป และการทดลองที่เป็นอันตรายจะทำเครื่องหมายว่า
ถูกปฏิเสธสำหรับรอบการให้คะแนนนั้น สัญญาณนี้ยังคงเป็นแบบรายงานเท่านั้น: สามารถ
เปลี่ยนลำดับตัวเลือกหรือเมตาดาต้าการตรวจทานได้ แต่ไม่ได้เขียนไปที่
MEMORY.md หรือเลื่อนชั้นตัวเลือกด้วยตัวเอง
ความครอบคลุมของรายงานการทดลองเงา QA
QA Lab มีสถานการณ์แบบรายงานเท่านั้นสำหรับสำรวจว่า การทดลองเงาของ Dreaming ในอนาคตจะตรวจทานความจำตัวเลือกก่อนการเลื่อนชั้นได้อย่างไร สถานการณ์นี้ขอให้ เอเจนต์เปรียบเทียบคำตอบพื้นฐานกับคำตอบที่สามารถใช้ความจำตัวเลือกได้ จากนั้นเขียนรายงานภายในเครื่องพร้อมคำตัดสิน เหตุผล และแฟล็กความเสี่ยง
ความครอบคลุมนี้ตั้งใจจำกัดไว้เฉพาะ QA โดยตรวจสอบว่าอาร์ติแฟกต์รายงาน
ยังแยกจาก MEMORY.md และเอเจนต์ไม่อ้างว่าตัวเลือก
ถูกเลื่อนชั้นแล้ว สิ่งนี้ไม่ได้เพิ่มพฤติกรรมการทดลองเงาในโปรดักชันหรือเปลี่ยน
เอนจินการเลื่อนชั้นของเฟส Deep
ตัวรันการทดลองเงาของ memory-core คงสัญญาแบบรายงานเท่านั้นเดียวกันไว้สำหรับ
พาธโค้ดที่ต้องการอาร์ติแฟกต์ที่เสถียร โดยรับตัวเลือก พรอมป์ทดลอง
ผลลัพธ์พื้นฐาน ผลลัพธ์ตัวเลือก คำตัดสิน เหตุผล แฟล็กความเสี่ยง และการอ้างอิง
หลักฐาน จากนั้นเขียนรายงานพร้อม promotion action: report-only คำตัดสินที่เป็นประโยชน์
แมปไปยังคำแนะนำ promote คำตัดสินที่เป็นกลางแมปไปยัง defer และ
คำตัดสินที่เป็นอันตรายแมปไปยัง reject; ไม่มีคำแนะนำใดเขียนไปที่
MEMORY.md หรือใช้การเลื่อนชั้นของเฟส Deep
การจัดกำหนดการ
เมื่อเปิดใช้ memory-core จะจัดการงาน Cron หนึ่งงานโดยอัตโนมัติสำหรับการกวาด Dreaming แบบเต็ม การกวาดแต่ละครั้งรันเฟสตามลำดับ: Light → REM → Deep
การกวาดรวมเวิร์กสเปซรันไทม์หลักและเวิร์กสเปซเอเจนต์ที่กำหนดค่าไว้ใด ๆ โดยลบซ้ำตามพาธ ดังนั้นการกระจายเวิร์กสเปซของซับเอเจนต์จะไม่ทำให้ 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 * * *" } } } } }}คำสั่ง Slash
/dreaming status/dreaming on/dreaming off/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การแทนที่โมเดลซับเอเจนต์บันทึกความฝันแบบไม่บังคับ ใช้ค่า provider/model แบบแคนนอนิคัลเมื่อตั้งค่ารายการอนุญาต allowedModels ของซับเอเจนต์ด้วย
phases.deep.maxPromotedSnippetTokensnumberdefault: 160จำนวนโทเค็นโดยประมาณสูงสุดที่เก็บจากสนิปเป็ตการเรียกคืนระยะสั้นแต่ละรายการที่เลื่อนชั้นเข้าสู่ MEMORY.md ที่มาของการจัดอันดับยังคงมองเห็นได้
UI Dreams
เมื่อเปิดใช้ แท็บ Dreams ของ Gateway จะแสดง:
- สถานะเปิดใช้ Dreaming ปัจจุบัน
- สถานะระดับเฟสและการมีอยู่ของการกวาดที่จัดการไว้
- จำนวนระยะสั้น มีหลักฐานรองรับ สัญญาณ และที่เลื่อนชั้นวันนี้
- เวลาการรันที่จัดกำหนดการครั้งถัดไป
- เลนฉากที่มีหลักฐานรองรับแยกต่างหากสำหรับรายการเล่นซ้ำย้อนหลังที่เตรียมไว้
- ตัวอ่านบันทึกความฝันแบบขยายได้ที่รองรับโดย
doctor.memory.dreamDiary
Dreaming ไม่เคยรัน: สถานะแสดงว่าถูกบล็อก
หาก openclaw memory status รายงาน Dreaming status: blocked แสดงว่า Cron ที่จัดการไว้มีอยู่ แต่ Heartbeat ของเอเจนต์ค่าเริ่มต้นไม่ได้ทำงาน ตรวจสอบว่า Heartbeat เปิดใช้งานสำหรับเอเจนต์ค่าเริ่มต้นและเป้าหมายไม่ใช่ none จากนั้นรัน openclaw memory status --deep อีกครั้งหลังจากช่วง Heartbeat ถัดไป