Меня зовут Анна, я ведущий инженер по тестированию в Рексофт. Последние два года я плотно работаю с большими языковыми моделями: интегрирую их в CI/CD, использую для генерации тестов и анализа логов. И довольно быстро столкнулась с жестокой реальностью: недельный лимит токенов на проекте — всего 10 000, а один мой вежливый запрос с «пожалуйста» съедал почти 500 токенов на входе и еще пару тысяч на выходе.
Пришлось пересмотреть подход. В этой статье я расскажу, как устроена механика токенов, почему русский язык дороже английского в полтора раза, и как я научилась формулировать промпты так, чтобы получать точные ответы за минимальные деньги.
Что такое токены, эмбеддинги и контекстное окно (и при чем здесь «оперативная память»)
Прежде чем оптимизировать, нужно понять, что именно мы оптимизируем. Разберем три ключевых термина.
Токен — минимальная единица текста, которую модель обрабатывает за один шаг. Это может быть целое слово, часть слова (например, «тестиров» + «щик»), знак препинания или даже пробел. Модель не читает буквы, как человек, — она оперирует токенами.
Эмбеддинг — это числовое представление токена в виде вектора (длинного массива чисел). Слова со схожими смыслами оказываются близко в многомерном пространстве: «кот» и «кошка» будут рядом, а «кот» и «автомобиль» — далеко. Модель обучается этим векторам, и они позволяют ей «понимать» контекст.
Контекстное окно — максимальное количество токенов, которое модель может одновременно удерживать в «оперативной памяти» (обычно 8K или 128K). Когда вы превышаете лимит, модель молча обрезает самые старые токены — вы просто теряете начало диалога. И узнаете об этом только по падению качества ответов или галлюцинациям.
Важный нюанс: входные токены — это не только ваш текущий запрос, но и вся история диалога, системная инструкция, а также ранее загруженные документы. Модель не кэширует их между запросами. Если вы вчера загрузили документ на 3000 токенов, а сегодня задаете по нему вопрос — модель прочитает его заново, и вы заплатите повторно.
Сколько «весят» слова на разных языках: мой эксперимент
Я взяла одну и ту же инструкцию для тестирования эндпоинта, перевела ее на русский, английский и китайский, а затем прогнала через токенизатор GPT‑4 (онлайн-инструмент tiktoken).
Результаты оказались показательными:

Почему так? Большинство LLM обучались преимущественно на англоязычных корпусах, их токенизаторы отлично настроены на латиницу: слова короткие, пробелы выступают разделителями. Русские слова длиннее, содержат суффиксы и приставки, поэтому разбиваются на большее число токенов. Логографические языки (китайский, японский, корейский) — самые дорогие: каждый иероглиф часто становится отдельным токеном.
Вывод: если можете формулировать промпты на английском — делайте это. Экономия токенов до 50% без потери смысла, плюс модель дает более точные ответы, потому что обучалась в основном на этих данных.
Мои примеры до и после оптимизации (со скринами токенизатора)
Вот главный эксперимент, который перевернул мое отношение к промптам. Я попросила модель сгенерировать тест-кейсы для эндпоинта /api/login двумя способами.
❌ Промпт «как для человека» (350 токенов на входе, ~2000 токенов на выходе):
«Привет! Будь так добра, помоги мне, пожалуйста, составить набор тест-кейсов для проверки эндпоинта авторизации. Нужно учесть и позитивные сценарии, когда логин и пароль правильные, и негативные — когда что-то не так. Еще было бы здорово подумать про безопасность, особенно про SQL-инъекции. Формат вывода — таблица, но можно просто списком. Заранее спасибо!»
✅ Промпт «лаконичный» (120 токенов на входе, ~500 токенов на выходе):
«Составь тест-кейсы для POST /api/login в формате Given-When-Then:
валидный логин/пароль → успех
невалидный пароль → ошибка
SQL-инъекция в поле login → ошибка без раскрытия данных
Выведи только 5 ключевых кейсов, без пояснений.»
Результат по содержанию — одинаковый, но во втором случае я сэкономила почти 80% токенов и получила ответ в 2 раза быстрее.

