Перейти к содержимому
Экосистема AI Vibe

Разборы

Когда счётчики usage врут: пять повторяющихся ошибок в open-source вокруг агентов

Редакция 23 сентября 2026 г.

Когда счётчики usage врут: пять повторяющихся ошибок в open-source вокруг агентов

Сводка расхода по агенту за спринт может систематически врать: ретраи в стриме раздувают цифру, а пропущенное поле usage превращается в «бесплатный» ноль. В полевом отчёте Roy Tong и команда AgentMeasure прошли 110 open-source инструментов учёта, выделили пять семейств типовых багов, зафиксировали 45+ подтверждённых дефектов и 23 принятых upstream-исправления; отдельно прогнали conformance suite на 236 проверках.

Пять семейств багов в метриках ИИ-инструментов

Повторяющиеся классы ошибок в учёте токенов, cost и бюджетов, а не «уникальные» сбои по одному репозиторию:

# Семейство Что ломается на практике
1 Устаревшие pricing tables Таблицы тарифов моделей не обновляют месяцами; инструмент считает уверенно по ставкам, которые рынок уже сменил. В выборке из 7 инструментов у 5 устаревшие или отсутствующие строки тарифов.
2 Неверные cache multipliers между провайдерами Cache read/write считаются с разными коэффициентами у разных провайдеров; типичный shortcut: подставить множители одного вендора всем. Anthropic-подобная скидка на cache read, перенесённая на модели OpenAI, занижает cache reads примерно в 5×.
3 Двойной учёт retry в стримах При byte-identical повторе стримингового запроса часть агрегаторов суммирует обе попытки. В корпусе из 604 re-emitted events у 46% байты совпадают с предыдущим событием: наивная агрегация удваивает usage, слишком жёсткая дедупликация съедает реальную работу.
4 «Нет поля» = ноль Пропущенное поле usage превращается в or 0, и «неизвестно» читается как «бесплатно». Рекомендация: absent остаётся absent; rollup должен уметь состояние UNPROVABLE, а не ноль.
5 Ошибки границ квотных окон Окна привязаны к wall-clock; тесты с фикстурами на абсолютные даты проходят «30 дней» и ломаются разом при сдвиге календаря. Такой класс Roy Tong относит к собственному CI.

Для vibe-coding цикл с агентом и ретраями в стриме бьёт прямо в семейства 3 и 4: дашборд может показать и вдвое больший расход, и «нулевой» ход, хотя модель реально работала.

Как строился аудит ~110 репозиториев в экосистеме агентов

Критерий отбора (публикация 22 сентября 2026): open-source проекты, которые считают токены, отслеживают cost или enforce budgets; работа заняла около месяца. Audit-report задаёт рамку: репозитории вокруг Claude Code, Codex, gateway, eval и observability; метод: читать код, собрать synthetic fixture и прогнать собственный парсер каждого инструмента, с публичным filing и pinned commit на каждый finding.

Полный машиночитаемый список всех 110 repo в открытом тексте не выгружен: на Dev.to агрегат, в report выборочные кейсы со ссылками на issues и PR. Таксономия пяти семейств и примеры upstream-фиксов всё равно позволяют проверять свой стек по классам ошибок, без полного реестра.

Среди проектов с уже принятыми исправлениями по учёту usage называют langfuse (порядка 34k stars на GitHub) и codeburn (порядка 11k stars). Якоря в report: langfuse #17117 (OTel cache_write alias) и codeburn PR #1264 (трёхслойная dedup token_count); это иллюстрации, не исчерпывающий список всех 23 merge к дате публикации.

Отдельно от пяти семейств report описывает класс ошибок Claude Code JSONL («одно assistant-сообщение ≠ одна строка») с пересчётом usage в 2×–5×. Его не смешивают с пятью семействами field report, хотя лимиты и cost alerts страдают те же.

Коммерческий биллинг: занижение, споры и открытый conformance

Внешний аудитор один раз независимо прогнал полный conformance suite (236 checks) и добавил разбор cache accounting у коммерческого провайдера: 4 code paths с ошибками, занижение usage на 98.9% и 95.1% на затронутых путях, с привязкой к exact commit. На одном cache-accounting path вводная формулировка даёт roughly ~99% занижения. Имя аудитора и название провайдера в открытых текстах не названы.

Open-source meters закрывают только половину картины, если вы платите вендору напрямую. AgentMeasure проверил 20 commercial vendors на опубликованный процесс при ошибке счётчика (dispute path, correction policy): ни у одного такого процесса в открытом доступе не нашли. Инициатива требует как минимум named dispute path и machine-checkable billing disclosures.

Для соло-разработчика с несколькими подписками на API и gateway идеальный локальный meter не заменяет прозрачность биллинга провайдера, но помогает отличить баг обёртки от «чёрного ящика» на стороне вендора.

Локальный conformance pack: проверка без утечки данных

Практика «10 minutes»: открытый conformance pack (MIT), данные при локальной проверке не уходят с машины (export usage → checker on machine), с разделением logical operations vs physical attempts, cache read vs write, absent vs zero. Спека settlement в том же проекте AgentMeasure: AMS-1; репозиторий: https://github.com/roy-tong/AgentMeasure (в report: clone и python3 conformance/pack/agentmeasure selftest).

Чеклист по пяти семействам (опубликовано 22.09):

  • Сверить дату последнего обновления pricing table с актуальными ставками моделей, которые реально дергает агент.
  • Убедиться, что cache multipliers не «унаследованы» от другого провайдера в мульти-модельном gateway.
  • Прогнать сценарий с повтором стрима и посмотреть, не удваивается ли usage на идентичных байтах.
  • Проверить, что отсутствующее поле usage не превращается в ноль в rollup.
  • Пересмотреть тесты квотных окон: не завязаны ли они на абсолютные даты, которые завтра сломают CI.

Если стек включает observability вокруг Claude Code или Codex, сверьте парсинг JSONL с отдельным классом ошибок в report: он не дублирует названия пяти семейств, но бьёт по тем же лимитам и cost alerts.


Источники

  • Roy Tong — «We audited 110 AI usage tools. Here is where the numbers go wrong.» Dev.to, опубликовано 2026-09-22. Dev.to (доступ: 2026-09-23 UTC)
  • AgentMeasure — campaigns/audit-report-2026-09.md. https://github.com/roy-tong/AgentMeasure/blob/main/campaigns/audit-report-2026-09.md (доступ: 2026-09-23 UTC)