01.08.2027 202 материалов

Как отследить реальную стоимость ИИ-агентов для кодирования: руководство по построению журнала затрат

ИИ-агент для кодирования может выглядеть продуктивным, а на деле сливать бюджет на повторное чтение контекста и бесконечные ретраи. Разбираемся, как построить систему учёта, которая покажет, где деньги уходят впустую.

Как отследить реальную стоимость ИИ-агентов для кодирования: руководство по построению журнала затрат

Обычный дашборд показывает общие цифры. Журнал затрат объясняет транзакции: какой сеанс агента стоил $8,40 и занял 42 минуты, но 78% стоимости ушло на перечитывание неизменённого контекста.

Проблема: агент выглядит продуктивным, а бюджет тает

ИИ-агенты для написания кода перестали быть экспериментом. Их используют ежедневно: фиксят баги, рефакторят тесты, генерируют PR. Но есть оборотная сторона — реальная стоимость сеанса агента часто оказывается в разы выше, чем кажется из отчёта провайдера LLM.

Опасность не в одном дорогом вызове модели. Она в «нормально выглядящем» сеансе, который перечитывает тот же контекст, ждёт одобрения, прыгает между инструментами, ретраит неудачные планы — и в итоге выдаёт крошечный diff. Такие сессии незаметно превращаются в норму, если их никто не отслеживает.

Статья на dev.to предлагает конкретный ответ: построить журнал затрат (cost ledger) для ИИ-агентов — структурированную запись каждого значимого события стоимости внутри сессии. Не замена дашборду, а его дополнение, которое превращает «ИИ стал дороже» в доказательную базу на уровне отдельных сессий.

Почему учёт затрат агента сложнее, чем учёт API

Классический расход на API-вызовы прозрачен: endpoint, количество запросов, время ответа, привязка к клиенту. Всё просто.

С ИИ-агентом всё сложнее. Одна задача может включать:

  • построение промпта;
  • поиск по репозиторию;
  • чтение файлов;
  • выполнение shell-команд;
  • запуск тестов;
  • неудачные редактирования;
  • ретраи модели;
  • вызовы инструментов;
  • паузы на одобрение;
  • финальное создание PR.

При этом в одной задаче могут участвовать несколько моделей: дешёвая — для суммаризации логов, сильная — для планирования фикса, ещё одна — для ревью итогового diff. Если трекать только финальный запрос к модели, вы теряете картину реальной экономики рабочего процесса.

Именно поэтому журнал затрат — это не просто расширенный дашборд. Дашборд показывает итоги. Журнал объясняет, откуда они взялись.

Что именно должен отслеживать журнал

Полезный журнал фиксирует значительно больше, чем просто токены. Вот минимальный набор:

  • запросы к модели (input/output токены);
  • попадания и промахи кеша (cache hits/misses);
  • вызовы инструментов (чтение файлов, запись, shell-команды);
  • запуски тестов;
  • циклы ретраев;
  • время ожидания одобрения;
  • сгенерированные diff'ы;
  • созданные коммиты или PR;
  • ошибки и откаты;
  • оценочная стоимость от провайдера;
  • доказательства ценности: смерженные PR, пройденные тесты, закрытые ишью.

Цель — не идеальный бухгалтерский учёт, а «видимость, достаточная для принятия решений». Если вы можете сказать: «Этот агент потратил $8,40 за 42 минуты на 12-строчный фикс, причём 78% стоимости — перечитывание неизменённого контекста. Нужно кешировать саммари репозитория» — значит, система работает.

Пять метрик, которые обнаруживают потери

Не нужен гигантский аналитический стек на старте. Достаточно пять чисел на каждую сессию.

1. Общая стоимость сессии

Суммарная оценочная стоимость инфраструктуры и провайдера за всю сессию. Даже если стоимость инструментов сегодня нулевая, поле стоит включить — браузерная автоматизация, песочницы, векторный поиск и сборщики могут стать реальными расходами.

2. Доля повторного ввода

повторные_токены_ввода / общие_токены_ввода

Высокая доля означает, что агент снова и снова читает один и тот же контекст репозитория, логи или предыдущее состояние разговора. Это, пожалуй, самый быстрый способ обнаружить скрытые потери. Типовые решения: кеши саммари репозитория, дайджесты файлов, лимиты на retrieval, более жёсткие контракты задачи.

3. Стоимость на принятую строку кода

стоимость_сессии / количество_строк_в_принятом_diff

Метрика несовершенная — 5-строчный security-фикс может стоить дороже 400-строчного реформатирования. Но она помогает выявить сессии, где агент «молотил» без значимого результата. Более точные сигналы ценности: смерженный PR, закрытый баг, добавленные тесты, воспроизведённый инцидент.

4. Время простоя на одобрение

