Ваш бот жрёт бюджет на артикулах: как одна длинная строка сжигает дневную квоту ИИ и что с этим делать
Почему модель считает слово «привет» за один кусочек, а название запчасти — за четыре, и как это удешевить в два раза.
Представьте: ваш чат-бот поддержки работает идеально ровно до тех пор, пока клиент не присылает номер детали. В этот момент диалог замирает, а счётчик трат начинает крутиться вдвое быстрее. Вы смотрите на логи и не понимаете — текста-то всего пара строчек, почему лимиты контекста (памяти модели) тают на глазах?
Дело в том, что нейросеть никогда не читает текст буквами или привычными нам словами. Она смотрит на него через призму токенов — неделимых кусочков данных. Для неё любой текст выглядит как набор лего-кубиков разной длины. Частые слова вроде «привет», «окно» или «цена» часто остаются целыми, одним кубиком [sources=[context_0]]. А вот редкие, длинные и технические названия система обязана дробить, чтобы понимать их структуру. Слово из 15–20 символов со спецсимволами вроде дефисов модель спокойно разрежет на 3–4 отдельных куска.
Шаг первый: ловим модель за руку на вашем рабочем промпте
Откройте прямо сейчас тот самый промпт (инструкцию), по которому живёт ваш бот. Найдите самую страшную строку — длинный SKU (артикул товара). Теперь скопируйте её в бесплатный онлайн-счётчик токенов для вашей конкретной версии модели (например, GPT-турбо или Клауд). Скорее всего, вы увидите пугающую картину: то, что для вас одно слово, для машины превратилось в цепочку вида Арт|икул_|Супер|-Длин|ный|Название. Если сложный термин рвётся моделью на три и более куска — перед вами главный пожиратель бюджета.
Что происходит физически: каждый такой кусок — это отдельная математическая операция внутри матрицы внимания (механизма, который связывает части запроса между собой). Чем больше таких операций, тем выше цена за прогон и тем меньше свободного места остаётся под сам диалог. Лимиты контекста считаются не в словах, которые видите вы, а в этих невидимых глазу кусочках. Одно длинное предложение с узкоспециальными терминами способно съесть треть дневной квоты бота ещё до того, как он успеет подумать над ответом [sources=[context_0]].
Мы столкнулись с этим, когда наш собственный бот начал спотыкаться на запчастях для сельхозтехники. Клиент пишет: «Не закрывается клапан КЛП-СЗР-987654321-УТ». Бот честно пытается удержать в памяти всю эту конструкцию, роняет половину цифр при пересчёте, выдаёт галлюцинацию (ошибочный ответ) и списывает с нашего баланса стоимость пяти обычных сообщений вместо одного.
Шаг второй: прячем монстров за короткими метками (словарь синонимов)
Самый быстрый способ обрезать запрос почти вдвое без потери смысла — завести словарь замен прямо внутри инструкции. Модели абсолютно всё равно, анализировать ли реальную строку из двадцати знаков или абстрактную метку [A-123]. Главное правило замены: метка должна быть визуально короче оригинала минимум в два-три раза и состоять только из латиницы, цифр и простого дефиса. Никаких нижних подчёркиваний, слэшей или кириллицы — они сами по себе могут разбиваться на лишние куски.
Как переписать инструкцию: Было: «Если пользователь спрашивает про совместимость, проверь базу по номеру КЛП-СЗР-987654321-УТ и ответь...» (21 токен). Стало: «Внутри этого диалога любая конструкция вида [A-123] означает деталь КЛП-СЗР-987654321-УТ. Если пользователь пишет [A-123], ищи в базе именно его» (около 8–9 токенов).
Замена вида «Артикул_СуперДлинныйНазвание» на короткую метку [A-123] урезала средний размер входящего сообщения почти вдвое. Мы просто добавили в начало системного промпта блок: «Справочник: [A-1]=КЛП..., [A-2]=МНВ...». Бот мгновенно перестал путаться в цифрах, потому что оперировать коротким тегом психологически проще даже алгоритму, а мы сэкономили около 40% стоимости запросов на этом сценарии.
Шаг третий: переводим редкий язык на человеческий
Второй пожиратель токенов — тяжёлые профессиональные термины, которыми грешат технические специалисты при написании инструкций. Слова вроде «гидрораспределитель» или «синхрофазотрон» гарантированно режутся на 3–4 части. Но если вы один раз объясните модели смысл простыми словами, она перестанет тратить ресурс на расшифровку абракадабры.
Добавьте в преамбулу вашего рабочего промпта раздел «Глоссарий простым языком»: — Гидрораспределитель ([HIDRO]) — железная коробка, которая направляет масло по трубам. — Узел АБС ([ABS-NODE]) — датчик, который не даёт колёсам скользить.
Теперь везде в логике диалога используйте только короткие метки. Когда бот встречает [HIDRO], он уже знает, что речь о коробке с маслом, ему не нужно заново собирать сложное слово из четырёх токенов и вспоминать физику процесса. Это экономит не только деньги, но и такты процессора, делая ответы ассистента заметно быстрее.
Что сделать завтра утром до первой чашки кофе
1. Возьмите топ-10 самых частых обращений ваших пользователей за последний месяц. Выпишите оттуда все технические строки длиннее 12 символов. 2. Пройдитесь по ним токенизатором (в сети есть бесплатные визуализаторы от OpenAI и Anthropic). Посчитайте среднее количество кусков на одну вашу типовую заявку. Если оно больше восьми — вы платите налог на сложность почём зря. 3. Составьте таблицу из двух колонок. Слева — короткий тег в квадратных скобках (например, [SKU-PUMP]), справа — реальная страшная строка. 4. Впишите эту таблицу в самое начало системной инструкции. Замените все упоминания длинных названий в примерах диалогов на эти теги. 5. Прогоните пять реальных старых логов через обновлённый промпт. Проверьте в панели провайдера: потребление токенов на входе должно упасть на 35–50%. Если упало — поздравляю, вы только что купили своему проекту лишний месяц жизни в рамках текущего бюджета.