Жор токенов ИИ-агента: почему мелкие правки дороже больших задач
vipsrv:~$ cat zhor-tokenov-melkie-pravki.md

vipsrv:~$ cat zhor-tokenov-melkie-pravki.md

# ИИ // жор токенов

Как мы спалили лимит нейросети на «мелких правках» - и что с этим делать

ИИ-агента продают как дешёвого сотрудника: поставил задачу, он сделал, ты заплатил копейки за токены. Ага, бл#, сказки: дай двести баксов в месяц - вот тебе сказка. Потом наступает первый нормальный рабочий день, ты открываешь статистику и видишь: за сутки сожжено 140 миллионов токенов, из них 130 миллионов - на ОДНОГО агента, который правил вёрстку. Отступы и переносы, а не операционку.

Дальше про то, куда ушли деньги. В работу они не ушли.

Анатомия жора

У нас крутится своя мультиагентная система: два десятка агентов на разных моделях, Claude и Kimi, у каждого своя зона - вёрстка, сервер, CRM, исследования. Задачи летят через API. Вскрытие одного дня:

  • агент-верстальщик получил за день 35 запусков
  • все 35 - в одну и ту же «продолжающуюся» сессию
  • итог: 130 миллионов токенов кеш-записи - 93% всего дневного трафика системы

Разложу по полочкам. Пишешь или наговариваешь агенту очередное «а теперь подвинь кнопку на два пикселя» - и он не идёт двигать кнопку. Сначала он ПЕРЕЧИТЫВАЕТ всю историю сессии: предыдущие 34 задачи, файлы, которые открывал, собственные рассуждения по каждой мелочи. Кнопка двигается в последнюю очередь.

Первая правка стоит условный рубль. Десятая в ту же сессию - как вся история до неё плюс она сама. Это не баг, так устроены контекстные модели: контекст либо лежит в кеше, либо читается заново.

Кеш живёт пять минут - и это главный 3.14здосий

У Anthropic кеш контекста живёт около 5 минут. Успел с догонкой в это окно - контекст поднимается из кеша, дёшево. Написал через полчаса - кеша нет, вся портянка идёт по полной цене.

Теперь наложи на это живой рабочий процесс: глянул результат, подумал, заметил ещё косяк, написал «и ещё вот тут поправь». Между правками 15-40 минут. Каждая догонка = полный перечит истории, пять микроправок за день = пятикратная оплата всей накопленной сессии. Умей агент огрызаться - давно бы выдал: «правочки у него, не правочки - за#бал вклиниваться».

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

Каждый диванный промпт-инженер с курсов «нейросети за 3 дня» уже завёл шарманку: «промпты писать научись». Пиши хоть в стихах, гений, - агент всё равно сначала перечитает все 34 задачи, а твой сертификат можешь скрутить в трубочку.

Вторая дыра: служебка на дорогой модели

Копнули глубже, нашли дыру поменьше, но не менее злоеб#чую. Обвязка агента постоянно дёргает служебные вызовы: сгенерировать заголовок сессии, выдернуть пути файлов из текста. Работа для самой дешёвой модели, три слова туда, три обратно.

Арифметика проста до оп#зденения, но мне от этого них#яшеньки не стало легче: 518 вызовов по ~537 токенов - итого ~280 тысяч токенов в сутки на «сгенерируй заголовок», «поправь иконку», «разверни, бл#ть, картинку, пережжёный ты песочек». И у 16 из 20 агентов они уходили не на дешёвую модель, а на основную, топовую. Переменная «модель для мелочёвки» нигде не задана - обвязка молча берёт главную. Топовая модель на «сгенерируй заголовок» - типа конечно, #бланище: зачем меня звал, хер знает.

По токенам копейки, 0.006% трафика. Но это тысяча с лишним отдельных вызовов в сутки, и каждый бьёт по лимитам запросов. Вылечили заглушкой: локальный прокси узнаёт служебку и отвечает сам, в API не ходит вообще.

Сейчас набегут великие читатели документации, которые доку открывали один раз - скриншот для сторис сделать. Читал я её: про то, что без этой переменной обвязка молча жжёт топовую, там ни слова.

Что мы реально поменяли - четыре правила

1. Батчи вместо догонок. Батч - это пачка правок, собранная в один список и отданная агенту одним заходом. Догонка - её противоположность: вспомнил мелочь через полчаса и дослал отдельным сообщением. Правки больше не летят по одной. Копятся в список, список утверждается, агент получает ОДИН запуск с пакетом из пяти-десяти штук. Один перечит контекста вместо пяти. Самое денежное правило из всех и самое противное: рука чешется отправить «ну вот ещё мелочь» прямо сейчас.

