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 phase

เฟส Light นำเข้าสัญญาณความจำรายวันล่าสุดและร่องรอยการเรียกคืน ขจัดข้อมูลซ้ำ และเตรียมบรรทัดตัวเลือก

  • อ่านจากสถานะการเรียกคืนระยะสั้น, ไฟล์ความจำรายวันล่าสุด, และทรานสคริปต์เซสชันที่ปกปิดข้อมูลแล้วเมื่อมี
  • เขียนบล็อก ## Light Sleep ที่มีการจัดการเมื่อพื้นที่จัดเก็บรวมเอาต์พุตแบบอินไลน์
  • บันทึกสัญญาณเสริมแรงสำหรับการจัดอันดับ Deep ภายหลัง
  • ไม่เขียนไปยัง MEMORY.md
Deep phase

เฟส Deep ตัดสินว่าสิ่งใดจะกลายเป็นความจำระยะยาว

  • จัดอันดับตัวเลือกโดยใช้การให้คะแนนแบบถ่วงน้ำหนักและเกณฑ์ผ่าน
  • ต้องผ่าน minScore, minRecallCount, และ minUniqueQueries
  • เติมข้อมูลส่วนย่อยกลับจากไฟล์รายวันสดก่อนเขียน เพื่อข้ามส่วนย่อยที่ล้าสมัยหรือถูกลบ
  • เพิ่มรายการที่เลื่อนขั้นแล้วไปยัง MEMORY.md
  • เขียนสรุป ## Deep Sleep ลงใน DREAMS.md และอาจเขียน memory/dreaming/deep/YYYY-MM-DD.md
REM phase

เฟส REM แยกรูปแบบและสัญญาณเชิงสะท้อน

  • สร้างสรุปธีมและการสะท้อนจากร่องรอยระยะสั้นล่าสุด
  • เขียนบล็อก ## REM Sleep ที่มีการจัดการเมื่อพื้นที่จัดเก็บรวมเอาต์พุตแบบอินไลน์
  • บันทึกสัญญาณเสริมแรง REM ที่ใช้โดยการจัดอันดับ Deep
  • ไม่เขียนไปยัง MEMORY.md

การนำเข้าทรานสคริปต์เซสชัน

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

Dream Diary

Dreaming ยังเก็บ Dream Diary แบบบรรยายไว้ใน DREAMS.md ด้วย หลังจากแต่ละเฟสมีเนื้อหาเพียงพอ memory-core จะรันรอบ subagent เบื้องหลังแบบพยายามให้ดีที่สุด และเพิ่มรายการไดอารีสั้น ๆ ระบบใช้โมเดลรันไทม์เริ่มต้น เว้นแต่จะกำหนดค่า dreaming.model หากโมเดลที่กำหนดค่าไว้ใช้งานไม่ได้ Dream Diary จะลองใหม่หนึ่งครั้งด้วยโมเดลเริ่มต้นของเซสชัน

ยังมีเลนเติมข้อมูลย้อนหลังที่มีหลักฐานรองรับสำหรับงานตรวจทานและกู้คืน:

Backfill commands
  • memory rem-harness --path ... --grounded แสดงตัวอย่างเอาต์พุตไดอารีที่มีหลักฐานรองรับจากโน้ต YYYY-MM-DD.md ในอดีต
  • memory rem-backfill --path ... เขียนรายการไดอารีที่มีหลักฐานรองรับและย้อนกลับได้ลงใน DREAMS.md
  • memory rem-backfill --path ... --stage-short-term เตรียมตัวเลือกที่คงทนและมีหลักฐานรองรับเข้าสู่ที่เก็บหลักฐานระยะสั้นเดียวกับที่เฟส Deep ปกติใช้อยู่แล้ว
  • memory rem-backfill --rollback และ --rollback-short-term ลบอาร์ติแฟกต์ backfill ที่เตรียมไว้เหล่านั้นโดยไม่แตะรายการไดอารีปกติหรือการเรียกคืนระยะสั้นสด

Control UI เปิดเผยโฟลว์ backfill/reset ของไดอารีแบบเดียวกัน เพื่อให้คุณตรวจสอบผลลัพธ์ในฉาก Dreams ก่อนตัดสินใจว่าตัวเลือกที่มีหลักฐานรองรับสมควรได้รับการเลื่อนขั้นหรือไม่ Scene ยังแสดงเลนที่มีหลักฐานรองรับแยกต่างหาก เพื่อให้คุณเห็นว่ารายการระยะสั้นที่เตรียมไว้ใดมาจากการเล่นซ้ำประวัติ รายการที่เลื่อนขั้นใดนำโดยหลักฐานรองรับ และล้างเฉพาะรายการที่เตรียมไว้แบบมีหลักฐานรองรับเท่านั้นโดยไม่แตะสถานะระยะสั้นสดปกติ

สัญญาณการจัดอันดับ Deep

