ทุกโมเดลมีหน้าต่างบริบท: จำนวนโทเค็นสูงสุดที่โมเดลสามารถประมวลผลได้ เมื่อบทสนทนาเข้าใกล้ขีดจำกัดนั้น OpenClaw จะ compact ข้อความเก่าให้เป็นสรุป เพื่อให้แชตดำเนินต่อได้Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
วิธีทำงาน
- เทิร์นบทสนทนาเก่าจะถูกสรุปเป็นรายการแบบ compact
- สรุปจะถูกบันทึกไว้ในทรานสคริปต์ของเซสชัน
- ข้อความล่าสุดจะถูกเก็บไว้ครบถ้วน
toolResult ที่ตรงกัน หากจุดแบ่งตกอยู่ภายในบล็อกเครื่องมือ OpenClaw จะเลื่อนขอบเขตเพื่อให้คู่อยู่ด้วยกัน และรักษาส่วนท้ายปัจจุบันที่ยังไม่ถูกสรุปไว้
ประวัติบทสนทนาทั้งหมดยังคงอยู่บนดิสก์ Compaction เปลี่ยนเฉพาะสิ่งที่โมเดลเห็นในเทิร์นถัดไป
Auto-compaction
Auto-compaction เปิดใช้งานโดยค่าเริ่มต้น ระบบจะทำงานเมื่อเซสชันเข้าใกล้ขีดจำกัดบริบท หรือเมื่อโมเดลส่งคืนข้อผิดพลาด context-overflow ซึ่งในกรณีนั้น OpenClaw จะ compact แล้วลองใหม่ คุณจะเห็น:embedded run auto-compaction start/completeในบันทึก Gateway ปกติ🧹 Auto-compaction completeในโหมด verbose/statusแสดง🧹 Compactions: <count>
ก่อน compact OpenClaw จะเตือนเอเจนต์โดยอัตโนมัติให้บันทึกโน้ตสำคัญลงในไฟล์ memory วิธีนี้ช่วยป้องกันการสูญเสียบริบท
ลายเซ็น overflow ที่รู้จัก
ลายเซ็น overflow ที่รู้จัก
OpenClaw ตรวจจับ context overflow จากรูปแบบข้อผิดพลาดของผู้ให้บริการเหล่านี้:
request_too_largecontext length exceededinput exceeds the maximum number of tokensinput token count exceeds the maximum number of input tokensinput is too long for the modelollama error: context length exceeded
การ compact ด้วยตนเอง
พิมพ์/compact ในแชตใดก็ได้เพื่อบังคับ compaction เพิ่มคำสั่งเพื่อกำหนดแนวทางสรุป:
agents.defaults.compaction.keepRecentTokens แล้ว manual compaction จะเคารพจุดตัด Pi นั้นและเก็บส่วนท้ายล่าสุดไว้ในบริบทที่สร้างใหม่ หากไม่มีงบประมาณ keep ที่ชัดเจน manual compaction จะทำงานเหมือน checkpoint แบบแข็ง และดำเนินต่อจากสรุปใหม่เพียงอย่างเดียว
การกำหนดค่า
กำหนดค่า compaction ภายใต้agents.defaults.compaction ใน openclaw.json ของคุณ ตัวปรับที่ใช้บ่อยที่สุดแสดงไว้ด้านล่าง สำหรับข้อมูลอ้างอิงฉบับเต็ม โปรดดู เจาะลึกการจัดการเซสชัน
การใช้โมเดลอื่น
โดยค่าเริ่มต้น compaction ใช้โมเดลหลักของเอเจนต์ ตั้งค่าagents.defaults.compaction.model เพื่อมอบหมายการสรุปให้โมเดลที่มีความสามารถมากกว่าหรือเฉพาะทางกว่า ค่า override รับสตริง provider/model-id ใดก็ได้:
agents.defaults.compaction.model ที่ชัดเจนยังคงตรงตัวและไม่สืบทอดสาย fallback ของเซสชัน
การรักษาตัวระบุ
การสรุป compaction จะรักษาตัวระบุทึบแสงไว้โดยค่าเริ่มต้น (identifierPolicy: "strict") Override ด้วย identifierPolicy: "off" เพื่อปิดใช้งาน หรือ identifierPolicy: "custom" พร้อม identifierInstructions สำหรับคำแนะนำที่กำหนดเอง
ตัวป้องกันไบต์ของทรานสคริปต์ที่ใช้งานอยู่
เมื่อตั้งค่าagents.defaults.compaction.maxActiveTranscriptBytes แล้ว OpenClaw จะทริกเกอร์ compaction ภายในเครื่องแบบปกติก่อนรัน หาก JSONL ที่ใช้งานอยู่ถึงขนาดนั้น สิ่งนี้มีประโยชน์สำหรับเซสชันที่ทำงานยาวนาน ซึ่งการจัดการบริบทฝั่งผู้ให้บริการอาจทำให้บริบทโมเดลยังสมบูรณ์อยู่ ขณะที่ทรานสคริปต์ภายในเครื่องยังคงโตขึ้นเรื่อยๆ ระบบไม่ได้แบ่งไบต์ JSONL ดิบ แต่ขอให้ pipeline compaction ปกติสร้างสรุปเชิงความหมาย
ทรานสคริปต์ successor
เมื่อเปิดใช้งานagents.defaults.compaction.truncateAfterCompaction OpenClaw จะไม่เขียนทับทรานสคริปต์เดิมแบบ in place แต่จะสร้างทรานสคริปต์ successor ที่ใช้งานอยู่ใหม่จากสรุป compaction สถานะที่เก็บรักษาไว้ และส่วนท้ายที่ยังไม่ถูกสรุป จากนั้นเก็บ JSONL ก่อนหน้าไว้เป็นแหล่ง checkpoint ที่ถูกเก็บถาวร
ทรานสคริปต์ successor ยังทิ้งเทิร์นผู้ใช้ยาวๆ ที่ซ้ำกันแบบตรงตัวซึ่งมาถึง
ภายในหน้าต่าง retry สั้นๆ เพื่อไม่ให้ retry storm ของช่องทางถูกส่งต่อไปยัง
ทรานสคริปต์ที่ใช้งานอยู่ถัดไปหลัง compaction
checkpoint ก่อน compaction จะถูกเก็บไว้เฉพาะในขณะที่ยังต่ำกว่า
ขีดจำกัดขนาด checkpoint ของ OpenClaw เท่านั้น ทรานสคริปต์ที่ใช้งานอยู่ซึ่งมีขนาดใหญ่เกินยังคง compact ได้ แต่ OpenClaw
จะข้าม snapshot ดีบักขนาดใหญ่แทนที่จะเพิ่มการใช้ดิสก์เป็นสองเท่า
ประกาศ compaction
โดยค่าเริ่มต้น compaction จะทำงานอย่างเงียบๆ ตั้งค่าnotifyUser เพื่อแสดงข้อความสถานะสั้นๆ เมื่อ compaction เริ่มและเสร็จสิ้น:
Memory flush
ก่อน compaction OpenClaw สามารถรันเทิร์น silent memory flush เพื่อเก็บโน้ตถาวรลงดิสก์ได้ ตั้งค่าagents.defaults.compaction.memoryFlush.model เมื่อต้องการให้เทิร์น housekeeping นี้ใช้โมเดลภายในเครื่องแทนโมเดลบทสนทนาที่ใช้งานอยู่:
ผู้ให้บริการ compaction แบบเสียบเพิ่มได้
Plugins สามารถลงทะเบียนผู้ให้บริการ compaction แบบกำหนดเองผ่านregisterCompactionProvider() บน API ของ Plugin ได้ เมื่อผู้ให้บริการถูกลงทะเบียนและกำหนดค่าแล้ว OpenClaw จะมอบหมายการสรุปให้ผู้ให้บริการนั้นแทน pipeline LLM ในตัว
หากต้องการใช้ผู้ให้บริการที่ลงทะเบียนแล้ว ให้ตั้งค่า id ของผู้ให้บริการใน config ของคุณ:
provider จะบังคับ mode: "safeguard" โดยอัตโนมัติ ผู้ให้บริการได้รับคำสั่ง compaction และนโยบายการรักษาตัวระบุเหมือนกับ path ในตัว และ OpenClaw ยังคงรักษาบริบทส่วนท้ายของเทิร์นล่าสุดและเทิร์นที่ถูกแบ่งหลังจากเอาต์พุตของผู้ให้บริการ
หากผู้ให้บริการล้มเหลวหรือส่งคืนผลลัพธ์ว่าง OpenClaw จะ fallback กลับไปใช้การสรุปด้วย LLM ในตัว
Compaction เทียบกับ pruning
| Compaction | Pruning | |
|---|---|---|
| ทำอะไร | สรุปบทสนทนาเก่า | ตัดผลลัพธ์เครื่องมือเก่า |
| บันทึกหรือไม่ | ใช่ (ในทรานสคริปต์เซสชัน) | ไม่ (เฉพาะในหน่วยความจำ ต่อคำขอ) |
| ขอบเขต | บทสนทนาทั้งหมด | เฉพาะผลลัพธ์เครื่องมือ |
การแก้ไขปัญหา
Compact บ่อยเกินไปหรือไม่ หน้าต่างบริบทของโมเดลอาจเล็ก หรือเอาต์พุตเครื่องมืออาจมีขนาดใหญ่ ลองเปิดใช้งาน session pruning บริบทรู้สึกเก่าหลัง compaction หรือไม่ ใช้/compact Focus on <topic> เพื่อกำหนดแนวทางสรุป หรือเปิดใช้งาน memory flush เพื่อให้โน้ตคงอยู่
ต้องการเริ่มใหม่ทั้งหมดหรือไม่ /new เริ่มเซสชันใหม่โดยไม่ compact
สำหรับการกำหนดค่าขั้นสูง เช่น reserve tokens, การรักษาตัวระบุ, เครื่องมือบริบทแบบกำหนดเอง และ compaction ฝั่งเซิร์ฟเวอร์ของ OpenAI โปรดดู เจาะลึกการจัดการเซสชัน
ที่เกี่ยวข้อง
- Session: การจัดการเซสชันและ lifecycle
- Session pruning: การตัดผลลัพธ์เครื่องมือ
- Context: วิธีสร้างบริบทสำหรับเทิร์นของเอเจนต์
- Hooks: lifecycle hooks ของ compaction (
before_compaction,after_compaction)