Concept internals
การติดตามการใช้งาน
คืออะไร
- ดึงข้อมูลการใช้งาน/โควตาของผู้ให้บริการโดยตรงจากเอ็นด์พอยต์การใช้งานของผู้ให้บริการแต่ละราย ไม่มีการประมาณค่าบริการของผู้ให้บริการ มีเฉพาะชื่อแผน ช่วงเวลาโควตา ยอดคงเหลือ ยอดใช้จ่าย งบประมาณ ประวัติค่าใช้จ่ายรายวัน การระบุโทเค็น/โมเดล หรือสรุปสถานะบัญชีตามที่ผู้ให้บริการรายงานเท่านั้น
- เอาต์พุตช่วงเวลาโควตาที่มนุษย์อ่านได้จะถูกปรับให้อยู่ในรูป
X% leftแม้ว่าผู้ให้บริการจะรายงานโควตาที่ใช้ไป โควตาคงเหลือ หรือเฉพาะจำนวนดิบก็ตาม ผู้ให้บริการที่ไม่มีช่วงเวลาโควตาซึ่งรีเซ็ตได้จะแสดงข้อความสรุปของผู้ให้บริการแทน (เช่น ยอดคงเหลือ) /statusระดับเซสชันและเครื่องมือsession_statusจะย้อนกลับไปใช้บันทึกทรานสคริปต์ของเซสชันเมื่อสแนปช็อตเซสชันแบบสดไม่มีข้อมูลโทเค็น/โมเดล การย้อนกลับนี้จะเติมตัวนับโทเค็น/แคชที่ขาดหายไป สามารถกู้คืนป้ายกำกับโมเดลรันไทม์ที่ใช้งานอยู่ และเลือกใช้ยอดรวมที่เน้นพรอมต์ซึ่งมากกว่าเมื่อข้อมูลเมตาของเซสชันขาดหายไปหรือมีค่าน้อยกว่า (totalTokensFresh !== true, ศูนย์ หรือต่ำกว่าค่าที่ได้จากทรานสคริปต์) ค่าจากระบบสดที่ไม่เป็นศูนย์มีลำดับความสำคัญเหนือค่าจากการย้อนกลับเสมอ
แสดงที่ใด
/statusในแชต: การ์ดสถานะพร้อมโทเค็นของเซสชันและค่าใช้จ่ายโดยประมาณ (เฉพาะโมเดลที่ใช้คีย์ API) เมื่อมีข้อมูล จะแสดงการใช้งานของผู้ให้บริการสำหรับ ผู้ให้บริการของโมเดลปัจจุบัน ในรูปช่วงเวลาX% leftที่ปรับให้เป็นมาตรฐานแล้ว หรือข้อความสรุปของผู้ให้บริการ/usage off|tokens|fullในแชต: ส่วนท้ายการใช้งานต่อการตอบกลับ/usage costในแชต: สรุปค่าใช้จ่ายภายในเครื่องที่รวบรวมจากบันทึกเซสชันของ OpenClaw- CLI:
openclaw status --usageแสดงรายละเอียดการใช้งาน/โควตาแยกตามผู้ให้บริการอย่างครบถ้วน - CLI:
openclaw models statusแสดงรายการโปรไฟล์การยืนยันตัวตนด้วย OAuth/โทเค็น และแสดงสรุปช่วงเวลาการใช้งานถัดจากผู้ให้บริการแต่ละรายที่มีข้อมูลดังกล่าว - UI ควบคุม: การใช้งาน แสดงการ์ดแผนและการเรียกเก็บเงินของผู้ให้บริการเหนือการวิเคราะห์โทเค็นและค่าใช้จ่ายโดยประมาณที่ OpenClaw คำนวณจากเซสชัน ข้อมูลประจำตัว Anthropic และ OpenAI Admin API จะเพิ่มยอดใช้จ่ายวันนี้ ช่วง 7 วัน และช่วง 30 วันตามที่ผู้ให้บริการรายงาน รวมถึงแนวโน้มรายวัน ยอดรวมโทเค็น โมเดลยอดนิยม และหมวดหมู่ค่าใช้จ่าย
- UI ควบคุม: ป๊อปโอเวอร์วงแหวนบริบทของตัวเขียนข้อความแชตแสดง การใช้งานแผน สำหรับผู้ให้บริการแบบสมัครสมาชิก — แถบแยกตามช่วงเวลา (5 ชั่วโมง รายสัปดาห์ และจำกัดขอบเขตตามโมเดล) พร้อมเวลารีเซ็ต แผนของผู้ให้บริการเมื่อทราบ (เช่น
Max (20x)) และเครดิตการใช้งานเพิ่มเติม เซสชันที่เรียกเก็บผ่านแผนจะซ่อนค่าประมาณเป็นดอลลาร์ต่อโทเค็น ส่วนเซสชันที่เรียกเก็บผ่าน API จะคงEst. costและรายละเอียดค่าใช้จ่ายแยกตามประเภทไว้ การตั้งค่า Claude Code CLI (claude-cli) ใช้ข้อมูลการใช้งานการสมัครสมาชิก Anthropic ชุดเดียวกัน - แถบเมนู macOS: ส่วนราก "การใช้งาน" จะปรากฏใต้บริบทเมื่อมีสแนปช็อตการใช้งานของผู้ให้บริการ ดู แถบเมนู
openclaw channels list จะไม่แสดงการใช้งานของผู้ให้บริการอีกต่อไป แต่จะแนะนำผู้ใช้ไปยัง openclaw status หรือ openclaw models list แทน
ประวัติค่าใช้จ่ายของ Anthropic และ OpenAI
โควตาการสมัครสมาชิกและการเรียกเก็บเงินผ่าน API เป็นพื้นผิวข้อมูลของผู้ให้บริการที่แตกต่างกัน:
- ข้อมูลประจำตัวสำหรับการสมัครสมาชิก/การตั้งค่า Anthropic ยังคงแสดงช่วงเวลาโควตาของ Claude และงบประมาณการใช้งานเพิ่มเติมซึ่งเป็นตัวเลือก ตั้งค่า
ANTHROPIC_ADMIN_KEYหรือANTHROPIC_ADMIN_API_KEYเพื่อแสดงประวัติ Usage and Cost API ขององค์กรแทน ระบบจะตรวจพบข้อมูลประจำตัวของผู้ให้บริการ Anthropic ที่ขึ้นต้นด้วยsk-ant-adminโดยอัตโนมัติ - OAuth ของ OpenAI ChatGPT/Codex ยังคงแสดงแผน ช่วงเวลาโควตา และยอดเครดิตคงเหลือ ตั้งค่า
OPENAI_ADMIN_KEYเพื่อแสดงประวัติค่าใช้จ่ายและการใช้งาน completions ขององค์กรแทน และสามารถตั้งค่าOPENAI_PROJECT_IDเพื่อจำกัดขอบเขตไว้ที่โปรเจกต์เดียวได้ OpenClaw จะไม่ส่งข้อมูลประจำตัวสำหรับการอนุมานจากOPENAI_API_KEYการกำหนดค่าผู้ให้บริการ หรือโปรไฟล์การยืนยันตัวตนไปยัง API ขององค์กร เนื่องจากคีย์เหล่านั้นอาจเป็นของเอ็นด์พอยต์แบบกำหนดเอง
ข้อมูลประจำตัวของผู้ดูแลระบบมีลำดับความสำคัญสูงกว่า เนื่องจากให้ข้อมูลการเรียกเก็บเงินจริงขององค์กร OpenClaw ไม่รวมยอดรวมที่ผู้ให้บริการรายงานเหล่านี้เข้ากับค่าประมาณจากเซสชันภายในเครื่อง ทั้งสองส่วนตั้งใจใช้ตอบคำถามคนละประเภท
โหมดเริ่มต้นของส่วนท้ายการใช้งาน
/usage off|tokens|full ตั้งค่าส่วนท้ายสำหรับเซสชันและระบบจะจดจำค่านั้นสำหรับ
เซสชันดังกล่าว messages.responseUsage กำหนดค่าเริ่มต้นของโหมดนี้ให้เซสชันที่ยังไม่ได้
เลือกโหมด เพื่อให้เปิดส่วนท้ายเป็นค่าเริ่มต้นได้โดยไม่ต้องพิมพ์ /usage ทุกครั้ง
ตั้งค่าโหมดเดียวสำหรับทุกช่องทาง หรือใช้แมปแยกตามช่องทางโดยมี default เป็นค่าทดแทน:
{ "messages": { "responseUsage": "tokens", // หรือ: { "default": "off", "discord": "full" } },}ค่าที่ยอมรับ: "off", "tokens", "full" และนามแฝงเดิม "on" (ถือเป็น "tokens")
สถานะเซสชันที่แตกต่างกันสามแบบ
ฟิลด์ responseUsage ของเซสชันมีสถานะที่แสดงแทนได้สามแบบ โดยแต่ละแบบมี
ความหมายต่างกัน:
| สถานะ | ค่าที่จัดเก็บ | โหมดที่มีผล |
|---|---|---|
| ไม่ได้ตั้งค่า / สืบทอด | undefined (ไม่มีอยู่) |
ใช้ค่าเริ่มต้นจากการกำหนดค่า messages.responseUsage ต่อด้วย off |
| ปิดอย่างชัดเจน | "off" (จัดเก็บไว้) |
ปิดเสมอ ค่าเริ่มต้นการกำหนดค่าที่ไม่ใช่ปิดไม่สามารถเปิดส่วนท้ายอีกครั้งได้ |
| เปิดอย่างชัดเจน | "tokens" หรือ "full" (จัดเก็บไว้) |
ใช้โหมดนั้นโดยไม่คำนึงถึงค่าเริ่มต้นการกำหนดค่า |
ลำดับความสำคัญ
โหมดที่มีผล = การแทนที่ของเซสชัน → รายการการกำหนดค่าช่องทาง → default → off
ค่า /usage off ที่ระบุอย่างชัดเจนจะถูก บันทึกถาวร เป็นค่าตรงตัว "off" ใน
เซสชัน ซึ่งไม่เหมือนกับ "ไม่ได้ตั้งค่า" ค่าเริ่มต้น messages.responseUsage
ที่ไม่ใช่ปิดจะไม่สามารถเปิดส่วนท้ายกลับมาได้หลังจากผู้ใช้ปิดอย่างชัดเจนแล้ว
การรีเซ็ตเทียบกับการปิด
/usage offบังคับปิดส่วนท้ายและบันทึกตัวเลือกนั้นไว้ การตั้งค่าเริ่มต้น ที่ไม่ใช่ปิดไม่สามารถแทนที่ค่านี้ได้/usage reset(นามแฝง:default,inherit,inherited,clear,unpin) ล้างการแทนที่ของเซสชัน จากนั้นเซสชันจะ สืบทอด ค่าเริ่มต้นการกำหนดค่าที่มีผล (messages.responseUsage) หากไม่ได้กำหนดค่าเริ่มต้นไว้ ส่วนท้ายจะยังคงปิดอยู่- การรีเซ็ตเซสชันทั้งหมด (
/resetหรือ/new) หรือการเปลี่ยนรอบเซสชันจะ คง ค่ากำหนดโหมดการใช้งานที่ระบุไว้อย่างชัดเจน เพื่อให้ตัวเลือกการแสดงผลของผู้ใช้ยังคงอยู่ หลังการเปลี่ยนรอบเซสชัน เฉพาะ/usage reset(และนามแฝงของคำสั่งนี้) เท่านั้นที่ล้างการแทนที่
พฤติกรรมการสลับ
/usage ที่ไม่มีอาร์กิวเมนต์จะวนลำดับ: ปิด → โทเค็น → เต็มรูปแบบ → ปิด จุดเริ่มต้น
ของการวนลำดับคือโหมดปัจจุบันที่ มีผล (การแทนที่ของเซสชันจะใช้
ค่าเริ่มต้นการกำหนดค่าเมื่อไม่ได้ตั้งค่า) ดังนั้นการวนลำดับจึงตรงกับสิ่งที่
ผู้ใช้เห็นในส่วนท้ายขณะนั้นเสมอ
การกำหนดค่า
หากไม่มีการกำหนดค่า ระบบจะคงพฤติกรรมเดิมไว้ (ปิดส่วนท้ายจนกว่าจะใช้ /usage) ใช้
/usage reset เพื่อล้างการแทนที่ของเซสชันและกลับไปสืบทอดค่าเริ่มต้นที่กำหนดไว้
ส่วนท้าย /usage full แบบกำหนดเอง
/usage tokens จะแสดงบรรทัด Usage: X in / Y out แบบธรรมดาเสมอ (พร้อมคำต่อท้ายเกี่ยวกับแคชและ
ค่าใช้จ่ายโดยประมาณเมื่อมีข้อมูล) เฉพาะ /usage full เท่านั้นที่แสดงส่วนท้ายแบบละเอียดกว่า
ซึ่งอธิบายไว้ด้านล่าง
/usage full แสดงส่วนท้ายแบบกะทัดรัดในตัว พร้อมโมเดล การใช้เหตุผล โหมดเร็ว/ช้า
หน้าต่างบริบท และค่าใช้จ่ายเมื่อมีฟิลด์เหล่านั้น ส่วนท้ายในตัวไม่ต้องใช้
ไฟล์เทมเพลต
messages.usageTemplate ใช้สำหรับเค้าโครงแบบกำหนดเองขั้นสูงเท่านั้น ค่านี้เป็น
พาธไฟล์ JSON (รองรับ ~) หรือออบเจ็กต์แบบอินไลน์ และจะแทนที่ส่วนท้ายในตัว
เมื่อค่าถูกต้อง พาธไฟล์จะถูกเฝ้าดูและโหลดใหม่แบบสดเมื่อมีการเปลี่ยนแปลง
{ "messages": { "usageTemplate": "~/.openclaw/usage-footer.json" }}เทมเพลตที่ไม่มีอยู่หรือว่างเปล่าจะย้อนกลับไปใช้ส่วนท้ายในตัวโดยไม่มีข้อความแจ้ง เทมเพลตที่กำหนดค่าไว้ซึ่งอ่านไม่ได้ หรือไม่ถูกต้อง (JSON ไม่ถูกต้อง หรือมีโครงสร้างที่ไม่มีส่วนเอาต์พุตซึ่งแสดงผลได้) จะย้อนกลับไปใช้ส่วนท้ายในตัวเช่นกัน และแสดงคำเตือนแก่ผู้ดำเนินการ
เริ่มต้นเทมเพลตแบบกำหนดเองจากโครงสร้างในตัว แล้วแก้ไขส่วนที่ต้องการ เปลี่ยนแปลง:
{ "schema": "openclaw.usageBar.v1", "scales": { "braille": "⠐⡀⡄⡆⡇⣇⣧⣷⣿", "block": "░▏▎▍▌▋▊▉█", "shade": "░▒▓█", "moon": "🌑🌘🌗🌖🌕", "level": "▁▂▃▄▅▆▇█", "weather": ["🥶", "☁️", "🌥", "⛅️", "🌤", "☀️"], "plants": ["", "🍂", "🌱", "☘️", "🍀", "🌿"], "moons6": ["🌑", "🌚", "🌘", "🌗", "🌖", "🌝"], }, "aliases": { "models": { "claude-opus-4-6": "opus46", "claude-opus-4-8": "opus48", "claude-sonnet-4-6": "sonnet46", "claude-haiku-4-5": "haiku45", "gpt-5.5": "gpt5.5", }, "reasoning": { "off": "🌑", "minimal": "🌚", "low": "🌘", "medium": "🌗", "high": "🌕", "xhigh": "🌝", }, }, "output": { "sep": "", "default": [ { "text": "{model.provider}{identity.emoji|🤖}{model.display_name|alias:models}" }, { "map": "model.is_fallback", "cases": { "true": "🔄" } }, { "map": "model.is_override", "cases": { "true": "📌" } }, { "when": "model.reasoning", "text": "{model.reasoning|alias:reasoning}" }, { "map": "state.fast_mode", "cases": { "true": "⚡️", "false": "🐌" } }, { "when": "context.max_tokens", "text": " | 📚[{context.pct_used|meter:5:braille}]{context.max_tokens|num}", }, { "when": "cost.turn_usd", "text": " 💰{cost.turn_usd|fixed:4}" }, ], "surfaces": { "discord": [ { "text": "-# -\n" }, { "text": "-# {model.provider}{identity.emoji|🤖}{model.display_name|alias:models}" }, { "map": "model.is_fallback", "cases": { "true": "🔄" } }, { "map": "model.is_override", "cases": { "true": "📌" } }, { "when": "model.reasoning", "text": "{model.reasoning|alias:reasoning}" }, { "map": "state.fast_mode", "cases": { "true": "⚡️", "false": "🐌" } }, { "when": "context.max_tokens", "text": " | 📚[{context.pct_used|meter:5:braille}]{context.max_tokens|num}", }, { "when": "cost.turn_usd", "text": " 💰{cost.turn_usd|fixed:4}" }, ], }, },}โครงสร้าง
{ "schema": "openclaw.usageBar.v1", "scales": { "<name>": "สัญลักษณ์จากต่ำไปสูง" }, // สตริง (1 สัญลักษณ์/อักขระ) หรืออาร์เรย์ "aliases": { "<table>": { "<value>": "<label>" } }, "output": { "sep": "", // เชื่อมส่วนที่ยังคงอยู่ "default": [/* pieces */], // ค่าทดแทนสำหรับทุกพื้นผิว "surfaces": { "discord": [/* pieces */], "telegram": [/* pieces */], }, },}แต่ละพื้นผิวเป็นรายการ ส่วนประกอบ ที่เรียงลำดับไว้ เอนจินจะแสดงผลแต่ละส่วน ตัดส่วนที่ว่างออก
และเชื่อมส่วนที่เหลือด้วย sep พื้นผิวที่ไม่มีรายการจะใช้
output.default
พาธสัญญา
ส่วนประกอบจะอ่านค่าจากสัญญารายเทิร์นผ่านพาธแบบจุด ค่าที่ไม่มีอยู่จะเป็น
ค่าว่าง (ดังนั้นตัวป้องกัน when หรือ |fallback จะช่วยให้ส่วนประกอบไม่มีข้อมูลส่วนเกิน)
| พาธ | ความหมาย |
|---|---|
surface |
รหัสช่องทาง (discord/telegram/ฯลฯ) |
agentId / chat_type |
รหัสเอเจนต์เจ้าของ / ประเภทพื้นผิวแชต |
model.id / model.display_name / model.provider |
รหัสโมเดล / ชื่อที่แสดง / รหัสผู้ให้บริการ |
model.actual, model.resolved_ref |
การอ้างอิงผู้ให้บริการ/โมเดลที่ใช้จริงสำหรับเทิร์น |
model.requested |
การอ้างอิงผู้ให้บริการ/โมเดลที่ร้องขอ (ก่อนใช้ทางเลือกสำรอง) |
model.reasoning |
ระดับความพยายาม (off ถึง xhigh) |
model.is_fallback / model.is_override |
บูลีน: ใช้ทางเลือกสำรอง / ตรึงโมเดล |
model.override_source / model.auth_mode |
ป้ายกำกับแหล่งที่มาของการแทนที่ค่า / โหมดข้อมูลประจำตัว (oauth, api-key, token, mixed, aws-sdk, unknown) |
state.fast_mode |
บูลีน: เร็วเทียบกับช้า |
state.compactions |
จำนวน Compaction สำหรับเซสชัน |
context.max_tokens / context.used_tokens / context.pct_used |
งบประมาณของหน้าต่าง / โทเค็นที่ใช้ไป / ใช้ไป 0-100 |
usage.input_tokens / usage.output_tokens / usage.total_tokens |
ค่ารวมของเทิร์น |
usage.cache_read_tokens / usage.cache_write_tokens |
โทเค็นที่อ่านจากแคชและเขียนลงแคชสำหรับเทิร์น |
usage.has_tokens / usage.has_split_tokens / usage.has_total_only_tokens |
ตัวควบคุมการแสดงโทเค็น |
usage.cache_hit_pct |
สัดส่วนการอ่านจากแคชต่อโทเค็นพรอมต์ทั้งหมด |
usage.last.input_tokens / usage.last.output_tokens / usage.last.cache_hit_pct |
เฉพาะการเรียกโมเดลครั้งสุดท้าย (มี cache_read_tokens, cache_write_tokens, total_tokens ด้วย) |
cost.turn_usd / cost.available |
ค่าใช้จ่ายโดยประมาณของเทิร์น / แก้ไขตารางค่าใช้จ่ายได้หรือไม่ |
timing.duration_ms |
ระยะเวลาของเทิร์นตามเวลาจริง |
identity.name / identity.emoji / identity.avatar |
ชื่ออัตลักษณ์เอเจนต์ / อีโมจิ / อวาตาร์ |
session.id |
รหัสเซสชัน |
(หน้าต่างขีดจำกัดอัตราของผู้ให้บริการ ไม่ อยู่ในสัญญานี้ ปัจจุบันไม่มีพาธที่มีค่าเป็นอาร์เรย์ ดังนั้นส่วน each จึงไม่มีสิ่งใดให้วนซ้ำ)
กริยา
ส่งค่าผ่านกริยาจากซ้ายไปขวา ส่วนที่ไม่ใช่กริยาคือค่าทางเลือกสำรอง
| กริยา | ผลลัพธ์ | ตัวอย่าง |
|---|---|---|
num |
จำนวนแบบย่อ | 272000 -> 272k |
fixed:N |
ทศนิยม N ตำแหน่ง (0..100, ค่าเริ่มต้น 2) |
0.0377 |
dur |
แปลงวินาทีเป็นระยะเวลา | 14820 -> 4h07m |
pct |
ต่อท้าย % |
96 -> 96% |
inv |
100 - x |
สำหรับแปลงค่าที่ใช้ไปเป็นค่าคงเหลือ |
alias:TABLE |
ค้นหาใน aliases และสะท้อนค่าเดิมหากไม่มีในรายการ |
medium -> 🌗 |
meter:W:SCALE |
แถบสัญลักษณ์กว้าง W เซลล์สำหรับค่า 0-100 | [⣿⣿⠐⠐⠐] (meter:1 = หนึ่งสัญลักษณ์) |
fixed:N ยอมรับเฉพาะจำนวนเต็มฐานสิบที่สมบูรณ์ตั้งแต่ 0 ถึง 100 อาร์กิวเมนต์
ความแม่นยำที่ไม่ถูกต้องจะทำให้การแทรกค่านั้นว่างเปล่า
meter:W:SCALE ยอมรับเฉพาะความกว้างที่เป็นจำนวนเต็มฐานสิบสมบูรณ์ตั้งแต่ 1 ถึง 100 เว้นความกว้างว่างไว้เพื่อใช้ค่าเริ่มต้น 5 (meter::braille) ความกว้าง
ที่ไม่ถูกต้องจะทำให้การแทรกค่านั้นว่างเปล่า
รูปแบบส่วนประกอบ
{ "text": "📚 {context.max_tokens|num}" }: ข้อความตามตัวอักษร + การแทรกค่า{ "when": "<path>", "text": "..." }: แสดงผลเฉพาะเมื่อพาธมีค่าเป็นจริง{ "map": "<path>", "cases": { "true": "⚡", "false": "🐌" } }: แปลงค่าเป็นสัญลักษณ์ (กรณี_defaultครอบคลุมค่าที่ไม่ตรงกัน){ "each": "<array-path>", "item": "{label}" }: วนซ้ำพาธที่มีค่าเป็นอาร์เรย์ (ขณะนี้ไม่มีพาธในสัญญาที่เป็นอาร์เรย์)
ตัวอย่าง
{ "schema": "openclaw.usageBar.v1", "scales": { "braille": "⠐⡀⡄⡆⡇⣇⣧⣷⣿" }, "aliases": { "reasoning": { "medium": "🌗", "high": "🌕" } }, "output": { "surfaces": { "discord": [ { "text": "{model.display_name}" }, { "when": "model.reasoning", "text": " {model.reasoning|alias:reasoning}" }, { "map": "state.fast_mode", "cases": { "true": " ⚡", "false": " 🐌" } }, { "when": "context.max_tokens", "text": " | 📚 [{context.pct_used|meter:5:braille}]{context.max_tokens|num}", }, ], }, },}แสดงผล เช่น claude-sonnet-4-6 🌗 🐌 | 📚 [⣿⣿⣿⣿⣧]272k
ผู้ให้บริการ + ข้อมูลประจำตัว
การใช้งานจะถูกซ่อนเมื่อไม่สามารถระบุการยืนยันตัวตนสำหรับการใช้งานของผู้ให้บริการที่ใช้ได้ OpenClaw
ค้นพบ Plugin ผู้ให้บริการที่เปิดใช้งานและประกาศ
contracts.usageProviders พร้อมทั้งใช้งานทั้ง resolveUsageAuth และ
fetchUsageSnapshot โดยอัตโนมัติ ไม่มีรายการอนุญาตผู้ให้บริการแยกต่างหากในแกนหลัก สัญญาแบบคงที่
ช่วยจำกัดขอบเขตการค้นพบโดยไม่ต้องนำเข้า Plugin ผู้ให้บริการทุกรายการ แต่ละ
Plugin เป็นเจ้าของปลายทางต้นทางและการแมปการตอบกลับของตนเอง สแนปชอต
ที่ใช้ร่วมกันทำให้ชื่อแผน หน้าต่างโควตา ยอดคงเหลือ ค่าใช้จ่าย และงบประมาณ
ไม่ขึ้นกับผู้ให้บริการสำหรับผู้ใช้ CLI, แอป และ Control UI
- Anthropic (Claude): โทเค็น OAuth ในโปรไฟล์การยืนยันตัวตน หากโทเค็น OAuth ไม่มี
ขอบเขต
user:profileระบบจะใช้เว็บเซสชันclaude.aiเป็นทางเลือกสำรอง (CLAUDE_AI_SESSION_KEY,CLAUDE_WEB_SESSION_KEYหรือคุกกี้sessionKey=ในCLAUDE_WEB_COOKIE) เมื่อตั้งค่าไว้ ขีดจำกัดเฉพาะโมเดลและค่าใช้จ่าย/งบประมาณรายเดือนของการใช้งานเพิ่มเติมที่เปิดใช้งานจะถูกรวมไว้ เมื่อ Anthropic รายงานข้อมูลดังกล่าว ส่วนคีย์ Anthropic Admin API ที่ระบุชัดเจน หรือโปรไฟล์ผู้ให้บริการsk-ant-admin...ที่ตรวจพบโดยอัตโนมัติ จะแสดงค่าใช้จ่ายระดับองค์กรย้อนหลัง 30 วัน และประวัติ Messages API แทน - ClawRouter: คีย์ API (
CLAWROUTER_API_KEY) แสดงหน้าต่างงบประมาณรายเดือน และงบประมาณ USD ที่ระบุประเภทไว้เมื่อกำหนดค่า มิฉะนั้นจะแสดงค่าใช้จ่ายรวมและ สรุปคำขอ/โทเค็น/ค่าใช้จ่าย - DeepSeek: คีย์ API ผ่านสภาพแวดล้อม/การกำหนดค่า/ที่จัดเก็บการยืนยันตัวตน (
DEEPSEEK_API_KEY) แสดงยอดคงเหลือแต่ละสกุลเงินที่ผู้ให้บริการรายงาน - GitHub Copilot: โทเค็น OAuth ในโปรไฟล์การยืนยันตัวตน
- Gemini CLI: โทเค็น OAuth ในโปรไฟล์การยืนยันตัวตน
- MiniMax: คีย์ API หรือโปรไฟล์การยืนยันตัวตน MiniMax OAuth OpenClaw ถือว่า
minimax,minimax-cnและminimax-portalเป็นพื้นผิวโควตา MiniMax เดียวกัน เลือกใช้ MiniMax OAuth ที่จัดเก็บไว้ก่อนเมื่อมี และหากไม่มีจึงใช้MINIMAX_CODE_PLAN_KEY,MINIMAX_CODING_API_KEYหรือMINIMAX_API_KEYเป็นทางเลือกสำรอง การสำรวจการใช้งานจะหาโฮสต์ Coding Plan จากmodels.providers.minimax-portal.baseUrlหรือmodels.providers.minimax.baseUrlเมื่อกำหนดค่าไว้ และหากไม่มีจะใช้ โฮสต์ MiniMax CN ฟิลด์ดิบusage_percent/usagePercentของ MiniMax หมายถึงโควตา คงเหลือ ดังนั้น OpenClaw จะกลับค่าก่อนแสดงผล โดยฟิลด์แบบอิงจำนวนมีลำดับความสำคัญสูงกว่า เมื่อมีอยู่- ป้ายกำกับหน้าต่างมาจากฟิลด์ชั่วโมง/นาทีของผู้ให้บริการเมื่อมี จากนั้น
จึงใช้ช่วง
start_time/end_timeเป็นทางเลือกสำรอง - หากปลายทาง coding-plan ส่งคืน
model_remainsOpenClaw จะเลือก รายการโมเดลแชตก่อน สร้างป้ายกำกับหน้าต่างจากการประทับเวลาเมื่อไม่มีฟิลด์window_hours/window_minutesที่ระบุชัดเจน และรวมชื่อโมเดล ไว้ในป้ายกำกับแผน
- ป้ายกำกับหน้าต่างมาจากฟิลด์ชั่วโมง/นาทีของผู้ให้บริการเมื่อมี จากนั้น
จึงใช้ช่วง
- OpenAI (แผน Codex/ChatGPT): โทเค็น OAuth ในโปรไฟล์การยืนยันตัวตน (ส่งส่วนหัว
ChatGPT-Account-Idเมื่อมีรหัสบัญชี) แสดงแผน ChatGPT หน้าต่าง Codex ที่รีเซ็ตได้ และยอดเครดิตเมื่อมีการรายงาน เครดิตยังคงเป็นเครดิตของผู้ให้บริการ OpenClaw ไม่ระบุว่าเป็นดอลลาร์OPENAI_ADMIN_KEYเพิ่ม ค่าใช้จ่ายระดับองค์กรย้อนหลัง 30 วันและประวัติการใช้งาน completions เมื่อคีย์มีสิทธิ์เข้าถึง Usage Dashboard ข้อมูลประจำตัวสำหรับการอนุมานจะไม่ถูกส่งต่อไปยัง API ระดับองค์กร - OpenRouter: คีย์ API หรือคีย์ API ที่รองรับด้วย OAuth (
OPENROUTER_API_KEYหรือโปรไฟล์ การยืนยันตัวตน) รวมปลายทางเครดิตบัญชีเข้ากับปลายทางโควตาคีย์ เพื่อให้แสดงยอดคงเหลือ/ค่าใช้จ่ายของบัญชี งบประมาณคีย์ และการใช้งาน รายวัน/รายสัปดาห์/รายเดือนได้เมื่อข้อมูลประจำตัวสามารถเข้าถึงข้อมูลเหล่านั้น แต่ละปลายทางสามารถเพิ่มข้อมูลลงในสแนปชอต ได้อย่างอิสระ - Venice: คีย์ API ผ่านสภาพแวดล้อม/การกำหนดค่า/ที่จัดเก็บการยืนยันตัวตน (
VENICE_API_KEY) แสดงยอดคงเหลือ USD และ DIEM รวมถึงการใช้โควตาการจัดสรร DIEM ตามยุคเมื่อมีการรายงาน - Xiaomi MiMo: พื้นผิวการใช้งานสองส่วนแยกกัน แบบจ่ายตามการใช้งานใช้คีย์ API
(
XIAOMI_API_KEY) ส่วน Token Plan ใช้คีย์แยกต่างหาก (XIAOMI_TOKEN_PLAN_API_KEY) ขณะนี้ทั้งสองส่วนไม่รายงานหน้าต่างโควตา - z.ai: คีย์ API ผ่านสภาพแวดล้อม/การกำหนดค่า/ที่จัดเก็บการยืนยันตัวตน (
ZAI_API_KEYหรือZ_AI_API_KEY)