Экономика

Нет работы — нет токенов: холостой ход агентной системы

← Все статьи

Первый счёт за агентную систему обычно удивляет. Не потому, что агенты много сделали, — а потому, что они много «проверяли, не появилось ли работы». Цикл раз в минуту, в каждом цикле обращение к модели «посмотри, есть ли что-то новое», и вот вы платите за то, что ничего не происходило.

У нас это закрыто инвариантом: нет работы — нет токенов. Любой тик системы, которому нечего делать, завершается на SQL-запросе и не доходит до модели.

Где именно тратятся деньги

Полезно разделить два источника расхода.

Полезная работа — агент разобрал требование, написал код, прогнал тесты. Это то, за что вы и платите, и здесь экономить нечего: объём работы задан задачей.

Накладной расход — всё, что система делает, чтобы понять, есть ли работа. Опросы очередей, проверки статусов, напоминания, реакции на таймауты. В наивной реализации это тоже вызовы модели, и именно они дают неприятный счёт: их количество зависит не от объёма работы, а от календарного времени.

Второй источник можно свести почти к нулю.

Тик, который не доходит до модели

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

Если запрос вернул пустой результат — тик закончился. Не «модель посмотрела и решила, что делать нечего», а именно не дошло до вызова: цикл завершился на уровне SQL.

Модель вызывается только по внешнему воздействию: пришло сообщение, интеграция принесла событие, агент вернул рапорт, пользователь ответил на вопрос. Ночь без событий стоит ровно ноль.

Правило, которое стоит проверять на своей системе: если выключить всех пользователей и все интеграции на выходные, счёт за выходные должен быть нулевым. Если нет — у вас где-то цикл, который «думает» вхолостую.

Надзор без токенов

Самый интересный случай — фоновый надзор за незакрытыми задачами. Кажется, что тут без модели никак: надо понять, зависла задача или идёт нормально, пора напомнить или ещё рано.

На практике почти все решения здесь детерминированные:

  • задача только что создана — период ожидания ещё не вышел, ничего не делаем;
  • ответа нет дольше порога — напоминание, шаблонное, без модели;
  • задача не двигалась дольше второго порога — пометка «залежалась», без модели;
  • элемент очереди осиротел — переносим, без модели.

Модель подключается в одном случае: задача отрапортовала о завершении, и нужно содержательно решить — принять результат, отправить на проверку или объединить с другой задачей. То есть там, где действительно нужно суждение, а не сравнение таймстампов.

Это разделение стоит проделать явно на любой агентной системе. Обычно выясняется, что 80–90% фоновых решений — сравнение чисел, и их не за что отдавать модели.

Видеть стоимость по факту

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

Отсюда следуют вещи, которые обычно недоступны:

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

Последнее оказалось важнее, чем ожидалось. «Умный» диалог легко съедает десятки тысяч токенов на простом обмене репликами, если никто не ограничил число ходов. Настраиваемый бюджет хода превращает это из сюрприза в параметр.

Отдельная категория: циклы

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

Такой цикл сжигает бюджет за часы и выглядит в метриках как «высокая активность». Лечится он не экономией, а защитой на уровне контура: исходящие сообщения самого бота не принимаются обратно как повод для работы. Это не оптимизация, это предохранитель, и он должен стоять до того, как понадобится.

Что это даёт на практике

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

И побочный эффект, который мы не планировали: система, которая не обращается к модели без повода, гораздо понятнее в отладке. Каждый вызов чем-то вызван, и этот повод записан.

Контакты

Начните с пилота на одной команде

Расскажите про стек и текущий процесс — вернёмся с оценкой эффекта и планом внедрения.

Электронная почта
Режим работы
Пн–Пт, 10:00–19:00 МСК

Укажите телефон или e-mail. Форма подготовит письмо — отправьте его в своём почтовом клиенте.