Fundamentals
บริบท
"บริบท" คือ ทุกสิ่งที่ OpenClaw ส่งไปยังโมเดลสำหรับการรันหนึ่งครั้ง โดยถูกจำกัดด้วย หน้าต่างบริบท ของโมเดล (ขีดจำกัดโทเค็น)
แบบจำลองความเข้าใจสำหรับผู้เริ่มต้น:
- พรอมป์ระบบ (สร้างโดย OpenClaw): กฎ เครื่องมือ รายการ Skills เวลา/รันไทม์ และไฟล์เวิร์กสเปซที่ถูกแทรกเข้ามา
- ประวัติการสนทนา: ข้อความของคุณ + ข้อความของผู้ช่วยสำหรับเซสชันนี้
- การเรียกใช้เครื่องมือ/ผลลัพธ์ + ไฟล์แนบ: เอาต์พุตคำสั่ง การอ่านไฟล์ รูปภาพ/เสียง และอื่นๆ
บริบท ไม่ใช่สิ่งเดียวกัน กับ "หน่วยความจำ": หน่วยความจำสามารถถูกเก็บไว้บนดิสก์และโหลดกลับมาในภายหลังได้ ส่วนบริบทคือสิ่งที่อยู่ภายในหน้าต่างปัจจุบันของโมเดล
เริ่มต้นอย่างรวดเร็ว (ตรวจสอบบริบท)
/status→ มุมมองสั้นๆ ว่า "หน้าต่างของฉันเต็มแค่ไหน" + การตั้งค่าเซสชัน/context list→ สิ่งที่ถูกแทรกเข้ามา + ขนาดโดยประมาณ (ต่อไฟล์ + ผลรวม)/context detail→ รายละเอียดที่ลึกขึ้น: ขนาดต่อไฟล์ ขนาดสคีมาต่อเครื่องมือ ขนาดรายการต่อ Skill และขนาดพรอมป์ระบบ/usage tokens→ เพิ่มส่วนท้ายการใช้งานต่อการตอบกลับลงในการตอบกลับปกติ/compact→ สรุปประวัติที่เก่ากว่าเป็นรายการแบบกระชับเพื่อเพิ่มพื้นที่ว่างในหน้าต่าง
ดูเพิ่มเติม: คำสั่ง Slash, การใช้โทเค็นและค่าใช้จ่าย, Compaction.
ตัวอย่างเอาต์พุต
ค่าจะแตกต่างกันไปตามโมเดล ผู้ให้บริการ นโยบายเครื่องมือ และสิ่งที่อยู่ในเวิร์กสเปซของคุณ
/context list
🧠 Context breakdown
Workspace: <workspaceDir>
Bootstrap max/file: 12,000 chars
Sandbox: mode=non-main sandboxed=false
System 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)
สิ่งที่นับรวมในหน้าต่างบริบท
ทุกสิ่งที่โมเดลได้รับจะถูกนับรวม ได้แก่:
- พรอมป์ระบบ (ทุกส่วน)
- ประวัติการสนทนา
- การเรียกใช้เครื่องมือ + ผลลัพธ์เครื่องมือ
- ไฟล์แนบ/ทรานสคริปต์ (รูปภาพ/เสียง/ไฟล์)
- สรุปจาก Compaction และอาร์ติแฟกต์การตัดทิ้ง
- "ตัวห่อ" หรือเฮดเดอร์ที่ซ่อนอยู่ของผู้ให้บริการ (มองไม่เห็น แต่ยังถูกนับ)
OpenClaw สร้างพรอมป์ระบบอย่างไร
พรอมป์ระบบเป็นสิ่งที่ OpenClaw เป็นเจ้าของ และถูกสร้างใหม่ในการรันแต่ละครั้ง โดยมีสิ่งต่อไปนี้:
- รายการเครื่องมือ + คำอธิบายสั้นๆ
- รายการ Skills (เฉพาะเมทาดาทา ดูด้านล่าง)
- ตำแหน่งเวิร์กสเปซ
- เวลา (UTC + เวลาผู้ใช้ที่แปลงแล้ว หากกำหนดค่าไว้)
- เมทาดาทารันไทม์ (โฮสต์/OS/โมเดล/การคิด)
- ไฟล์บูตสแตรปของเวิร์กสเปซที่ถูกแทรกไว้ภายใต้ บริบทโปรเจ็กต์
รายละเอียดทั้งหมด: พรอมป์ระบบ.
ไฟล์เวิร์กสเปซที่ถูกแทรก (บริบทโปรเจ็กต์)
โดยค่าเริ่มต้น OpenClaw จะแทรกชุดไฟล์เวิร์กสเปซที่กำหนดไว้ตายตัว (หากมี):
AGENTS.mdSOUL.mdTOOLS.mdIDENTITY.mdUSER.mdHEARTBEAT.mdBOOTSTRAP.md(เฉพาะการรันครั้งแรก)
ไฟล์ขนาดใหญ่จะถูกตัดทอนรายไฟล์โดยใช้ agents.defaults.bootstrapMaxChars (ค่าเริ่มต้น 12000 อักขระ) OpenClaw ยังบังคับใช้เพดานการแทรกบูตสแตรปรวมข้ามไฟล์ด้วย agents.defaults.bootstrapTotalMaxChars (ค่าเริ่มต้น 60000 อักขระ) /context แสดงขนาด ดิบเทียบกับที่ถูกแทรก และแสดงว่าเกิดการตัดทอนหรือไม่
เมื่อเกิดการตัดทอน รันไทม์สามารถแทรกบล็อกคำเตือนในพรอมป์ภายใต้บริบทโปรเจ็กต์ได้ กำหนดค่าสิ่งนี้ด้วย agents.defaults.bootstrapPromptTruncationWarning (off, once, always; ค่าเริ่มต้น once)
Skills: ถูกแทรกเทียบกับโหลดตามต้องการ
พรอมป์ระบบรวม รายการ Skills แบบกระชับ (ชื่อ + คำอธิบาย + ตำแหน่ง) รายการนี้มีโอเวอร์เฮดจริง
คำสั่งของ Skill ไม่ ถูกใส่ไว้โดยค่าเริ่มต้น โมเดลถูกคาดหวังให้ read ไฟล์ SKILL.md ของ Skill เฉพาะเมื่อจำเป็น
เครื่องมือ: มีต้นทุนสองส่วน
เครื่องมือส่งผลต่อบริบทในสองแบบ:
- ข้อความรายการเครื่องมือ ในพรอมป์ระบบ (สิ่งที่คุณเห็นเป็น "เครื่องมือ")
- สคีมาเครื่องมือ (JSON) สิ่งเหล่านี้ถูกส่งไปยังโมเดลเพื่อให้เรียกใช้เครื่องมือได้ และนับรวมในบริบทแม้ว่าคุณจะไม่เห็นเป็นข้อความธรรมดาก็ตาม
/context detail แจกแจงสคีมาเครื่องมือที่ใหญ่ที่สุด เพื่อให้คุณเห็นว่าอะไรเป็นส่วนหลัก
คำสั่ง ไดเรกทีฟ และ "ชอร์ตคัตแบบอินไลน์"
คำสั่ง Slash ถูกจัดการโดย Gateway มีพฤติกรรมที่แตกต่างกันอยู่ไม่กี่แบบ:
- คำสั่งแบบเดี่ยว: ข้อความที่มีเพียง
/...จะรันเป็นคำสั่ง - ไดเรกทีฟ:
/think,/verbose,/trace,/reasoning,/elevated,/model,/queueจะถูกตัดออกก่อนที่โมเดลจะเห็นข้อความ- ข้อความที่มีเฉพาะไดเรกทีฟจะคงการตั้งค่าเซสชันไว้
- ไดเรกทีฟแบบอินไลน์ในข้อความปกติทำหน้าที่เป็นคำใบ้เฉพาะข้อความ
- ชอร์ตคัทแบบอินไลน์ (เฉพาะผู้ส่งที่อยู่ใน allowlist): โทเค็น
/...บางรายการภายในข้อความปกติสามารถรันทันทีได้ (ตัวอย่าง: "hey /status") และจะถูกตัดออกก่อนที่โมเดลจะเห็นข้อความที่เหลือ
รายละเอียด: คำสั่ง Slash.
เซสชัน Compaction และการตัดทิ้ง (สิ่งที่คงอยู่)
สิ่งที่คงอยู่ข้ามข้อความขึ้นอยู่กับกลไก:
- ประวัติปกติ จะคงอยู่ในทรานสคริปต์เซสชันจนกว่าจะถูก compact/ตัดทิ้งตามนโยบาย
- Compaction จะคงสรุปไว้ในทรานสคริปต์และคงข้อความล่าสุดไว้เหมือนเดิม
- การตัดทิ้ง จะลบผลลัพธ์เครื่องมือเก่าออกจากพรอมป์ ในหน่วยความจำ เพื่อเพิ่มพื้นที่ในหน้าต่างบริบท แต่ไม่เขียนทรานสคริปต์เซสชันใหม่ - ประวัติทั้งหมดจะยังตรวจสอบได้บนดิสก์
เอกสาร: เซสชัน, Compaction, การตัดทิ้งเซสชัน.
โดยค่าเริ่มต้น OpenClaw ใช้เอนจินบริบท legacy ในตัวสำหรับการประกอบและ
Compaction หากคุณติดตั้ง Plugin ที่ให้ kind: "context-engine" และ
เลือกด้วย plugins.slots.contextEngine OpenClaw จะมอบหมายการประกอบบริบท
/compact และฮุกวงจรชีวิตบริบทของซับเอเจนต์ที่เกี่ยวข้องให้กับเอนจินนั้น
แทน ownsCompaction: false จะไม่ fallback อัตโนมัติไปยังเอนจิน
legacy; เอนจินที่ใช้งานอยู่ยังต้องอิมพลีเมนต์ compact() ให้ถูกต้อง ดู
เอนจินบริบท สำหรับอินเทอร์เฟซที่เสียบเปลี่ยนได้
ฮุกวงจรชีวิต และการกำหนดค่าฉบับเต็ม
/context รายงานอะไรจริงๆ
/context จะให้ความสำคัญกับรายงานพรอมป์ระบบที่ สร้างจากการรัน ล่าสุดเมื่อมีอยู่:
System prompt (run)= จับมาจากการรันแบบฝังตัว (ที่ใช้เครื่องมือได้) ครั้งล่าสุด และคงไว้ในที่เก็บเซสชันSystem prompt (estimate)= คำนวณทันทีเมื่อไม่มีรายงานการรันอยู่ (หรือเมื่อรันผ่านแบ็กเอนด์ CLI ที่ไม่สร้างรายงาน)
ไม่ว่าจะเป็นแบบใด ระบบจะรายงานขนาดและผู้มีส่วนร่วมหลัก แต่จะ ไม่ dump พรอมป์ระบบหรือสคีมาเครื่องมือฉบับเต็ม