Токены, стоимость и переносимость моделей
В проде каждый токен стоит денег и времени, а один и тот же промпт на разных моделях ведёт себя по-разному — это нужно учитывать.
Токен — единица, которой модель считает текст; от числа токенов на входе и выходе зависят и цена запроса, и задержка.
Откуда берётся стоимость
Провайдеры тарифицируют по токенам: отдельно за вход (промпт) и за выход (ответ). Длинный системный промпт, раздутые few-shot примеры, огромный контекст и многословные ответы — всё это деньги и задержка на каждом запросе. На масштабе тысяч вызовов экономия токенов ощутима.
Оценка длины
Грубая прикидка: для английского ~1 токен на 4 символа; для русского текста токенов на тот же смысл обычно больше (кириллица «дробится» сильнее). Точное число даёт токенайзер конкретной модели. Простая прикидка по символам помогает оценить порядок.
def approx_tokens(text, chars_per_token=4):
return max(1, round(len(text) / chars_per_token))
prompt = "Сделай краткое содержание текста в трёх пунктах."
print("Символов:", len(prompt))
print("Примерно токенов:", approx_tokens(prompt))Вывод:
Символов: 48 Примерно токенов: 12
Это лишь оценка порядка; реальный токенайзер для русского обычно даст больше. Для бюджета важна не точность до токена, а понимание, что длина = деньги.
Приёмы оптимизации
- Короче инструкции: уберите воду, дубли, очевидное. Краткий точный промпт часто не хуже длинного.
- Меньше примеров: оставьте минимум few-shot, который держит качество.
- Отбор контекста: кладите только релевантные куски, а не весь документ.
- Ограничивайте вывод: «до 100 слов», «только JSON» — экономят выходные токены.
- Кэширование промптов: если провайдер поддерживает кэш стабильной части промпта — повторные запросы дешевле.
- Дешевле модель для простого: рутинную классификацию незачем гонять на самой дорогой модели.
Переносимость между моделями
Промпт, идеально работающий на одной модели, на другой может вести себя иначе: отличаются дефолтный стиль, чувствительность к формату, поведение system prompt, длина контекста, склонность к рассуждению. Разные семейства (Claude, GPT, Gemini и др.) имеют свои «привычки».
| Что проверить при переносе |
| Соблюдается ли формат вывода |
| Не изменился ли тон/многословность |
| Так же ли работают делимитеры/роли |
| Нужна ли явная просьба о рассуждении |
Практический вывод: при смене модели прогоните свой eval-набор заново и при необходимости подстройте промпт. Не считайте промпт «универсальным» по умолчанию.
Итог
- Стоимость и задержка зависят от числа токенов на входе и выходе.
- Оптимизируйте: короче инструкции, меньше примеров, отбор контекста, ограничение вывода, кэш.
- Для простых задач берите модель подешевле.
- Промпты не полностью переносимы — при смене модели перепроверяйте на eval-наборе.