Sessions and memory

การตัดทอนเซสชัน

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

เหตุผลที่สำคัญ

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

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

วิธีการทำงาน

การตัดแต่งทำงานในโหมด cache-ttl โดยจะดำเนินการต่อเมื่อผ่านทั้งการตรวจสอบเวลาและการตรวจสอบขนาดบริบท:

  1. รอให้ TTL ของแคชหมดอายุ (ค่าเริ่มต้นคือ 5 นาทีเมื่อตั้งค่าด้วยตนเอง โปรดดูค่าเริ่มต้นอัตโนมัติของ Anthropic ที่ ค่าเริ่มต้นอัจฉริยะ) ก่อน TTL จะครบกำหนด ระบบจะข้ามการตัดแต่งทั้งหมดเพื่อคงการใช้แคชพรอมต์ซ้ำสำหรับรอบสนทนาที่เกิดขึ้นใกล้กัน
  2. เมื่อ TTL หมดอายุแล้ว ให้ประมาณขนาดบริบททั้งหมดเทียบกับหน้าต่างบริบทของโมเดล หากอัตราส่วนต่ำกว่า softTrimRatio (ค่าเริ่มต้น 0.3) ระบบจะข้ามการตัดแต่งและปล่อยให้นาฬิกา TTL ทำงานต่อไป
  3. ตัดแบบนุ่มนวล สำหรับผลลัพธ์จากเครื่องมือที่มีขนาดใหญ่เกินอัตราส่วน: เก็บส่วนต้นและส่วนท้ายไว้ (ค่าเริ่มต้นส่วนละ 1,500 อักขระ โดยจำกัดรวมกันไม่เกิน 4,000 อักขระ) และแทรก ... ไว้ตรงกลาง
  4. หากอัตราส่วนยังคงเท่ากับหรือสูงกว่า hardClearRatio (ค่าเริ่มต้น 0.5) และยังมีเนื้อหาจากเครื่องมือที่ตัดแต่งได้อย่างน้อย minPrunableToolChars (ค่าเริ่มต้น 50,000) อักขระ ให้ ล้างทั้งหมด สำหรับผลลัพธ์เหล่านั้น โดยแทนที่เนื้อหาด้วยข้อความตัวแทน (ค่าเริ่มต้น [เนื้อหาผลลัพธ์เก่าจากเครื่องมือถูกล้างแล้ว])
  5. รีเซ็ตนาฬิกา 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 หากต้องการเปิดใช้งาน:

json5
{  agents: {    defaults: {      contextPruning: { mode: "cache-ttl", ttl: "5m" },    },  },}

หากต้องการปิดใช้งาน: ตั้งค่า mode: "off"

การตัดแต่งเทียบกับ Compaction

การตัดแต่ง Compaction
ทำอะไร ตัดผลลัพธ์จากเครื่องมือ สรุปการสนทนา
บันทึกหรือไม่ ไม่ (ต่อคำขอ) ใช่ (ในบันทึก)
ขอบเขต เฉพาะผลลัพธ์จากเครื่องมือ การสนทนาทั้งหมด

ทั้งสองกระบวนการทำงานเสริมกัน โดยการตัดแต่งช่วยให้ผลลัพธ์จากเครื่องมือมีขนาดกะทัดรัดระหว่างรอบ Compaction

อ่านเพิ่มเติม

เนื้อหาที่เกี่ยวข้อง

Was this useful?
On this page

On this page