Еще один пример — анализ лога ошибки:
Длинный запрос со скопированным стектрейсом на 175 токенов.
Короткий — с указанием конкретных полей (например, «выдели только код ошибки и имя файла») — всего 19 токенов.
Разница в 9 раз при том же результате.
Как я экономлю токены на практике: 7 конкретных правил
1. Формулируйте конкретно, а не расплывчато
Вместо «расскажи про тестирование» пишите «дай пять негативных сценариев для логина». Меньше слов — выше точность.
2. Убирайте «воду» — вежливость, лишние вступления
LLM не человек, она не оценит «пожалуйста» и «спасибо». Эти слова занимают токены, но не несут смысловой нагрузки. Более того, они могут разбавить концентрацию полезной информации, и модель будет хуже выделять главное.
3. Ограничивайте объем ответа
Если не указать желаемый размер, модель выдаст полотно на 2000 токенов. Попросите «перечисли только основные пункты» или «выведи без полного кода, только изменения».
4. Используйте системный промпт для роли и стиля
Не повторяйте в каждом запросе «ты эксперт по тестированию» — задайте это один раз в system-инструкцию. Это не уменьшит общее число токенов (они все равно будут в контексте), но сэкономит ваше время и сделает ответы стабильнее. И не нужно будет тратить токены на повторение роли в каждом user-запросе.
5. Не тащите всю историю диалога, если она не нужна
Начинайте новый чат под каждую новую задачу. Если нужно сохранить контекст, делайте выжимку (summary) и используйте ее вместо полной переписки. Это сэкономит тысячи токенов.
6. Для кода — отправляйте не весь файл, а отдельные функции
Если вы просите ревью кода, не кидайте в промпт монолит на 1000 строк. Разбивайте на функции по 200–500 строк и проверяйте итеративно. Для больших проектов лучше использовать локальные модели или SonarCube — это выгоднее, чем платить за 30K токенов за один запрос.
7. Планируйте запросы по недельному лимиту
-
Допустим, у вас 10 000 токенов в неделю. Это примерно:
-
60 коротких запросов по 170 токенов (вход + выход);
-
или 2–3 глубоких анализа кода с документацией;
-
или один серьезный разбор бага с логами.
Распределяйте сложные задачи равномерно, а для срочных держите резерв.
Как я работаю с жестким лимитом в 10 000 токенов в неделю (кейс)
На одном из проектов лимит был именно таким — 10K на все задачи команды. Я перестроила процесс так:
-
Декомпозирую большую задачу на мелкие шаги. Например, не «проанализируй весь лог и напиши отчет», а сначала «выдели 5 критичных ошибок» (200 токенов), потом «сгенерируй по каждой тест» (300 токенов). В сумме дешевле одного большого запроса.
-
Делаю выжимку из документации (1000 токенов) и использую ее как контекст для последующих вопросов, а не загружаю PDF каждый раз.
-
Для рутинных задач (письма, отчеты) использую шаблоны промптов — они уже проверены, содержат только нужные инструкции.
Итог: мы уложились в лимит, при этом качество не пострадало.
Инструменты, которые помогут видеть и считать токены
Вот два бесплатных сервиса, которые я использую каждый день:
-
OpenAI Tokenizer (на базе tiktoken) — показывает разбивку на токены для GPT-3.5/4.
-
Hugging Face Tokenizer — можно сравнить поведение разных моделей (Llama, Mistral и др.).
Просто скопируйте свой промпт в такой инструмент и посмотрите:
-
сколько токенов он занимает;
-
какие слова неожиданно разбиваются на части (например, «автоматизированное» может стать 4 токенами) — тогда замените их на синонимы короче.
Я часто вижу, как коллеги удивляются, что их «короткий» вопрос на самом деле весит 250 токенов из-за длинных составных слов.

И тоже самое на английском языке значительно короче:

Типичные ошибки, которые я замечала у команды
Расплывчатость — вместо четкого задания пишут общие фразы, модель возвращает общее же, и приходится уточнять (дополнительные токены).
Повторение контекста — системную роль прописывают в каждом сообщении.
Отсутствие ограничений — не указывают желаемый объем ответа, получают огромный текст.
Смешение задач — в одном диалоге обсуждают и тестирование, и написание кода, и аналитику. Лучше разделять — так история не разрастается.

Чек-лист для каждого вашего промпта
Перед тем как отправить запрос, пробегитесь по этому списку:
-
Можно ли заменить русский язык на английский?
-
Есть ли слова без смысловой нагрузки («пожалуйста», «очень прошу», «если не сложно»)?
-
Можно ли сократить описание, оставив только суть?
-
Задан ли желаемый формат и объем ответа?
-
Не дублирую ли я системную инструкцию?
-
Не слишком ли длинная история диалога? (если да — начать новый чат)
Вместо заключения: токены — это не абстракция, а деньги и качество
Работа с LLM — это не магия, а инженерия. Каждый токен имеет цену (в прямом смысле) и влияет на точность ответа. Умение упаковывать смысл в минимальное число токенов — такой же навык, как оптимизация SQL-запросов. Чем меньше данных вы подаете, тем быстрее и дешевле работает система.
Мой вам совет: возьмите свой последний промпт, прогоните через токенизатор и посмотрите, сколько токенов можно отрезать без потери смысла. Вы удивитесь, как много «воды» мы льем, когда общаемся с машиной.
Надеюсь, мой опыт поможет вам сэкономить бюджет и получать более четкие ответы. Если у вас есть свои лайфхаки по оптимизации — делитесь в комментариях, буду рада обсудить!
Автор: QA_Shark_Ann


