Глава 1: Токенизация
Принцип
Текст разбивается на токены перед обработкой моделью. Понимание токенизации позволяет писать более эффективные промпты.
Как работает токенизация
LLM не видит буквы или слова — только токены. Токен — это фрагмент текста, определённый словарём модели.
Средние значения:
-
1 токен ≈ 4 символа английского текста
-
1 токен ≈ 1-2 символа кириллицы
-
1 токен ≈ 1 слово кода (ключевые слова, операторы)
Примеры токенизации
Пример 1: Английский текст
"Hello world" → $"Hello", " world"$ → 2 токена
Пример 2: Русский текст
"Привет мир" → $"При", "вет", " мир"$ → 3 токена
Пример 3: Python код
"def func():" → $"def", " func", "():",$ → 3 токена
Влияние на промпты
1. Экономия токенов
Английские термины эффективнее русских по соотношению информация/токены.
Плохо (7 токенов):
"Напиши функцию валидации"
Лучше (5 токенов):
"Write validation function"
Компромисс (6 токенов):
"Напиши validation функцию"
2. Редкие слова
Редкие слова разбиваются на больше токенов, что может влиять на понимание.
Пример 1: Частое слово
"function" → 1 токен
Пример 2: Редкое слово
"дефенестрация" → 5+ токенов
Пример 3: Технический термин
"PostgreSQL" → 3 токена
3. Код vs текст
Код обычно компактнее естественного языка в токенах.
Описание (12 токенов):
"Функция, которая принимает список чисел и возвращает их сумму"
Код (8 токенов):
def sum\_list(numbers: list$int$) -\> int:
return sum(numbers)
Практические рекомендации
| Ситуация | Рекомендация |
|---|---|
| Длинный контекст | Сжимать описания, использовать код вместо текста |
| Технические термины | Использовать английские термины |
| Структурированные данные | JSON компактнее текстового описания |
| Повторяющийся текст | Вынести в переменную/ссылку |
Подсчёт токенов
Python-код для оценки:
import tiktoken
def count\_tokens(text: str, model: str = "gpt-4") -\> int:
"""Подсчёт токенов для текста."""
encoding = tiktoken.encoding\_for\_model(model)
return len(encoding.encode(text))
\# Примеры
print(count\_tokens("Hello world")) \# 2
print(count\_tokens("Привет мир")) \# 3
print(count\_tokens("def func(): pass")) \# 5
Лимиты контекста
| Модель | Контекст (токены) | ≈ Символов |
|---|---|---|
| GPT-4 Turbo | 128K | 500K |
| Claude 3 | 200K | 800K |
| Gemini 1.5 | 1M | 4M |
Формула оценки:
где — коэффициент языка:
-
Английский:
-
Русский:
-
Код: