Месяц считал реальную цену LLM-ассистента: вы платите не за токены, а за мусор в контексте
Я месяц вёл журнал каждого вызова своего рабочего LLM-ассистента — не «на глазок», а по логам. Задача была простая и скучная: понять, сколько он реально стоит. Ответ меня удивил настолько, что решил выложить цифры целиком. Спойлер: модель почти ни при чём.
Почему я вообще полез в логи
У меня ассистент гоняет рутину в нескольких проектах: разбор почты, черновики ответов, сортировка задач. Подписка на «готовое решение» стоила бы $30–40 в месяц на пользователя, и я хотел понять — а не дешевле ли собрать то же самое на прямых API-вызовах.
Первый заход «по тарифам» дал картинку, которая меня успокоила: GPT-4o — $2,50 за миллион входных токенов и $10 за миллион выходных; Claude Sonnet — $3 / $15. На бумаге месяц работы выглядел почти бесплатным.
Реальность оказалась примерно в четыре раза дороже бумаги. И вот почему.
Цифра первая: 4,2 миллиона токенов на вход — и половина из них мусор
За месяц ассистент обработал 1017 задач. Итого 4 180 000 входных токенов и 610 000 выходных. По прайсу GPT-4o это $10,45 на входе и $6,10 на выходе — $16,55 за месяц. Звучит скромно.
Но когда я разложил эти 4,2 миллиона по категориям, выяснилось: 2,1 миллиона — это один и тот же контекст, который пересылался в каждом новом витке диалога. Системный промпт, история, список правил. Я платил за то, чтобы модель в сотый раз прочитала свой собственный вчерашний ответ.
Вот реальный фрагмент из лога (токены посчитаны по usage-полю ответа API):
```
request #812 prompt_tokens=41280 completion_tokens=214
request #813 prompt_tokens=41602 completion_tokens=198
request #814 prompt_tokens=41971 completion_tokens=205
```
Три соседних вызова — и на каждый ушло по 40 с лишним тысяч токенов на входе, хотя полезной новой информации там на пару сотен. Это и есть дыра, в которую утекает бюджет.
Цифра вторая: 38% стоимости — это повторные запросы после ошибок
Я посчитал вызовы, которые закончились ретраем: таймаут, пустой ответ, сбой парсера JSON, повторная отправка той же задачи. Их набралось 389 из 1017. То есть каждый третий запрос я платил дважды, а иногда и трижды.
По деньгам: из $16,55 итогового счёта примерно $6,30 — это чисто переплата за то, что я не выставил нормальный таймаут и не валидировал ответ перед следующей итерацией. Модель здесь ни в чём не виновата — она честно отвечала. Виновата обвязка вокруг неё.
Цифра третья: тот же объём работы на дешёвой модели дал бы $2,10 — но я не стал переходить
Ради честности прогнал контрольную неделю на лёгкой модели (Gemini Flash, $0,10 / $0,40). Счёт упал до $2,10 в пересчёте на тот же объём — в семь с половиной раз дешевле. Но качество разбора почты просело настолько, что на ручную вычитку я потратил больше времени, чем сэкономил на токенах.
Вывод, который я не планировал делать: оптимизация стоимости — это не «взять модель подешевле». Это сначала вычистить пайплайн, а уже потом смотреть на прайс.
Где на самом деле теряются деньги
После месяца журналирования у меня сложилась простая иерархия, куда уходит бюджет LLM-ассистента:
1. Контекст-мусор — пересылка неизменной истории в каждом витке. У меня это половина всех входных токенов.
2. Ретраи и повторы — каждый третий вызов оплачивается дважды.
3. Отсутствие кэша — платформы отдают prompt caching со скидкой до 90%, я первое время его не включал.
4. И только на четвёртом месте — собственно тариф модели.
Забавно, что именно тариф — то, на что все смотрят в первую очередь, — в моём случае отвечал за меньшую часть счёта. Консенсус «бери модель подешевле и радуйся» здесь просто не работает.
Что изменилось после чистки
Я включил prompt caching, выставил жёсткие таймауты, валидацию ответа перед ретраем и обрезал системный контекст до минимума. Тот же объём работы (те же ~1000 задач) на той же GPT-4o теперь стоит $9,70 вместо $16,55 — минус 41% без смены модели.
Это, кстати, и есть мой главный тезис, с которым можно спорить в комментариях: инструмент не проблема — проблема пайплайн вокруг него. Модель не дорогая и не дешёвая, она просто честно жрёт всё, что вы ей подаёте. И если в контексте мусор — вы платите за мусор.
Возражения принимаю: особенно интересно, у кого на реальном проде доля контекст-мусора заметно ниже моих 50%, и чем вы этого добились.