Concept internals

Відстеження використання

Що це таке

  • Отримує дані про використання та квоти постачальника безпосередньо з кінцевої точки використання кожного постачальника. Жодних оцінок оплати постачальника; лише повідомлені постачальником назви планів, вікна квот, баланси, витрати, бюджети, щоденна історія вартості, атрибуція токенів і моделей або зведення стану облікового запису.
  • Зручний для читання вивід вікна квоти нормалізується до залишилося X%, навіть якщо постачальник повідомляє використану квоту, залишок квоти або лише необроблені лічильники. Для постачальників без вікон квот зі скиданням натомість відображається текстове зведення постачальника (наприклад, баланс).
  • /status на рівні сеансу та інструмент session_status використовують журнал транскрипту сеансу як резервне джерело, якщо в актуальному знімку сеансу відсутні дані про токени або модель. Це резервне джерело заповнює відсутні лічильники токенів і кешу, може відновити мітку активної моделі середовища виконання та надає перевагу більшому загальному значенню, орієнтованому на запит, якщо метадані сеансу відсутні або містять менше значення (totalTokensFresh !== true, нуль чи значення нижче за отримане з транскрипту). Ненульові актуальні значення завжди мають перевагу над резервними.

Де це відображається

  • /status у чатах: картка стану з токенами сеансу та орієнтовною вартістю (лише для моделей із ключем API). Дані про використання постачальника відображаються для постачальника поточної моделі, якщо доступні, як нормалізоване вікно залишилося X% або текстове зведення постачальника.
  • /usage off|tokens|full у чатах: примітка про використання для кожної відповіді.
  • /usage cost у чатах: локальне зведення вартості, агреговане з журналів сеансів OpenClaw.
  • CLI: openclaw status --usage виводить повну розбивку використання та квот за постачальниками.
  • CLI: openclaw models status перелічує профілі автентифікації OAuth/токеном і показує зведення вікна використання біля кожного постачальника, для якого воно доступне.
  • Інтерфейс керування: Використання показує картки плану й оплати постачальника над отриманим із сеансу OpenClaw аналізом токенів та орієнтовної вартості. Облікові дані Anthropic і OpenAI Admin API додають повідомлені постачальником витрати за сьогодні, 7 і 30 днів, щоденні тенденції, загальну кількість токенів, найпопулярніші моделі та категорії вартості.
  • Інтерфейс керування: спливне вікно кільцевого індикатора контексту в полі введення чату показує використання плану для постачальників із підпискою — смуги для кожного вікна (5-годинного, тижневого, обмеженого моделлю) із часом скидання, план постачальника, якщо він відомий (наприклад, Max (20x)), і кредити додаткового використання. Для сеансів, що оплачуються через план, оцінки вартості кожного токена приховано; сеанси з оплатою через API зберігають Орієнт. вартість і розбивку вартості за типами. Налаштування 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, щоб натомість показувати історію організації з API використання та вартості. Облікові дані постачальника Anthropic, що починаються з sk-ant-admin, виявляються автоматично.
  • OAuth OpenAI ChatGPT/Codex і надалі показує план, вікна квот і кредитний баланс. Установіть OPENAI_ADMIN_KEY, щоб натомість показувати історію вартості організації та використання завершень; за потреби встановіть OPENAI_PROJECT_ID, щоб обмежити її одним проєктом. OpenClaw ніколи не надсилає облікові дані для інференсу з OPENAI_API_KEY, конфігурації постачальника або профілів автентифікації до API організації, оскільки ці ключі можуть належати власним кінцевим точкам.

Облікові дані адміністратора мають пріоритет, оскільки надають фактичні дані про оплату організації. OpenClaw не поєднує ці повідомлені постачальником підсумки зі своїми локальними оцінками сеансів; ці два розділи навмисно відповідають на різні запитання.

Типовий режим примітки про використання

/usage off|tokens|full задає примітку для сеансу, і цей вибір зберігається для цього сеансу. messages.responseUsage задає початкове значення режиму для сеансів, у яких його ще не вибрано, тому примітку можна ввімкнути типово без введення /usage щоразу.

Установіть один режим для кожного каналу або карту режимів за каналами з резервним значенням default:

