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.md
  • SOUL.md
  • TOOLS.md
  • IDENTITY.md
  • USER.md
  • HEARTBEAT.md
  • BOOTSTRAP.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 เฉพาะเมื่อจำเป็น

เครื่องมือ: มีต้นทุนสองส่วน

เครื่องมือส่งผลต่อบริบทในสองแบบ:

  1. ข้อความรายการเครื่องมือ ในพรอมป์ระบบ (สิ่งที่คุณเห็นเป็น "เครื่องมือ")
  2. สคีมาเครื่องมือ (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 พรอมป์ระบบหรือสคีมาเครื่องมือฉบับเต็ม

ที่เกี่ยวข้อง