Fundamentals
บริบท
"บริบท" คือ ทุกสิ่งที่ OpenClaw ส่งให้โมเดลสำหรับการรันหนึ่งครั้ง โดยถูกจำกัดด้วย หน้าต่างบริบท ของโมเดล (ขีดจำกัดโทเค็น)
แบบจำลองความคิดสำหรับผู้เริ่มต้น:
- พรอมต์ระบบ (สร้างโดย OpenClaw): กฎ เครื่องมือ รายการ Skills เวลา/รันไทม์ และไฟล์เวิร์กสเปซที่แทรกเข้ามา
- ประวัติการสนทนา: ข้อความของคุณ + ข้อความของผู้ช่วยสำหรับเซสชันนี้
- การเรียกใช้/ผลลัพธ์ของเครื่องมือ + ไฟล์แนบ: เอาต์พุตคำสั่ง การอ่านไฟล์ รูปภาพ/เสียง เป็นต้น
บริบท ไม่ใช่สิ่งเดียวกัน กับ "หน่วยความจำ": หน่วยความจำสามารถจัดเก็บไว้บนดิสก์และโหลดกลับมาในภายหลังได้ ส่วนบริบทคือสิ่งที่อยู่ภายในหน้าต่างปัจจุบันของโมเดล
เริ่มต้นอย่างรวดเร็ว (ตรวจสอบบริบท)
/status→ ดูอย่างรวดเร็วว่า "หน้าต่างของฉันเต็มแค่ไหนแล้ว?" พร้อมการตั้งค่าเซสชัน/context list→ ดูสิ่งที่ถูกแทรกเข้ามา + ขนาดโดยประมาณ (แยกตามไฟล์ + ยอดรวม)/context detail→ รายละเอียดเชิงลึก: ขนาดแยกตามไฟล์ แยกตามสคีมาของเครื่องมือ แยกตามรายการ Skills ขนาดพรอมต์ระบบ และจำนวนข้อความในบทสนทนาที่สามารถทำ Compaction ได้/context map→ รูปภาพแผนผังต้นไม้แบบ WinDirStat ขององค์ประกอบที่ใช้บริบทซึ่งติดตามอยู่ในเซสชันปัจจุบัน/usage tokens→ เพิ่มส่วนท้ายแสดงการใช้งานต่อการตอบหนึ่งครั้งในคำตอบปกติ/compact→ สรุปประวัติเก่าให้เป็นรายการแบบย่อเพื่อเพิ่มพื้นที่ว่างในหน้าต่าง
ดูเพิ่มเติม: คำสั่งเครื่องหมายทับ, การใช้โทเค็นและค่าใช้จ่าย, Compaction
ตัวอย่างเอาต์พุต
ค่าจะแตกต่างกันไปตามโมเดล ผู้ให้บริการ นโยบายเครื่องมือ และสิ่งที่อยู่ในเวิร์กสเปซของคุณ
/context list
🧠 Context breakdownWorkspace: <workspaceDir>Bootstrap max/file: 12,000 charsSandbox: mode=non-main sandboxed=falseSystem prompt (run): 38,412 chars (~9,603 tok) (Project Context 23,901 chars (~5,976 tok)) Injected workspace files:- AGENTS.md: OK | raw 1,742 chars (~436 tok) | injected 1,742 chars (~436 tok)- SOUL.md: OK | raw 912 chars (~228 tok) | injected 912 chars (~228 tok)- TOOLS.md: TRUNCATED | raw 54,210 chars (~13,553 tok) | injected 20,962 chars (~5,241 tok)- IDENTITY.md: OK | raw 211 chars (~53 tok) | injected 211 chars (~53 tok)- USER.md: OK | raw 388 chars (~97 tok) | injected 388 chars (~97 tok)- HEARTBEAT.md: MISSING | raw 0 | injected 0- BOOTSTRAP.md: OK | raw 0 chars (~0 tok) | injected 0 chars (~0 tok) Skills list (system prompt text): 2,184 chars (~546 tok) (12 skills)Tools: read, edit, write, exec, process, browser, message, sessions_send, …Tool list (system prompt text): 1,032 chars (~258 tok)Tool schemas (JSON): 31,988 chars (~7,997 tok) (counts toward context; not shown as text)Tools: (same as above) Session tokens (cached): 14,250 total / ctx=32,000/context detail
🧠 Context breakdown (detailed)…Top skills (prompt entry size):- frontend-design: 412 chars (~103 tok)- oracle: 401 chars (~101 tok)… (+10 more skills) Top tools (schema size):- browser: 9,812 chars (~2,453 tok)- exec: 6,240 chars (~1,560 tok)… (+N more tools)/context map
ส่งรูปภาพที่สร้างจากรายงานการรันล่าสุดในแคชรวมกับบทสนทนาของเซสชัน ก่อนที่ข้อความปกติจะสร้างรายงานการรันในเซสชัน /context map จะส่งคืนข้อความแจ้งว่าไม่พร้อมใช้งานแทนการแสดงค่าประมาณ พื้นที่ของสี่เหลี่ยมจะแปรผันตามจำนวนอักขระของพรอมต์ที่ติดตาม:
- บทสนทนา (ข้อความของผู้ใช้ คำตอบของผู้ช่วย ผลลัพธ์จากเครื่องมือ และสรุปจาก Compaction) รวมถึงบริบทของรันไทม์ในแต่ละรอบและส่วนเพิ่มเติมของพรอมต์จากฮุกที่ส่งถึงเฉพาะโมเดล
- ไฟล์เวิร์กสเปซที่แทรกเข้ามา
- ข้อความพรอมต์ระบบพื้นฐาน
- รายการพรอมต์ของ Skills
- สคีมา JSON ของเครื่องมือ
กลุ่มการสนทนาจะขยายขึ้นตามเซสชัน ดังนั้นแผนผังจะเปลี่ยนไปในแต่ละรอบ หลังจากทำ Compaction กลุ่มนี้จะยุบรวมเป็นช่องสรุป
/context list, /context detail และ /context json ยังคงตรวจสอบค่าประมาณที่คำนวณตามคำขอได้เมื่อไม่มีรายงานการรันอยู่ในแคช
สิ่งที่นับรวมในหน้าต่างบริบท
ทุกสิ่งที่โมเดลได้รับจะถูกนับรวม ซึ่งรวมถึง:
- พรอมต์ระบบ (ทุกส่วน)
- ประวัติการสนทนา
- การเรียกใช้เครื่องมือ + ผลลัพธ์จากเครื่องมือ
- ไฟล์แนบ/บทถอดเสียง (รูปภาพ/เสียง/ไฟล์)
- สรุปจาก Compaction และอาร์ติแฟกต์จากการตัดแต่ง
- "ตัวห่อหุ้ม" หรือส่วนหัวที่ซ่อนอยู่ของผู้ให้บริการ (มองไม่เห็นแต่ยังถูกนับรวม)
วิธีที่ OpenClaw สร้างพรอมต์ระบบ
พรอมต์ระบบ เป็นของ OpenClaw และถูกสร้างใหม่ทุกครั้งที่รัน โดยประกอบด้วย:
- รายการเครื่องมือ + คำอธิบายสั้น ๆ
- รายการ Skills (เฉพาะข้อมูลเมตา ดูด้านล่าง)
- ตำแหน่งเวิร์กสเปซ
- เวลา (UTC + เวลาของผู้ใช้ที่แปลงแล้วหากมีการกำหนดค่า)
- ข้อมูลเมตาของรันไทม์ (โฮสต์/ระบบปฏิบัติการ/โมเดล/การคิด)
- ไฟล์เริ่มต้นของเวิร์กสเปซที่แทรกไว้ภายใต้ บริบทโครงการ
รายละเอียดทั้งหมด: พรอมต์ระบบ
ไฟล์เวิร์กสเปซที่แทรกเข้ามา (บริบทโครงการ)
โดยค่าเริ่มต้น OpenClaw จะแทรกชุดไฟล์เวิร์กสเปซที่กำหนดไว้ตายตัว (หากมีอยู่):
AGENTS.mdSOUL.mdTOOLS.mdIDENTITY.mdUSER.mdHEARTBEAT.mdBOOTSTRAP.md(เฉพาะการรันครั้งแรก)
ไฟล์ขนาดใหญ่จะถูกตัดทอนแยกเป็นรายไฟล์โดยใช้ agents.defaults.bootstrapMaxChars (ค่าเริ่มต้น 20000 อักขระ) OpenClaw ยังบังคับใช้ขีดจำกัดรวมของการแทรกข้อมูลเริ่มต้นจากทุกไฟล์ด้วย agents.defaults.bootstrapTotalMaxChars (ค่าเริ่มต้น 60000 อักขระ) /context จะแสดงขนาด ข้อมูลดิบเทียบกับข้อมูลที่แทรก และระบุว่ามีการตัดทอนหรือไม่
เมื่อเกิดการตัดทอน รันไทม์สามารถแทรกบล็อกคำเตือนภายในพรอมต์ใต้บริบทโครงการได้ กำหนดค่านี้ด้วย agents.defaults.bootstrapPromptTruncationWarning (off, once, always; ค่าเริ่มต้น always)
Skills: แทรกเข้ามาเทียบกับโหลดเมื่อจำเป็น
พรอมต์ระบบมี รายการ Skills แบบกระชับ (ชื่อ + คำอธิบาย + ตำแหน่ง) รายการนี้ใช้พื้นที่จริง
โดยค่าเริ่มต้น คำสั่งของ Skills จะ ไม่ ถูกรวมไว้ โมเดลควรใช้ read เพื่ออ่าน SKILL.md ของ Skills เฉพาะเมื่อจำเป็น
เครื่องมือ: มีค่าใช้จ่ายสองส่วน
เครื่องมือส่งผลต่อบริบทสองทาง:
- ข้อความรายการเครื่องมือ ในพรอมต์ระบบ (สิ่งที่คุณเห็นในส่วน "เครื่องมือ")
- สคีมาของเครื่องมือ (JSON) ซึ่งส่งให้โมเดลเพื่อให้สามารถเรียกใช้เครื่องมือได้ และจะถูกนับรวมในบริบทแม้ว่าคุณจะไม่เห็นเป็นข้อความธรรมดา
/context detail แจกแจงสคีมาของเครื่องมือที่ใหญ่ที่สุด เพื่อให้คุณเห็นว่าส่วนใดใช้พื้นที่มากที่สุด
คำสั่ง ไดเรกทีฟ และ "ทางลัดแบบอินไลน์"
คำสั่งเครื่องหมายทับได้รับการจัดการโดย Gateway โดยมีลักษณะการทำงานที่แตกต่างกันดังนี้:
- คำสั่งเดี่ยว: ข้อความที่มีเพียง
/...จะทำงานเป็นคำสั่ง - ไดเรกทีฟ:
/think,/fast,/verbose,/trace,/reasoning,/elevated,/exec,/model,/queueจะถูกนำออกก่อนที่โมเดลจะเห็นข้อความ- ข้อความที่มีเฉพาะไดเรกทีฟจะคงการตั้งค่าเซสชันไว้
- ไดเรกทีฟแบบอินไลน์ในข้อความปกติจะทำหน้าที่เป็นคำแนะนำสำหรับข้อความนั้น
- ทางลัดแบบอินไลน์ (เฉพาะผู้ส่งที่อยู่ในรายการอนุญาต): โทเค็น
/...บางรายการภายในข้อความปกติสามารถทำงานได้ทันที (ตัวอย่าง: "สวัสดี /status") และจะถูกนำออกก่อนที่โมเดลจะเห็นข้อความส่วนที่เหลือ
รายละเอียด: คำสั่งเครื่องหมายทับ
เซสชัน Compaction และการตัดแต่ง (สิ่งที่คงอยู่)
สิ่งที่จะคงอยู่ระหว่างข้อความขึ้นอยู่กับกลไก:
- ประวัติปกติ จะคงอยู่ในบทสนทนาของเซสชันจนกว่าจะถูกทำ Compaction หรือตัดแต่งตามนโยบาย
- Compaction จะบันทึกสรุปลงในบทสนทนาและเก็บข้อความล่าสุดไว้ครบถ้วน
- การตัดแต่ง จะลบผลลัพธ์เก่าของเครื่องมือออกจากพรอมต์ ในหน่วยความจำ เพื่อเพิ่มพื้นที่ว่างในหน้าต่างบริบท แต่จะไม่เขียนบทสนทนาของเซสชันใหม่ โดยประวัติฉบับเต็มยังคงตรวจสอบได้บนดิสก์
เอกสาร: เซสชัน, Compaction, การตัดแต่งเซสชัน
โดยค่าเริ่มต้น OpenClaw ใช้กลไกบริบท legacy ในตัวสำหรับการประกอบและ
Compaction หากคุณติดตั้ง Plugin ที่ระบุ kind: "context-engine" และ
เลือกด้วย plugins.slots.contextEngine OpenClaw จะมอบหมายการประกอบบริบท
/compact และฮุกวงจรชีวิตบริบทของเอเจนต์ย่อยที่เกี่ยวข้องให้กลไกนั้นแทน
ownsCompaction: false จะไม่ย้อนกลับไปใช้กลไก legacy โดยอัตโนมัติ
กลไกที่ใช้งานอยู่ยังคงต้องติดตั้ง compact() อย่างถูกต้อง ดู
กลไกบริบท สำหรับอินเทอร์เฟซแบบเสียบเปลี่ยนได้
ฮุกวงจรชีวิต และการกำหนดค่าทั้งหมด
สิ่งที่ /context รายงานจริง
/context จะเลือกใช้รายงานพรอมต์ระบบล่าสุดที่ สร้างจากการรัน หากมี:
System prompt (run)= บันทึกจากการรันแบบฝังตัวครั้งล่าสุด (ที่ใช้เครื่องมือได้) และจัดเก็บอย่างถาวรไว้ในที่เก็บเซสชันSystem prompt (estimate)= คำนวณทันทีเมื่อไม่มีรายงานการรัน (หรือเมื่อทำงานผ่านแบ็กเอนด์ CLI ที่ไม่สร้างรายงาน)
ไม่ว่าจะเป็นกรณีใด ระบบจะรายงานขนาดและองค์ประกอบหลัก แต่จะ ไม่ แสดงพรอมต์ระบบหรือสคีมาของเครื่องมือทั้งหมด ในโหมดรายละเอียด ระบบยังเปรียบเทียบบทสนทนาของเซสชันโดยใช้เกณฑ์ระบุข้อความสนทนาจริงแบบเดียวกับที่ Compaction ใช้ เพื่อให้แยกแยะการใช้พรอมต์/แคชในปริมาณสูงออกจากประวัติการสนทนาที่สามารถทำ Compaction ได้ง่ายขึ้น