Разработчики представили Wattage — open-source инструмент, который анализирует трассировки вызовов AI-агентов, оценивает их реальную стоимость и выявляет неэффективные паттерны. Названный по аналогии с бытовым ваттметром, он работает с экспортом трассировок OTLP JSON, функционирует полностью офлайн и не требует API-ключей. Все вызовы LLM оцениваются по актуальным вендорским прайс-листам, а если модель не распознана, её стоимость не угадывается — ставится ноль, а CI-система получает соответствующий сигнал.
Как устроен анализ трассировок и детекторы
Wattage строит единую нормализованную модель данных (сессии → задачи → циклы → итерации → вызовы) на основе семантических конвенций OpenTelemetry. Команда wattage report trace.json генерирует терминальный отчёт или HTML-файл с флейм-графом. В инструмент встроено восемь детекторов, каждый из которых находит конкретный тип неэффективности и выводит реальную цену в долларах с конкретным способом исправления:
- prefix_churn — повторная отправка стабильного префикса промпта вместо кэширования
- cache_gap — кэш создаётся, но почти не используется последующими чтениями
- verbosity — выход далеко выходит за рамки необходимого для текущего шага
- redundant_tool_calls — повторяющийся вызов инструмента (точное или нечёткое совпадение)
- nonconvergence — зацикленность агента без реального прогресса
- retrieval_thrash — повторяющиеся запросы к RAG без получения релевантных результатов
- model_mismatch — более дорогая модель используется там, где хватило бы дешёвой
- reasoning_overspend — избыточное использование reasoning-токенов на простых шагах
Каждая находка дополнительно маркируется уровнем риска для качества (none / low / review). Изменение, которое потенциально влияет на качество ответов (например, downgrade модели), засчитывается только при наличии подтверждения через --quality map.
Детектор неконвергенции: почему он важен
Отдельного внимания заслуживает механизм обнаружения неконвергенции. В отличие от наивного поиска точных SHA-256 дубликатов, он способен распознавать ситуации, когда агент имитирует полезную работу: генерирует каждый вызов с новой временной меткой, осциллирует между двумя стратегиями или «застревает» в цикле, где каждый шаг технически уникален, но не приводит к прогрессу.
Разработчики провели бенчмарк на 10 размеченных синтетических лучах. Результаты классификатора Wattage против SHA-256 exact-match:
- Wattage: Precision 1.00, Recall 1.00, F1 1.00
- SHA‑256 exact-match: Precision 1.00, Recall 0.14, F1 0.25
На реальном трейсе (3-turn demo) симуляция исправления prefix_churn показала снижение стоимости на 44,7% — с $0.000199 до $0.000110. Разработчики подчёркивают, что механизм идентичен тому, что будет работать на production-масштабах.
Интеграция с CI: гейт, который не пропускает подорожание
Wattage можно использовать не только как анализатор, но и как шлюз регрессии стоимости. Команда wattage ci и готовый GitHub Action встраивают проверку в пайплайн: при каждом PR, затрагивающем код агентов или промптов, запускается генерация трассировки и сравнение с эталоном (baseline.json).
Сборка завершается ошибкой (exit code 1), если:
- счётчик Token Efficiency падает ниже заданного порога (например, 80)
- стоимость растёт больше заданного процента (например, 5%)
- обнаружены критические проблемы
В PR публикуется таблица изменений по каждому детектору, а также генерируются отчёты в форматах SARIF (для GitHub Security) и JUnit. Важный нюанс архитектуры: эталон обновляется отдельным воркфлоу на push в основную ветку, а не в рамках самого PR, чтобы у каждого PR была стабильная точка отсчёта.
Как попробовать и расширить
Для запуска не нужны конфигурационные файлы или API-ключи — достаточно выполнить uvx wattage report trace.json или uv run wattage report examples/sample_trace.json. Результат можно получить как терминальную таблицу, так и автономный HTML-файл (--html report.html). Кроме того, Wattage генерирует SVG-бейдж с единой оценкой Token Efficiency, который автоматически обновляется при слиянии в основную ветку. Проект распространяется под лицензией Apache 2.0, а разработчики могут добавлять собственные детекторы через entry-point группы Python без необходимости модифицировать ядро инструмента.
Источник: https://github.com/faizannraza/wattage

Комментарии(0)
Оставьте комментарий
Войдите, чтобы присоединиться к обсуждению