การจัดอันดับ Deep ใช้สัญญาณฐานถ่วงน้ำหนักหกชนิดพร้อมการเสริมแรงตามเฟส:

สัญญาณ น้ำหนัก คำอธิบาย
ความถี่ 0.24 จำนวนสัญญาณระยะสั้นที่รายการสะสมได้
ความเกี่ยวข้อง 0.30 คุณภาพการดึงข้อมูลเฉลี่ยสำหรับรายการ
ความหลากหลายของคำค้น 0.15 บริบทคำค้น/วันที่แตกต่างกันที่ทำให้รายการปรากฏ
ความใหม่ 0.15 คะแนนความสดใหม่ที่ลดค่าตามเวลา
การรวมความจำ 0.10 ความแข็งแรงของการเกิดซ้ำหลายวัน
ความสมบูรณ์เชิงแนวคิด 0.06 ความหนาแน่นของแท็กแนวคิดจากส่วนย่อย/พาธ

การพบในเฟส Light และ REM จะเพิ่มบูสต์เล็กน้อยที่ลดค่าตามความใหม่จาก memory/.dreams/phase-signals.json

การกำหนดเวลา

เมื่อเปิดใช้งาน memory-core จะจัดการงาน cron หนึ่งงานโดยอัตโนมัติสำหรับการกวาด Dreaming แบบเต็ม แต่ละการกวาดจะรันเฟสตามลำดับ: light → REM → deep

การกวาดรวม workspace รันไทม์หลักและ agent workspaces ที่กำหนดค่าไว้ โดยขจัดรายการซ้ำตามพาธ ดังนั้นการกระจาย workspace ของ subagent จะไม่ตัด DREAMS.md และสถานะความจำของ agent หลักออก

พฤติกรรมจังหวะเริ่มต้น:

การตั้งค่า ค่าเริ่มต้น
dreaming.frequency 0 3 * * *
dreaming.model โมเดลเริ่มต้น

เริ่มต้นอย่างรวดเร็ว

Enable dreaming

{
  "plugins": {
    "entries": {
      "memory-core": {
        "config": {
          "dreaming": {
            "enabled": true
          }
        }
      }
    }
  }
}

Custom sweep cadence

{
  "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

Promotion preview / apply

openclaw memory promote
openclaw memory promote --apply
openclaw memory promote --limit 5
openclaw memory status --deep

memory promote แบบแมนนวลใช้เกณฑ์ของเฟส Deep โดยค่าเริ่มต้น เว้นแต่จะถูกแทนที่ด้วยแฟล็ก CLI

Explain promotion

อธิบายว่าเหตุใดตัวเลือกเฉพาะจึงจะได้รับหรือไม่ได้รับการเลื่อนขั้น:

openclaw memory promote-explain "router vlan"
openclaw memory promote-explain "router vlan" --json

REM harness preview

แสดงตัวอย่างการสะท้อน REM, candidate truths, และเอาต์พุตการเลื่อนขั้น Deep โดยไม่เขียนสิ่งใด:

openclaw memory rem-harness
openclaw memory rem-harness --json

ค่าเริ่มต้นสำคัญ

การตั้งค่าทั้งหมดอยู่ภายใต้ plugins.entries.memory-core.config.dreaming

enabledboolean

เปิดหรือปิดการกวาด Dreaming

frequencystring

จังหวะ Cron สำหรับการกวาด Dreaming แบบเต็ม

modelstring

การแทนที่โมเดล subagent ของ Dream Diary แบบเสริม ใช้ค่า provider/model มาตรฐานเมื่อกำหนดรายการอนุญาต allowedModels ของ subagent ด้วย

UI Dreams

เมื่อเปิดใช้งาน แท็บ Dreams ของ Gateway จะแสดง:

  • สถานะเปิดใช้งาน Dreaming ปัจจุบัน
  • สถานะระดับเฟสและการมีอยู่ของ managed-sweep
  • จำนวนระยะสั้น, มีหลักฐานรองรับ, สัญญาณ, และที่เลื่อนขั้นวันนี้
  • เวลาของการรันตามกำหนดครั้งถัดไป
  • เลน Scene ที่มีหลักฐานรองรับแยกต่างหากสำหรับรายการ replay ประวัติที่เตรียมไว้
  • ตัวอ่าน Dream Diary ที่ขยายได้ ซึ่งรองรับโดย doctor.memory.dreamDiary

Dreaming ไม่เคยรัน: สถานะแสดงว่าถูกบล็อก

หาก openclaw memory status รายงาน Dreaming status: blocked แสดงว่า cron ที่มีการจัดการมีอยู่ แต่ Heartbeat ของ agent เริ่มต้นไม่ทำงาน ตรวจสอบว่าเปิดใช้งาน Heartbeat สำหรับ agent เริ่มต้นแล้ว และ target ไม่ใช่ none จากนั้นรัน openclaw memory status --deep อีกครั้งหลังช่วง Heartbeat ถัดไป

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