Токен ≠ слово. Вот почему это важно
Вы платите за токены. Не за символы, не за слова, не за мегабайты. За токены. И счет приходит совершенно не такой, как вы ожидаете. "Привет, как дела?" — это не 3 слова, а 5 токенов. "Supercalifragilisticexpialidocious" — одно слово, но 7 токенов. Математика ломается.
Токен — это не лингвистическая единица. Это единица вычислений. Модель не думает словами — она думает токенами. И каждый токен требует GPU-памяти, времени инференса и ваших денег.
BPE: алгоритм, который режет ваш текст на куски
Byte Pair Encoding. Звучит скучно, но это сердце токенизации. Алгоритм, который GPT-2 представил миру в 2019 году, а теперь его используют все — от OpenAI до локальных Llama.
Как это работает? Представьте, что у вас есть текст "hello world hello world". BPE сначала разбивает его на символы: h e l l o _ w o r l d. Потом ищет самые частые пары. "l" и "l" встречаются часто? Объединяем в "ll". "ll" и "o"? Объединяем в "llo". Так растет словарь токенов.
# Пример BPE в упрощенном виде
text = "hello world hello world"
# Шаг 1: разбиваем на символы
tokens = ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
# Шаг 2: находим частую пару 'l'+'l' -> 'll'
tokens = ['h', 'e', 'll', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
# Шаг 3: 'll'+'o' -> 'llo'
tokens = ['h', 'e', 'llo', ' ', 'w', 'o', 'r', 'l', 'd']
# И так далее, пока не получим оптимальный наборВ реальности словарь GPT-4 содержит около 100 тысяч токенов. И да, там есть токены для " ChatGPT" (с пробелом в начале), "\n\n" и даже " привет" (тоже с пробелом).
Пробелы в начале токенов — это боль. "привет" и " привет" — разные токены. Если ваш промпт начинается с пробела, вы тратите токен на этот пробел. Всегда проверяйте через OpenAI Tokenizer.
Prefill и KV-cache: два этапа, которые съедают ваш бюджет
Когда вы отправляете промпт в API, происходит магия в два этапа. И оба стоят денег.
Prefill этап: тяжелая артиллерия
Модель получает ваш промпт — все токены сразу. Она должна вычислить внимания между каждым токеном и каждым другим токеном. Это O(n²) операций. 1000 токенов? Миллион операций внимания.
Prefill — это самое дорогое. Он требует полного прохода через всю модель для каждого токена контекста. Именно поэтому длинные промпты так дороги: каждый дополнительный токен увеличивает вычисления квадратично.
KV-cache: кэш, который ускоряет генерацию
После prefill модель начинает генерировать ответ. Токен за токеном. И здесь включается KV-cache — кэш ключей и значений для уже обработанных токенов.
Представьте: вы уже вычислили, как токен "при" относится к токену "вет". Зачем считать заново? KV-cache сохраняет эти отношения. Генерация следующего токена использует кэш — поэтому она быстрее и дешевле, чем prefill.
Почему это так дорого? Математика боли
Возьмем GPT-4 Turbo. 128K контекст. Цена: $10 за 1M входных токенов, $30 за 1M выходных.
| Что делаем | Токенов | Стоимость | Примечание |
|---|---|---|---|
| Короткий запрос | 500 входных + 500 выходных | $0.02 | Кажется мало |
| RAG с документами | 10K входных + 1K выходных | $0.13 | Уже чувствуется |
| Длинный анализ | 50K входных + 10K выходных | $0.80 | Опасно |
| 1000 таких запросов | 50M входных + 10M выходных | $800 | Месячный бюджет маленького стартапа |
А теперь представьте, что у вас RAG-чатбот для компании. 100 пользователей, каждый делает 50 запросов в день. С документами по 5K токенов. Математика становится страшной.
Как оптимизировать промпты: конкретные техники
Теория — это хорошо. Но как сэкономить реальные деньги? Вот что работает.
1 Убивайте пробелы и форматирование
JSON красиво отформатирован? Отлично. Для людей. Для модели — это лишние токены. Каждый пробел, каждая табуляция, каждый перенос строки — токены.
// ПЛОХО: 42 токена
{
"user": "john",
"action": "update",
"data": {
"name": "John Doe",
"age": 30
}
}
// ХОРОШО: 22 токена (экономия 48%)
{"user":"john","action":"update","data":{"name":"John Doe","age":30}}А если использовать ISON вместо JSON, можно сэкономить еще больше — до 70% на структурированных данных.
2 Сжимайте инструкции
"Пожалуйста, будь добр, проанализируй следующий текст и предоставь развернутый ответ с примерами" — 16 токенов.
"Проанализируй текст, приведи примеры" — 6 токенов. Экономия 62% на инструкциях.
Не переусердствуйте. Слишком сжатые инструкции ухудшают качество. Модель может не понять, что вы хотите. Тестируйте баланс между краткостью и ясностью.
3 Используйте системные промпты с умом
Системный промпт отправляется с каждым запросом. Каждый. Раз. Даже если он не меняется.
Решение? Кэшируйте. Или используйте модели, которые поддерживают отдельные системные сообщения (как OpenAI с ролью "system"). Но помните: системный промпт все равно считается во входных токенах.
4 Обрезайте контекст
Вам действительно нужны все 128K токенов? Или достаточно первых 4K? RLM техники помогают моделям самим управлять контекстом, но пока это экспериментально.
Практический совет: суммируйте длинные документы перед отправкой. Или используйте windowed context — только последние N токенов диалога.
Инструменты, которые спасают
- OpenAI Tokenizer — официальный инструмент. Видите, как ваш текст режется на токены. Бесплатно.
- tiktoken — библиотека Python от OpenAI. Считайте токены в коде:
import tiktoken encoding = tiktoken.encoding_for_model("gpt-4") tokens = encoding.encode("Ваш текст здесь") print(f"Токенов: {len(tokens)}") - promptfoo — фреймворк для тестирования промптов. Сравнивает стоимость и качество разных вариантов.
- Собственный мониторинг — логируйте токены каждого запроса. Узнаете, какие эндпоинты самые дорогие.
Ошибки, которые стоят тысяч долларов
Ошибка 1: Отправка полного диалога каждый раз. Каждое сообщение пользователя + вся история + все ответы модели = токены на квадрат. Решение: отправляйте только последние сообщения или используйте summary техники.
Ошибка 2: Не мониторить стоимость в реальном времени. Проснулись — счет на $5000. Решение: ставьте лимиты в API, используйте prepaid счета, пишите алерты.
Ошибка 3: Использовать GPT-4 для задач, где хватит GPT-3.5. Разница в стоимости — 15-30 раз. GPT-4 Turbo дешевле, но все равно дорого. Тестируйте на 3.5, переходите на 4 только если качество критично.
Будущее: что изменится?
Токенизация не идеальна. Исследователи уже работают над:
- Байт-уровневые модели — как Agent Zero, которые работают с сырыми байтами. Нет словаря токенов — нет проблем с редкими словами.
- Адаптивная токенизация — модель сама выбирает, как токенизировать текст для конкретной задачи.
- Сжатие контекста — техники вроде KV-cache quantization, которые уменьшают память на 50-70% без потери качества.
Но пока — токены правят бал. И каждый лишний токен в промпте — это не просто символ. Это вычисление. Это память. Это деньги.
Самый неочевидный совет? Иногда лучшая оптимизация — не отправлять запрос вообще. Кэшируйте ответы на частые вопросы. Используйте векторные базы для семантического поиска вместо LLM. И помните: LLM решают задачи, недоступные человеку, но не все задачи требуют LLM.
Токенизация — это не просто техническая деталь. Это экономика AI-приложений. Понимаете ее — контролируете бюджет. Игнорируете — платите в 10 раз больше.