Sessions and memory
การตัดทอนเซสชัน
การตัดแต่งเซสชันจะตัด ผลลัพธ์เก่าจากเครื่องมือ ออกจากบริบทก่อนการเรียก LLM แต่ละครั้ง ซึ่งช่วยลดบริบทที่ขยายตัวจากผลลัพธ์ของเครื่องมือที่สะสมไว้ (ผลลัพธ์การดำเนินการ การอ่านไฟล์ ผลการค้นหา) โดยไม่เขียนข้อความสนทนาปกติใหม่
เหตุผลที่สำคัญ
เซสชันที่ยาวจะสะสมผลลัพธ์จากเครื่องมือจนทำให้หน้าต่างบริบทขยายตัว ซึ่งเพิ่มค่าใช้จ่ายและอาจบังคับให้เกิด Compaction เร็วกว่าที่จำเป็น
การตัดแต่งมีประโยชน์อย่างยิ่งสำหรับ การแคชพรอมต์ของ Anthropic เมื่อ TTL ของแคชหมดอายุ คำขอถัดไปจะแคชพรอมต์ทั้งหมดใหม่ การตัดแต่งช่วยลดขนาดข้อมูลที่เขียนลงแคช ซึ่งลดค่าใช้จ่ายโดยตรง
วิธีการทำงาน
การตัดแต่งทำงานในโหมด cache-ttl โดยจะดำเนินการต่อเมื่อผ่านทั้งการตรวจสอบเวลาและการตรวจสอบขนาดบริบท:
- รอให้ TTL ของแคชหมดอายุ (ค่าเริ่มต้นคือ 5 นาทีเมื่อตั้งค่าด้วยตนเอง โปรดดูค่าเริ่มต้นอัตโนมัติของ Anthropic ที่ ค่าเริ่มต้นอัจฉริยะ) ก่อน TTL จะครบกำหนด ระบบจะข้ามการตัดแต่งทั้งหมดเพื่อคงการใช้แคชพรอมต์ซ้ำสำหรับรอบสนทนาที่เกิดขึ้นใกล้กัน
- เมื่อ TTL หมดอายุแล้ว ให้ประมาณขนาดบริบททั้งหมดเทียบกับหน้าต่างบริบทของโมเดล หากอัตราส่วนต่ำกว่า
softTrimRatio(ค่าเริ่มต้น 0.3) ระบบจะข้ามการตัดแต่งและปล่อยให้นาฬิกา TTL ทำงานต่อไป - ตัดแบบนุ่มนวล สำหรับผลลัพธ์จากเครื่องมือที่มีขนาดใหญ่เกินอัตราส่วน: เก็บส่วนต้นและส่วนท้ายไว้ (ค่าเริ่มต้นส่วนละ 1,500 อักขระ โดยจำกัดรวมกันไม่เกิน 4,000 อักขระ) และแทรก
...ไว้ตรงกลาง - หากอัตราส่วนยังคงเท่ากับหรือสูงกว่า
hardClearRatio(ค่าเริ่มต้น 0.5) และยังมีเนื้อหาจากเครื่องมือที่ตัดแต่งได้อย่างน้อยminPrunableToolChars(ค่าเริ่มต้น 50,000) อักขระ ให้ ล้างทั้งหมด สำหรับผลลัพธ์เหล่านั้น โดยแทนที่เนื้อหาด้วยข้อความตัวแทน (ค่าเริ่มต้น[เนื้อหาผลลัพธ์เก่าจากเครื่องมือถูกล้างแล้ว]) - รีเซ็ตนาฬิกา TTL เฉพาะเมื่อการตัดแต่งเปลี่ยนแปลงบริบทจริง เพื่อให้คำขอต่อเนื่องใช้แคชใหม่ซ้ำได้
มีกฎความปลอดภัยสองข้อที่ใช้เสมอโดยไม่ขึ้นกับเกณฑ์: รอบการตอบของผู้ช่วย keepLastAssistants ล่าสุด (ค่าเริ่มต้น 3 รอบ) จะไม่ถูกตัดแต่ง และเนื้อหาใด ๆ ก่อนข้อความแรกของผู้ใช้ในเซสชันจะไม่ถูกตัดแต่ง (เพื่อปกป้องการอ่านข้อมูลเริ่มต้น เช่น SOUL.md/USER.md)
มีเพียงข้อความ toolResult เท่านั้นที่มีสิทธิ์ถูกตัดแต่ง ส่วนข้อความสนทนาปกติจะไม่ถูกแก้ไข ใช้ agents.defaults.contextPruning.tools.{allow,deny} เพื่อกำหนดขอบเขตว่าชื่อเครื่องมือใดสามารถถูกตัดแต่งได้
การล้างรูปภาพแบบเดิม
OpenClaw ยังสร้างมุมมองสำหรับเล่นซ้ำแบบแยกต่างหากและทำซ้ำได้โดยให้ผลลัพธ์เดิม สำหรับเซสชันที่เก็บบล็อกรูปภาพดิบหรือเครื่องหมายสื่อสำหรับการเติมข้อมูลพรอมต์ไว้ในประวัติ
- ระบบจะเก็บรักษา 3 รอบที่เสร็จสมบูรณ์ล่าสุด แบบตรงตามข้อมูลระดับไบต์ เพื่อให้คำนำหน้าของแคชพรอมต์สำหรับการติดตามผลล่าสุดคงที่ จำนวนนี้รวมรอบที่เสร็จสมบูรณ์ทั้งหมด ไม่ใช่เฉพาะรอบที่มีรูปภาพ ดังนั้นรอบที่มีเฉพาะข้อความก็ใช้พื้นที่ในช่วงนี้ด้วย
- ในมุมมองสำหรับเล่นซ้ำ บล็อกรูปภาพเก่าที่ประมวลผลแล้วจากประวัติ
userหรือtoolResultจะถูกแทนที่ด้วย[นำข้อมูลรูปภาพออกแล้ว - โมเดลประมวลผลเรียบร้อยแล้ว] - การอ้างอิงสื่อแบบข้อความเก่า เช่น
[แนบสื่อ: ...],[รูปภาพ: แหล่งที่มา: ...]และmedia://inbound/...จะถูกแทนที่ด้วย[นำการอ้างอิงสื่อออกแล้ว - โมเดลประมวลผลเรียบร้อยแล้ว]เครื่องหมายไฟล์แนบของรอบปัจจุบันจะยังคงเดิม เพื่อให้โมเดลด้านการมองเห็นยังสามารถเติมข้อมูลรูปภาพใหม่ได้ - บันทึกเซสชันดิบจะไม่ถูกเขียนใหม่ ดังนั้นโปรแกรมดูประวัติยังคงแสดงรายการข้อความและรูปภาพต้นฉบับได้
- กระบวนการนี้แยกจากการตัดแต่งตาม TTL ของแคชตามปกติข้างต้น โดยมีไว้เพื่อป้องกันไม่ให้เพย์โหลดรูปภาพที่ซ้ำกันหรือการอ้างอิงสื่อที่ล้าสมัยทำให้แคชพรอมต์ใช้ไม่ได้ในรอบถัดไป
ค่าเริ่มต้นอัจฉริยะ
Plugin Anthropic ที่มาพร้อมระบบจะกำหนดค่าการตัดแต่งและความถี่ของ Heartbeat โดยอัตโนมัติในครั้งแรกที่แก้ไขโปรไฟล์การตรวจสอบสิทธิ์ของ Anthropic (หรือ Claude CLI) แต่เฉพาะฟิลด์ที่คุณยังไม่ได้ตั้งค่าไว้อย่างชัดเจน:
| โหมดการตรวจสอบสิทธิ์ | contextPruning.mode |
contextPruning.ttl |
heartbeat.every |
|---|---|---|---|
| OAuth/โทเค็น (รวมถึงการใช้ Claude CLI ซ้ำ) | cache-ttl |
1h |
1h |
| คีย์ API | cache-ttl |
1h |
30m |
หากคุณตั้งค่า agents.defaults.contextPruning.mode หรือ agents.defaults.heartbeat.every ด้วยตนเอง OpenClaw จะไม่เขียนทับค่าเหล่านั้น ค่าเริ่มต้นอัตโนมัตินี้ทำงานเฉพาะกับการตรวจสอบสิทธิ์ในตระกูล Anthropic ส่วนผู้ให้บริการรายอื่นจะใช้การตัดแต่งเป็น off เว้นแต่คุณจะกำหนดค่าเอง
เปิดหรือปิดใช้งาน
การตัดแต่งจะปิดใช้งานตามค่าเริ่มต้นสำหรับผู้ให้บริการที่ไม่ใช่ Anthropic หากต้องการเปิดใช้งาน:
{ agents: { defaults: { contextPruning: { mode: "cache-ttl", ttl: "5m" }, }, },}หากต้องการปิดใช้งาน: ตั้งค่า mode: "off"
การตัดแต่งเทียบกับ Compaction
| การตัดแต่ง | Compaction | |
|---|---|---|
| ทำอะไร | ตัดผลลัพธ์จากเครื่องมือ | สรุปการสนทนา |
| บันทึกหรือไม่ | ไม่ (ต่อคำขอ) | ใช่ (ในบันทึก) |
| ขอบเขต | เฉพาะผลลัพธ์จากเครื่องมือ | การสนทนาทั้งหมด |
ทั้งสองกระบวนการทำงานเสริมกัน โดยการตัดแต่งช่วยให้ผลลัพธ์จากเครื่องมือมีขนาดกะทัดรัดระหว่างรอบ Compaction
อ่านเพิ่มเติม
- Compaction: การลดบริบทด้วยการสรุป
- การกำหนดค่า Gateway: ตัวเลือกการกำหนดค่าการตัดแต่งทั้งหมด (
contextPruning.*)