ข้ามไปยังเนื้อหา

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

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

ปิดใช้งานโดยค่าเริ่มต้น เปิดใช้งานผ่าน /settings หรือ config.yml:

memories:
enabled: true

เมื่อเริ่มเซสชัน หากมีสรุปหน่วยความจำสำหรับโปรเจกต์ปัจจุบัน ระบบจะแทรกเข้าใน system prompt เป็นบล็อก Memory Guidance เอเจนต์จะได้รับคำสั่งให้:

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

เอเจนต์สามารถอ่านไฟล์หน่วยความจำได้โดยตรงโดยใช้ URL memory:// กับเครื่องมือ read:

URLเนื้อหา
memory://rootสรุปแบบกระชับที่แทรกเมื่อเริ่มต้น
memory://root/MEMORY.mdเอกสารหน่วยความจำระยะยาวฉบับเต็ม
memory://root/skills/<name>/SKILL.mdplaybook ทักษะที่สร้างขึ้น
คำสั่งย่อยผลลัพธ์
viewแสดง payload ของหน่วยความจำที่แทรกในปัจจุบัน
clear / resetลบข้อมูลหน่วยความจำทั้งหมดและ artifacts ที่สร้างขึ้น
enqueue / rebuildบังคับให้การรวมรวมทำงานในการเริ่มต้นครั้งถัดไป

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

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

เฟส 2 — การรวมรวม: หลังจากการดึงข้อมูล โมเดลจะทำการประมวลผลครั้งที่สองโดยอ่านข้อมูลที่ดึงจากทุกเซสชันและสร้างผลลัพธ์สามรายการที่เขียนลงดิสก์:

  • MEMORY.md — เอกสารหน่วยความจำระยะยาวที่ผ่านการคัดสรร
  • memory_summary.md — ข้อความกระชับที่แทรกเมื่อเริ่มเซสชัน
  • skills/ — playbook เชิงกระบวนการที่ใช้ซ้ำได้ แต่ละรายการอยู่ในไดเรกทอรีย่อยของตัวเอง

เฟส 2 ใช้ lease เพื่อป้องกันการทำงานซ้ำเมื่อหลายกระบวนการเริ่มต้นพร้อมกัน ไดเรกทอรีทักษะที่ล้าสมัยจากการทำงานก่อนหน้าจะถูกตัดออกโดยอัตโนมัติ

ผลลัพธ์ทั้งหมดจะถูกสแกนหาข้อมูลลับก่อนเขียนลงดิสก์

พฤติกรรมการดึงข้อมูลหน่วยความจำและการรวมรวมถูกขับเคลื่อนทั้งหมดโดยไฟล์ prompt แบบคงที่ใน src/prompts/memories/

ไฟล์วัตถุประสงค์ตัวแปร
stage_one_system.mdSystem prompt สำหรับการดึงข้อมูลต่อเซสชัน
stage_one_input.mdเทมเพลต user-turn ที่ครอบเนื้อหาเซสชัน{{thread_id}}, {{response_items_json}}
consolidation.mdPrompt สำหรับการรวมรวมข้ามเซสชัน{{raw_memories}}, {{rollout_summaries}}
read_path.mdMemory guidance ที่แทรกเข้าในเซสชันที่กำลังทำงาน{{memory_summary}}

หน่วยความจำใช้ระบบ model role

เฟสบทบาทวัตถุประสงค์
เฟส 1 (การดึงข้อมูล)defaultการดึงความรู้ต่อเซสชัน
เฟส 2 (การรวมรวม)smolการสังเคราะห์ข้ามเซสชัน

หาก smol ไม่ได้ถูกกำหนดค่า เฟส 2 จะ fallback ไปใช้บทบาท default

การตั้งค่าค่าเริ่มต้นคำอธิบาย
memories.enabledfalseสวิตช์หลัก
memories.maxRolloutAgeDays30เซสชันที่เก่ากว่านี้จะไม่ถูกประมวลผล
memories.minRolloutIdleHours12เซสชันที่ใช้งานล่าสุดกว่านี้จะถูกข้าม
memories.maxRolloutsPerStartup64จำนวนสูงสุดของเซสชันที่ประมวลผลในการเริ่มต้นครั้งเดียว
memories.summaryInjectionTokenLimit5000จำนวน token สูงสุดของสรุปที่แทรกเข้าใน system prompt

ตัวปรับค่าเพิ่มเติม (concurrency, ระยะเวลา lease, token budgets) มีอยู่ใน config สำหรับการใช้งานขั้นสูง

  • src/memories/index.ts — การจัดการไปป์ไลน์ การแทรก การจัดการคำสั่ง slash
  • src/memories/storage.ts — คิวงานและ thread registry ที่ใช้ SQLite เป็นฐาน
  • src/prompts/memories/ — เทมเพลต prompt ของหน่วยความจำ
  • src/internal-urls/memory-protocol.ts — ตัวจัดการ URL memory://