jsonc
{  "messages": {    "responseUsage": "tokens",    // або: { "default": "off", "discord": "full" }  },}

Допустимі значення: "off", "tokens", "full" і застарілий псевдонім "on" (обробляється як "tokens").

Три окремі стани сеансу

Поле responseUsage сеансу має три можливі стани, кожен із власною семантикою:

Стан Збережене значення Ефективний режим
Не задано / успадкувати undefined (відсутнє) Переходить до типового значення конфігурації messages.responseUsage, а потім до off.
Явно вимкнено "off" (збережено) Завжди вимкнено; типове значення конфігурації, відмінне від off, не може ввімкнути примітку.
Явно ввімкнено "tokens" або "full" (збережено) Цей режим незалежно від типового значення конфігурації.

Пріоритет

Ефективний режим = перевизначення сеансу → запис конфігурації каналу → defaultoff.

Явний виклик /usage off зберігається в сеансі як буквальне значення "off", а не як стан «не задано». Типове значення messages.responseUsage, відмінне від off, не може повторно ввімкнути примітку після того, як користувач явно її вимкнув.

Скидання та вимкнення

  • /usage off примусово вимикає примітку та зберігає цей вибір. Налаштоване типове значення, відмінне від off, не може його перевизначити.
  • /usage reset (псевдоніми: default, inherit, inherited, clear, unpin) очищає перевизначення сеансу. Після цього сеанс успадковує ефективне типове значення конфігурації (messages.responseUsage). Якщо типове значення не налаштовано, примітка залишається вимкненою.
  • Повне скидання сеансу (/reset або /new) чи перехід до нового сеансу зберігає явну перевагу режиму використання, щоб вибраний користувачем спосіб відображення зберігався під час переходів між сеансами. Лише /usage reset (і його псевдоніми) очищає перевизначення.

Поведінка перемикання

/usage без аргументів циклічно перемикає: off → tokens → full → off. Початковою точкою циклу є ефективний поточний режим (перевизначення сеансу з переходом до типового значення конфігурації, якщо його не задано), тому цикл завжди відповідає тому, що користувач наразі бачить у примітці.

Конфігурація

Без конфігурації зберігається попередня поведінка (примітку вимкнено до виклику /usage). Використовуйте /usage reset, щоб очистити перевизначення сеансу й знову успадкувати налаштоване типове значення.

Власна примітка /usage full

/usage tokens завжди відображає простий рядок Використання: X вхідних / Y вихідних (а також суфікси кешу й орієнтовної вартості, якщо вони доступні). Лише /usage full відображає розширену примітку, описану нижче.

/usage full показує вбудовану компактну примітку з моделлю, міркуванням, швидким/повільним режимом, вікном контексту та вартістю, якщо ці поля доступні. Для вбудованої примітки файл шаблону не потрібен.

messages.usageTemplate призначений лише для розширених власних макетів. Значенням є шлях до файлу JSON (підтримує ~) або вбудований об'єкт; якщо воно коректне, то замінює вбудовану примітку. Зміни у файлі за вказаним шляхом відстежуються, і файл автоматично перезавантажується.

json
{  "messages": {    "usageTemplate": "~/.openclaw/usage-footer.json"  }}

Якщо шаблон відсутній або порожній, без повідомлень використовується вбудована примітка. Нечитабельні або некоректні налаштовані шаблони (помилковий JSON чи структура без придатних до відображення частин) також замінюються вбудованою приміткою, а оператор отримує попередження.

Почніть власний шаблон із вбудованої структури, а потім змініть потрібні частини:

jsonc
{  "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}" },      ],    },  },}

Структура

jsonc
{  "schema": "openclaw.usageBar.v1",  "scales": { "<name>": "low-to-high glyphs" }, // рядок (1 гліф/символ) або масив  "aliases": { "<table>": { "<value>": "<label>" } },  "output": {    "sep": "", // об'єднує частини, що залишилися    "default": [/* частини */], // резервний варіант для будь-якої поверхні    "surfaces": {      "discord": [/* частини */],      "telegram": [/* частини */],    },  },}

Кожна поверхня є впорядкованим списком частин; рушій відображає кожну з них, відкидає порожні та об'єднує решту за допомогою 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 десяткових знаків (типово 2) 0.0377
dur перетворення секунд на тривалість 14820 -> 4h07m
pct додавання % 96 -> 96%
inv 100 - x з використаного у залишок
alias:TABLE пошук в aliases, без збігу повертає значення medium -> 🌗
meter:W:SCALE смуга з W комірок для значення від 0 до 100 [⣿⣿⠐⠐⠐] (meter:1 = один символ)

Форми частин

  • { "text": "📚 {context.max_tokens|num}" }: літерал + інтерполяція.
  • { "when": "<path>", "text": "..." }: відображати, лише якщо значення за шляхом істинне.
  • { "map": "<path>", "cases": { "true": "⚡", "false": "🐌" } }: перетворення значення на символ (варіант _default охоплює значення без збігу).
  • { "each": "<array-path>", "item": "{label}" }: перебір значень за шляхом-масивом (жоден поточний шлях контракту не є масивом).

Приклад

jsonc
{  "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, застосунку та інтерфейсі керування.

  • Anthropic (Claude): токени OAuth у профілях автентифікації. Якщо токен OAuth не має області дії user:profile, за наявності використовується резервний вебсеанс claude.ai (CLAUDE_AI_SESSION_KEY, CLAUDE_WEB_SESSION_KEY або файл cookie sessionKey= у CLAUDE_WEB_COOKIE). Обмеження для окремих моделей і ввімкнені місячні витрати/бюджети додаткового використання включаються, коли Anthropic їх повідомляє. Натомість явний ключ Anthropic Admin API або автоматично виявлений профіль провайдера sk-ant-admin... показує витрати організації за 30 днів та історію Messages API.
  • ClawRouter: ключ API (CLAWROUTER_API_KEY). Показує місячне бюджетне вікно та типізований бюджет у доларах США, якщо його налаштовано; інакше показує сукупні витрати та зведення запитів, токенів і вартості.
  • 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. Необроблені поля MiniMax usage_percent / usagePercent означають залишок квоти, тому OpenClaw інвертує їх перед відображенням; за наявності поля на основі кількості мають пріоритет.
    • Мітки вікон формуються з полів годин/хвилин провайдера за їх наявності, а потім як резервний варіант використовують проміжок start_time / end_time.
    • Якщо кінцева точка плану для програмування повертає model_remains, OpenClaw надає перевагу запису моделі чату, визначає мітку вікна з часових позначок, коли явні поля window_hours / window_minutes відсутні, і включає назву моделі до мітки плану.
  • OpenAI (план Codex/ChatGPT): токени OAuth у профілях автентифікації (заголовок ChatGPT-Account-Id надсилається за наявності ідентифікатора облікового запису). Показує план ChatGPT, вікна Codex зі скиданням і кредитний баланс, коли провайдер їх повідомляє. Кредити залишаються кредитами провайдера; OpenClaw не позначає їх як долари. OPENAI_ADMIN_KEY додає витрати організації за 30 днів та історію використання запитів завершення, якщо ключ має доступ до 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).

Пов’язане

Was this useful?
On this page

On this page