Посчитал, сколько токенов Claude тратит на «Конечно!» и «Отлично!». 11% счёта

от автора

Открыл вчера дашборд по потреблению токенов — и завис.

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

Ну.

Полез читать сами ответы модели. И первое, что бросилось в глаза — почти каждый начинается с «Конечно!», «Отличный вопрос!», «С радостью помогу!». А дальше идёт ещё полтора-два предложения про то, как модель собирается ответить. И только потом — собственно ответ.

Я подумал: а сколько я за это плачу?

Простой эксперимент: 500 запросов, один регэксп

Решил не гадать и замерить.

Взял 500 типовых запросов — имитация того, что у нас крутится в проде. Классификация обращений, извлечение полей из документов, ответы на вопросы по регламенту, генерация краткого саммари письма. Прогнал через claude-sonnet-4-5 на одинаковых настройках — temperature=0.2, один и тот же system prompt, который у нас в работе (с поправкой на домен — обезличенный).

И написал скрипт на 30 строк, который парсит выходы модели и считает «мусорные» токены — вступления, похвалы, мета-комментарии про процесс, финальные «Если потребуется уточнение — дайте знать!».

Регэкспы простые, без фанатизма:

FILLER_PATTERNS = [    r"^(Конечно|Безусловно|Разумеется|Хорошо)[,!\.]",    r"^(Отлично|Отличный вопрос|Замечательно)[!\.]",    r"^(С радостью|С удовольствием)",    r"^(Давайте|Позвольте)",    r"(Надеюсь,? это (помогло|поможет))",    r"(Если (у вас )?(есть|возникнут) (ещё )?вопросы)",    r"(Дайте знать,? если)",]

Плюс руками разметил первые 50 ответов — на случай, если регэкспы что-то упустят. Потом померил — регэкспы ловили 94% «мусора», ручная разметка добавляла ещё 6%. Погрешность в нашу пользу — реальные цифры чуть больше моих.

Что получилось

На 500 запросах — 11,3% выходных токенов уходили на вежливость и мета-комментарии.

Разбивка по типам:

Что именно

Доля от «мусора»

Вступительные фразы («Конечно!», «Отлично!»)

28%

Мета-комментарий «сейчас я…»

34%

Финальные «надеюсь, помогло»

22%

Переформулировка вопроса в начале

16%

Самый жирный кусок — не приветствия, а именно мета-комментарий про сам процесс. Модель как будто подробно рассказывает, как она собирается отвечать, прежде чем ответить. Для чата с пользователем это полезно — он чувствует, что «думают». Для бэкэнд-интеграции, где ответ парсится в JSON — это выброшенные деньги.

Поставил честный тест: взял 100 ответов, руками вырезал весь мусор — оставил только то, за чем ходили. Смысл ответа не терялся ни в одном случае. Ноль.

Три строки, которые это убрали

Подтюнил system prompt. Не переписывал — добавил три строки. Вот что стояло до:

Ты — ассистент для обработки [ДОМЕН]. Отвечай точно,опирайся только на переданный контекст. Если данных нет —честно скажи об этом.

Добавил:

Ты — ассистент для обработки [ДОМЕН]. Отвечай точно,опирайся только на переданный контекст. Если данных нет —честно скажи об этом.Формат ответа:- Никаких вступлений, похвалы вопроса, объяснений «что я сейчас сделаю».- Никаких финальных фраз типа «надеюсь, помог».- Сразу суть. Если нужен список — сразу список. Если число — сразу число.

Прогнал те же 500 запросов второй раз.

«Мусора» осталось 1,8%. Экономия — 9,5% выходных токенов.

Сколько это в деньгах

Я не буду делать вид, что посчитал месячный счёт до копейки — у нас несколько проектов, несколько моделей, расчёт сложный. Но на уровне прикидки:

Если у вас сервис на 2000 запросов в день и средний ответ — 400 токенов на Claude Sonnet 4.5, то 9,5% экономии за месяц — это около 4 200 ₽. Если запросов 20 000 в день — 42 000 ₽. И это не считая того, что контекст на следующем шаге короче — значит дешевле ещё и вход.

Для нашего основного проекта это получилось 4 730 ₽ за первый же месяц после правки. Скрипт — 30 строк. Правка промпта — пять минут. Рентабельность вне конкуренции.

Что сломалось

Честно скажу — не всё прошло гладко.

Два кейса, где я откатил правку:

Первый — клиентский чат. Там «Конечно!» и «Надеюсь, помогло» — часть UX. Без них ответ выглядел сухим и чуть ли не грубым. Пользователи стали писать в фидбек, что бот «какой-то злой». Вернул вежливость — метрика удовлетворённости отползла обратно.

Второй — цепочка с инструментами. У Claude есть привычка в начале описывать, что он собирается делать с tool use. Я это отрезал — и модель начала в половине случаев просто вызывать не тот инструмент. Как будто «проговаривание» помогало ей самой выстроить план. Вернул — стало лучше.

Вывод простой: режь мусор там, где ответ парсит машина, не человек. В живом чате — оставляй.

Что дальше

Следующий заход — то же самое, но по входящим токенам. Там свой зоопарк — пользователи пишут «Здравствуйте, подскажите пожалуйста…» и три строки про погоду. Это всё едет в контекст модели и тоже стоит денег. У меня уже есть гипотеза, что если чистить вход тем же регэкспом, до модели даже доходит, — экономится ещё процентов пять.

Но это уже другая статья.

ссылка на оригинал статьи https://habr.com/ru/articles/1023024/