Посчитал, сколько токенов Claude тратит на «Конечно!» и «Отлично!». 11% счёта. Claude.. Claude. llm.. Claude. llm. Natural Language Processing.. Claude. llm. Natural Language Processing. system prompt.. Claude. llm. Natural Language Processing. system prompt. искусственный интеллект.. Claude. llm. Natural Language Processing. system prompt. искусственный интеллект. Машинное обучение.. Claude. llm. Natural Language Processing. system prompt. искусственный интеллект. Машинное обучение. оптимизация токенов.. Claude. llm. Natural Language Processing. system prompt. искусственный интеллект. Машинное обучение. оптимизация токенов. промпт-инжиниринг.. Claude. llm. Natural Language Processing. system prompt. искусственный интеллект. Машинное обучение. оптимизация токенов. промпт-инжиниринг. стоимость API.

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

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

Ну.

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

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

Простой эксперимент: 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. Я это отрезал — и модель начала в половине случаев просто вызывать не тот инструмент. Как будто «проговаривание» помогало ей самой выстроить план. Вернул — стало лучше.

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

Что дальше

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

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

Автор: sergei_ai

Источник