Агенты часто ждут решения человека. Это не стоимость токенов, но стоимость рабочего процесса. Если агенты простаивают часами у gate'ов одобрения — нужны лучшие тиеры риска, маршрутизация ревьюеров, автоодобрение для низкорисковых действий и таймауты с безопасным откатом.

5. Покрытие верификации

Дешёвая сессия, которая выкатила непротестированный код — не дешёвая. Стоит трекать, создал ли агент доказательства: падающий тест до фикса, проходящий — после, lint/typecheck вывод, скриншот для UI-изменений, dry-run миграции, план отката.

Сессия с высокой стоимостью и слабой верификацией должна попасть на ревью до того, как станет шаблоном рабочего процесса.

Архитектура: сессия как единица работы

Самая частая ошибка — трекать отдельные вызовы модели, не группируя их в сессии. Для ИИ-агента сессия — это единица работы: «Исправить баг с webhook'ами Stripe», «Добавить кнопку экспорта в таблицу инвойсов».

Каждое событие стоимости привязывается к session_id. Это единственное место, где сходятся стоимость, время, инструменты и результат. Автор предлагает начать с одного объекта сессии и одного потока событий, а не проектировать двадцать таблиц.

События лучше хранить как append-only записи — неизменяемые, с временными метками. Это проще для отладки и надёжнее, чем мутабельные счётчики. Каждое событие содержит тип (model_request, tool_call, verification), привязку к сессии и метаданные. Новые типы событий можно добавлять без перепроектирования всей системы.

pic

Классификация вызовов модели по назначению

Журнал становится значительно полезнее, когда каждый запрос имеет метку назначения: repo_scan, plan, patch, debug, review, summarize, handoff. Без меток все затраты выглядят одинаково. С метками становится видно, что основная доля уходит на повторное сканирование репозитория, а ревью-вызовы дёшевы, но отлавливают большинство ошибок.

Схема PostgreSQL для старта

Автор предлагает компактную схему из двух таблиц:

  • agent_sessions — метаданные сессии (ID, репозиторий, задача, статус, результат, PR-ссылка, временные метки, тир риска);
  • agent_cost_events — поток событий с привязкой к сессии, типом, моделью, токенами, стоимостью, продолжительностью и JSON-метаданными.

Индексы по session_id, типу события и GIN-индекс по метаданным. Для небольшого продукта этого достаточно — саммари можно рассчитывать по запросу или сворачивать ночной джобой.

Обёртка над каждым вызовом модели

Не стоит полагаться на дисциплину разработчиков. Логирование должно быть встроено в SDK-обёртку или gateway модели. Каждый вызов проходит через функцию-обёртку, которая фиксирует токены, кеш, стоимость и продолжительность — автоматически, без возможности пропустить запись.

Эта обёртка становится «истинным источником» (source of truth). Промпты, маршруты моделей, ретраи, кеш-поведение — всё проходит через неё.

Алерты, которые не раздражают

Плохой алерт: «ИИ-расходы выросли на 12% сегодня». Хороший алерт: «Три сессии превысили нормальный диапазон стоимости для репозитория. У двух доля повторного ввода выше 70%. Одна ждала одобрения 94 минуты».

Полезные триггеры:

  • стоимость сессии выше p95 для данного репозитория;
  • доля повторного ввода выше 60%;
  • больше трёх ретраев модели;
  • ожидание одобрения дольше 30 минут;
  • отсутствие верификации перед созданием PR;
  • использование инструмента высокого риска без одобрения.

Каждый алерт должен указывать на конкретную сессию, а не на абстрактный график.

Как журнал влияет на продукт

Журнал затрат — не просто инструмент мониторинга. Он должен менять решения:

  • Маршрутизация моделей. Если planning-вызовы дороги, но предотвращают плохие патчи — оставляем сильную модель. Если суммаризация дорога и низкорискова — маршрутизируем на дешёвую.
  • Инженерия контекста. Высокая доля повторного ввода — сигнал уменьшать контекст, а не менять модель. Большие контекстные окна прячут потери, но не устраняют их.
  • Бюджеты для тенантов. В мультитенантных продуктах привязка стоимости к workspace позволяет выстраивать fair-use политики и ценообразование без гаданий.
  • Переписывание шаблонов. Если рабочий процесс регулярно проваливает верификацию — проблема в шаблоне задачи, а не в модели.
  • Автоматизация. Лучшие кандидаты — не самые частые задачи, а те, где стоимость, процент успеха и верификация складываются в убедительную картину.

Приватность: журнал как чувствительное хранилище

Журнал может случайно стать хранилищем конфиденциальных данных. Автор рекомендует по умолчанию не хранить сырые промпты и полные сниппеты кода — вместо этого использовать ID версий промптов, хеши контекстных пакетов, пути к файлам вместо содержимого, обфусцированные входные данные инструментов и корот