Technical reference

การใช้โทเค็นและค่าใช้จ่าย

OpenClaw ติดตาม โทเค็น ไม่ใช่อักขระ โทเค็นขึ้นอยู่กับโมเดลแต่ละตัว แต่โมเดลส่วนใหญ่แบบ OpenAI-style มีค่าเฉลี่ยประมาณ 4 อักขระต่อโทเค็นสำหรับข้อความภาษาอังกฤษ

วิธีสร้างพรอมป์ระบบ

OpenClaw ประกอบพรอมป์ระบบของตนเองในทุกครั้งที่รัน โดยประกอบด้วย:

  • รายการเครื่องมือ + คำอธิบายสั้น ๆ
  • รายการ Skills (เฉพาะเมทาดาทา; คำแนะนำจะถูกโหลดเมื่อจำเป็นด้วย read) บล็อก Skills แบบกะทัดรัดถูกจำกัดด้วย skills.limits.maxSkillsPromptChars พร้อมการแทนที่รายเอเจนต์แบบไม่บังคับที่ agents.list[].skillsLimits.maxSkillsPromptChars
  • คำแนะนำการอัปเดตตัวเอง
  • พื้นที่ทำงาน + ไฟล์บูตสแตรป (AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, BOOTSTRAP.md เมื่อเป็นไฟล์ใหม่ รวมถึง MEMORY.md เมื่อมีอยู่) root memory.md ตัวพิมพ์เล็กจะไม่ถูกฉีดเข้าไป; เป็นอินพุตซ่อมแซมแบบเก่าสำหรับ openclaw doctor --fix เมื่อจับคู่กับ MEMORY.md ไฟล์ขนาดใหญ่จะถูกตัดทอนตาม agents.defaults.bootstrapMaxChars (ค่าเริ่มต้น: 12000) และการฉีดบูตสแตรปรวมทั้งหมดถูกจำกัดด้วย agents.defaults.bootstrapTotalMaxChars (ค่าเริ่มต้น: 60000) ไฟล์รายวัน memory/*.md ไม่ได้เป็นส่วนหนึ่งของพรอมป์บูตสแตรปปกติ; ไฟล์เหล่านี้ยังคงเรียกใช้ตามต้องการผ่านเครื่องมือหน่วยความจำในเทิร์นทั่วไป แต่การรันโมเดลแบบรีเซ็ต/เริ่มต้นสามารถเติมบล็อกบริบทเริ่มต้นแบบครั้งเดียวที่มีหน่วยความจำรายวันล่าสุดไว้หน้าเทิร์นแรกนั้นได้ คำสั่งแชทเปล่า /new และ /reset จะได้รับการตอบรับโดยไม่เรียกใช้โมเดล คำนำหน้าเริ่มต้นควบคุมโดย agents.defaults.startupContext
  • เวลา (UTC + เขตเวลาของผู้ใช้)
  • แท็กตอบกลับ + พฤติกรรม Heartbeat
  • เมทาดาทารันไทม์ (โฮสต์/OS/โมเดล/thinking)

ดูรายละเอียดทั้งหมดใน พรอมป์ระบบ

สิ่งที่นับในหน้าต่างบริบท

ทุกอย่างที่โมเดลได้รับจะนับรวมในขีดจำกัดบริบท:

  • พรอมป์ระบบ (ทุกส่วนที่ระบุไว้ข้างต้น)
  • ประวัติการสนทนา (ข้อความผู้ใช้ + ผู้ช่วย)
  • การเรียกใช้เครื่องมือและผลลัพธ์เครื่องมือ
  • ไฟล์แนบ/ทรานสคริปต์ (รูปภาพ เสียง ไฟล์)
  • สรุป Compaction และอาร์ติแฟกต์การตัดแต่ง
  • ตัวหุ้มของผู้ให้บริการหรือส่วนหัวความปลอดภัย (มองไม่เห็น แต่ยังคงถูกนับ)

บางพื้นผิวที่ใช้รันไทม์หนักมีขีดจำกัดชัดเจนของตัวเอง:

  • agents.defaults.contextLimits.memoryGetMaxChars
  • agents.defaults.contextLimits.memoryGetDefaultLines
  • agents.defaults.contextLimits.toolResultMaxChars
  • agents.defaults.contextLimits.postCompactionMaxChars

การแทนที่รายเอเจนต์อยู่ใต้ agents.list[].contextLimits ตัวปรับเหล่านี้มีไว้ สำหรับข้อความตัดตอนรันไทม์ที่มีขอบเขตและบล็อกที่รันไทม์เป็นเจ้าของซึ่งถูกฉีดเข้าไป โดยแยกจาก ขีดจำกัดบูตสแตรป ขีดจำกัดบริบทเริ่มต้น และขีดจำกัดพรอมป์ Skills

สำหรับรูปภาพ OpenClaw จะย่อขนาดเพย์โหลดรูปภาพจากทรานสคริปต์/เครื่องมือก่อนเรียกผู้ให้บริการ ใช้ agents.defaults.imageMaxDimensionPx (ค่าเริ่มต้น: 1200) เพื่อปรับค่านี้:

  • ค่าที่ต่ำกว่ามักลดการใช้โทเค็นวิชันและขนาดเพย์โหลด
  • ค่าที่สูงกว่ารักษารายละเอียดภาพได้มากขึ้นสำหรับสกรีนช็อตที่เน้น OCR/UI

สำหรับรายละเอียดเชิงปฏิบัติ (ต่อไฟล์ที่ฉีดเข้าไป เครื่องมือ Skills และขนาดพรอมป์ระบบ) ให้ใช้ /context list หรือ /context detail ดู บริบท

วิธีดูการใช้โทเค็นปัจจุบัน

ใช้สิ่งเหล่านี้ในแชท:

  • /statusการ์ดสถานะที่มีอีโมจิจำนวนมาก พร้อมโมเดลของเซสชัน การใช้บริบท โทเค็นอินพุต/เอาต์พุตของคำตอบล่าสุด และ ต้นทุนโดยประมาณ (เฉพาะ API key)
  • /usage off|tokens|full → เพิ่ม ส่วนท้ายการใช้งานต่อคำตอบ ในทุกคำตอบ
    • คงอยู่ต่อเซสชัน (จัดเก็บเป็น responseUsage)
    • การยืนยันตัวตน OAuth ซ่อนต้นทุน (แสดงเฉพาะโทเค็น)
  • /usage cost → แสดงสรุปต้นทุนภายในเครื่องจากล็อกเซสชัน OpenClaw

พื้นผิวอื่น ๆ:

  • TUI/Web TUI: รองรับ /status + /usage
  • CLI: openclaw status --usage และ openclaw channels list แสดง หน้าต่างโควตาผู้ให้บริการที่ถูกทำให้เป็นมาตรฐาน (X% left ไม่ใช่ต้นทุนต่อคำตอบ) ผู้ให้บริการหน้าต่างการใช้งานปัจจุบัน: Anthropic, GitHub Copilot, Gemini CLI, OpenAI Codex, MiniMax, Xiaomi และ z.ai

พื้นผิวการใช้งานจะทำให้ชื่อแฝงฟิลด์ทั่วไปแบบเนทีฟของผู้ให้บริการเป็นมาตรฐานก่อนแสดงผล สำหรับทราฟฟิก Responses ตระกูล OpenAI จะรวมทั้ง input_tokens / output_tokens และ prompt_tokens / completion_tokens ดังนั้นชื่อฟิลด์เฉพาะการขนส่ง จะไม่เปลี่ยน /status, /usage หรือสรุปเซสชัน การใช้งาน JSON ของ Gemini CLI ก็ถูกทำให้เป็นมาตรฐานเช่นกัน: ข้อความตอบกลับมาจาก response และ stats.cached แมปเป็น cacheRead โดยใช้ stats.input_tokens - stats.cached เมื่อ CLI ละเว้นฟิลด์ stats.input แบบชัดเจน สำหรับทราฟฟิก Responses ตระกูล OpenAI แบบเนทีฟ ชื่อแฝงการใช้งาน WebSocket/SSE จะถูกทำให้เป็นมาตรฐานในแบบเดียวกัน และยอดรวมจะย้อนกลับไปใช้ input + output ที่ถูกทำให้เป็นมาตรฐานเมื่อ total_tokens หายไปหรือเป็น 0 เมื่อสแนปช็อตเซสชันปัจจุบันมีข้อมูลเบาบาง /status และ session_status ยังสามารถ กู้คืนตัวนับโทเค็น/แคชและป้ายกำกับโมเดลรันไทม์ที่ใช้งานอยู่จาก ล็อกการใช้งานทรานสคริปต์ล่าสุดได้ ค่าจริงแบบ live ที่ไม่เป็นศูนย์ซึ่งมีอยู่แล้วยังคงมี ลำดับความสำคัญเหนือค่าทางเลือกจากทรานสคริปต์ และยอดรวมทรานสคริปต์ที่เน้นพรอมป์และมีขนาดใหญ่กว่า สามารถชนะได้เมื่อยอดรวมที่จัดเก็บหายไปหรือมีค่าน้อยกว่า การยืนยันตัวตนสำหรับการใช้งานหน้าต่างโควตาผู้ให้บริการมาจากฮุกเฉพาะผู้ให้บริการเมื่อ พร้อมใช้งาน; มิฉะนั้น OpenClaw จะย้อนกลับไปจับคู่ข้อมูลรับรอง OAuth/API-key จากโปรไฟล์การยืนยันตัวตน env หรือ config รายการทรานสคริปต์ของผู้ช่วยจะคงรูปแบบการใช้งานที่ถูกทำให้เป็นมาตรฐานเดียวกัน รวมถึง usage.cost เมื่อโมเดลที่ใช้งานอยู่มีการกำหนดราคาไว้และผู้ให้บริการ ส่งคืนเมทาดาทาการใช้งาน สิ่งนี้ให้แหล่งข้อมูลที่เสถียรแก่ /usage cost และสถานะเซสชันที่อิงทรานสคริปต์ แม้หลังจากสถานะรันไทม์แบบ live หายไปแล้ว

OpenClaw แยกการบัญชีการใช้งานของผู้ให้บริการออกจากสแนปช็อตบริบทปัจจุบัน usage.total ของผู้ให้บริการอาจรวมอินพุตที่แคชไว้ เอาต์พุต และการเรียกโมเดลหลายครั้งใน tool-loop ดังนั้นจึงมีประโยชน์สำหรับต้นทุนและเทเลเมทรี แต่อาจแสดงเกินหน้าต่างบริบทแบบ live หน้าจอบริบทและการวินิจฉัยใช้สแนปช็อตพรอมป์ล่าสุด (promptTokens หรือการเรียกโมเดลล่าสุดเมื่อไม่มีสแนปช็อตพรอมป์ พร้อมใช้งาน) สำหรับ context.used

การประมาณต้นทุน (เมื่อแสดง)

ต้นทุนประมาณจากการกำหนดราคาของโมเดลใน config ของคุณ:

models.providers.<provider>.models[].cost

ค่าเหล่านี้คือ USD ต่อ 1M โทเค็น สำหรับ input, output, cacheRead และ cacheWrite หากไม่มีการกำหนดราคา OpenClaw จะแสดงเฉพาะโทเค็น โทเค็น OAuth จะไม่แสดงต้นทุนเป็นดอลลาร์

หลังจาก sidecar และช่องทางเข้าสู่เส้นทาง Gateway พร้อมใช้งาน OpenClaw จะเริ่ม บูตสแตรปการกำหนดราคาเบื้องหลังแบบไม่บังคับสำหรับ model refs ที่กำหนดค่าไว้ซึ่งยังไม่มี การกำหนดราคาในเครื่อง บูตสแตรปนั้นดึงแค็ตตาล็อกการกำหนดราคาระยะไกลของ OpenRouter และ LiteLLM ตั้งค่า models.pricing.enabled: false เพื่อข้ามการดึงแค็ตตาล็อกเหล่านั้น บนเครือข่ายออฟไลน์หรือถูกจำกัด; รายการ models.providers.*.models[].cost แบบชัดเจนยังคงใช้ขับเคลื่อนการประมาณต้นทุนภายในเครื่อง

Cache TTL และผลกระทบจากการตัดแต่ง

การแคชพรอมป์ของผู้ให้บริการใช้ได้เฉพาะภายในหน้าต่าง cache TTL เท่านั้น OpenClaw สามารถ รัน การตัดแต่ง cache-ttl แบบไม่บังคับ: จะตัดแต่งเซสชันเมื่อ cache TTL หมดอายุ แล้วรีเซ็ตหน้าต่างแคชเพื่อให้คำขอถัดไปสามารถใช้บริบทที่เพิ่งแคชใหม่ซ้ำ แทนการแคชประวัติทั้งหมดอีกครั้ง วิธีนี้ช่วยลดต้นทุน cache write เมื่อเซสชันไม่ได้ใช้งานเลย TTL

กำหนดค่าได้ใน การกำหนดค่า Gateway และดู รายละเอียดพฤติกรรมใน การตัดแต่งเซสชัน

Heartbeat สามารถคงแคชให้ อุ่น ข้ามช่วงว่างได้ หาก cache TTL ของโมเดลของคุณ คือ 1h การตั้งช่วงเวลา Heartbeat ให้ต่ำกว่านั้นเล็กน้อย (เช่น 55m) สามารถหลีกเลี่ยง การแคชพรอมป์ทั้งหมดใหม่ ลดต้นทุน cache write ได้

ในการตั้งค่าหลายเอเจนต์ คุณสามารถใช้ config โมเดลร่วมหนึ่งชุดและปรับพฤติกรรมแคช ต่อเอเจนต์ด้วย agents.list[].params.cacheRetention

สำหรับคู่มือครบถ้วนทีละตัวปรับ ดู การแคชพรอมป์

สำหรับการกำหนดราคา Anthropic API การอ่านแคชมีราคาถูกกว่าโทเค็นอินพุตอย่างมาก ขณะที่การเขียนแคชถูกคิดเงินด้วยตัวคูณที่สูงกว่า ดูการกำหนดราคาการแคชพรอมป์ของ Anthropic สำหรับอัตราและตัวคูณ TTL ล่าสุด: https://docs.anthropic.com/docs/build-with-claude/prompt-caching

ตัวอย่าง: คงแคช 1h ให้อุ่นด้วย Heartbeat

agents:
  defaults:
    model:
      primary: "anthropic/claude-opus-4-6"
    models:
      "anthropic/claude-opus-4-6":
        params:
          cacheRetention: "long"
    heartbeat:
      every: "55m"

ตัวอย่าง: ทราฟฟิกผสมพร้อมกลยุทธ์แคชรายเอเจนต์

agents:
  defaults:
    model:
      primary: "anthropic/claude-opus-4-6"
    models:
      "anthropic/claude-opus-4-6":
        params:
          cacheRetention: "long" # default baseline for most agents
  list:
    - id: "research"
      default: true
      heartbeat:
        every: "55m" # keep long cache warm for deep sessions
    - id: "alerts"
      params:
        cacheRetention: "none" # avoid cache writes for bursty notifications

agents.list[].params ผสานทับ params ของโมเดลที่เลือก ดังนั้นคุณสามารถ แทนที่เฉพาะ cacheRetention และสืบทอดค่าเริ่มต้นอื่น ๆ ของโมเดลไว้เหมือนเดิม

ตัวอย่าง: เปิดใช้งานส่วนหัว Anthropic 1M context beta

หน้าต่างบริบท 1M ของ Anthropic ปัจจุบันถูกควบคุมด้วยเบตา OpenClaw สามารถฉีดค่า anthropic-beta ที่ต้องใช้เมื่อคุณเปิดใช้งาน context1m บนโมเดล Opus หรือ Sonnet ที่รองรับ

agents:
  defaults:
    models:
      "anthropic/claude-opus-4-6":
        params:
          context1m: true

สิ่งนี้จะแมปไปยังส่วนหัวเบตา context-1m-2025-08-07 ของ Anthropic

สิ่งนี้ใช้เฉพาะเมื่อมีการตั้ง context1m: true บนรายการโมเดลนั้น

ข้อกำหนด: ข้อมูลรับรองต้องมีสิทธิ์ใช้ long-context หากไม่มีสิทธิ์ Anthropic จะตอบกลับด้วยข้อผิดพลาด rate limit ฝั่งผู้ให้บริการสำหรับคำขอนั้น

หากคุณยืนยันตัวตน Anthropic ด้วยโทเค็น OAuth/subscription (sk-ant-oat-*) OpenClaw จะข้ามส่วนหัวเบตา context-1m-* เพราะปัจจุบัน Anthropic ปฏิเสธชุดค่านี้ด้วย HTTP 401

เคล็ดลับในการลดแรงกดดันด้านโทเค็น

  • ใช้ /compact เพื่อสรุปเซสชันยาว ๆ
  • ตัดผลลัพธ์เครื่องมือขนาดใหญ่ในเวิร์กโฟลว์ของคุณ
  • ลด agents.defaults.imageMaxDimensionPx สำหรับเซสชันที่ใช้สกรีนช็อตมาก
  • ทำให้คำอธิบาย Skills สั้น (รายการ Skills ถูกฉีดเข้าไปในพรอมป์)
  • เลือกใช้โมเดลขนาดเล็กกว่าสำหรับงานสำรวจที่มีข้อความยาว

ดู Skills สำหรับสูตรโอเวอร์เฮดของรายการ Skills ที่แน่นอน

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