2. Свежая сессия на несвязанную задачу. Новая задача - новый идентификатор сессии. Агенту, который вчера верстал лендинг, история лендинга не нужна, чтобы сегодня чинить плеер. «Продолжающаяся» сессия удобна ровно до того момента, как посчитаешь стоимость хвоста из 34 чужих задач. Догонка в тёплую сессию - только пока кеш жив, те самые 5 минут.

3. Дешёвая модель на служебку. Проверь, куда реально уходят технические вызовы твоей обвязки. У нас мелочёвка два месяца жгла топовую модель, и никто не замечал: по токенам её не видно, видно только по счётчику запросов.

4. Индикатор контекста на видном месте. Процент заполнения контекста мы вывели прямо в панель управления. Пока цифры не видно, проблемы как бы нет. А когда «77%» горит жёлтым, сессию сбрасываешь сам. Тонкость, о которую спотыкаются: автокомпакт срабатывает не по границе задачи, а по заполнению окна. Короткую правку он не тронет, а вот длинную задачу шагов на сорок догонит на середине: жахнет между шагами, выкинет к х#ям из памяти агента половину ключевых деталей и оставит бессмысленную х#етень - пересказ вместо памяти. Остаток задачи агент доделывает по этому пересказу и на выходе обязательно натворит ровно той х#йни, что оставил ему compact. Поэтому правило простое: увидел жёлтое - сжал руками МЕЖДУ задачами, а новую крупную вообще начинай со свежего контекста, тогда ссаный, бл#ть, автокомпакт до конца задачи просто не доберётся.

Групповая постановка против одиночной

Отдельный вывод - про то, КАК ставить задачи. Одиночная постановка («сделай А»... через час «сделай Б»... «а теперь В») стоит трёх полных перечитов контекста, и между задачами агент трижды рискует потерять нить. То понос, то золотуха - задачи научись ставить, ХаЦкер.

Групповая («вот пакет: А, Б, В, критерии приёмки к каждому») - один перечит на одну сессию и связный результат на выходе. Побочный эффект, которого мы не ждали: качество растёт. Агент, видящий все три правки сразу, не ломает правкой Б то, что сделал в А, потому что держит обе в одном ходу.

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

Итог

Токены жрёт не работа. Токены жрёт то, что агент раз за разом перечитывает одну и ту же историю. В идеале он должен прочитать её ОДИН раз - за этим и весь «колхоз» вперемешку с моими хаотичными правками: батчи (десять правок за одно чтение вместо десяти), свежие сессии (короткая история вместо чужого хвоста) и пятиминутное окно кеша (успел - читается на халяву).

Дневной жор мы срезали со 140 миллионов токенов в десять с лишним раз и в скорости не потеряли. Инструменты и модель остались прежними. Поменялась дисциплина постановки задач.

И отдельный поклон сектантам «поставь локальную ламу и не плати ни копейки» - у которых лама дома крутится на маминой видеокарте и греет квартиру вместо батареи. Жор тот же, только платишь не токенами, а светом и своими вечерами.

Вишенка на этот торт из говна

В который я залез двумя ногами, как мамкин ХаЦкер. В аврале рабочего 3.14здеца правки летят со всех проектов разом, и они невольно волокут меня переключать агентов с задачи на задачу. Я сам вёлся на это: знаю же, что конвейеры у меня штампуют правки пачками, за 1-2 минуты, заказчик доволен и выслан восвояси, я молодец, всё могу. Вот я весь довольный собой пишу очередную правку... х#як - а ответа нет. Поднимаю глаза, а у меня: 100% сессия · 40% неделя · 60% Fable · CTX 90% (950К/1М) - а сброс лимита был утром.

И тут я понимаю: усё, наработался, бл#ть. Герой дня, ска. Лизнул всем заказчикам, а сам по факту буду писю черемекать до конца недели, придумывая небылицы из серии «у Антропика сбой», «у Кими месячные», а Chat, пип его в сраку, GPT - да фу, про него я даже заикаться не хочу, так п#зданул для массовости. Вот он, П#здабол от бога, а не Opus.

Короче, #бланить под дудку заказчика - это ровно то, от чего я ушёл, разгоняя штат. Буду перестраивать мышление дальше.

Все цифры - замер по логам нашей мультиагентной системы за сутки; TTL кеша - документация Anthropic.

> конец записи