Как работают LLM: токены, контекст, генерация
Как работают LLM: токены, контекст, генерация
Чтобы писать хорошие промпты, нужно понимать, что происходит «под капотом» языковой модели. Когда ты набираешь текст и нажимаешь «Отправить», модель не «читает» и не «думает» как человек. Она выполняет серию математических операций, которые мы разберём на трёх ключевых понятиях: токены, контекст и процесс генерации.
Токены — атомы языка
Модель не работает с буквами или словами напрямую. Она разбивает текст на токены — минимальные смысловые единицы. Токеном может быть слово, часть слова, знак препинания или даже пробел.
Посмотри, как одна и та же фраза разбивается на токены:
Вход (текст): "Привет, как дела?"
Токенизация (примерная схема):
[Привет] [,] [ как] [ дела] [?]
1 2 3 4 5 ← 5 токенов
Английский текст обычно даёт примерно 1 токен на 0.75 слова. Русский — ближе к 1 токену на 0.5–0.7 слова из-за более длинных слов и падежных окончаний.
Почему это важно для промпт-инженера?
- У каждой модели есть лимит токенов (контекстное окно) — максимальное количество токенов, которое модель может «видеть» одновременно. Современные модели имеют окна от 4 000 до 200 000+ токенов.
- Лимит действует на сумму входа (твой промпт) и выхода (ответ модели). Если ты отправил 3 500 токенов, а лимит — 4 096, модель сможет сгенерировать не больше 596 токенов ответа.
- Длинные промпты «съедают» место для ответа. Если тебе нужен развёрнутый ответ, держи промпт компактным.
Контекст — что модель «видит»
Контекст модели — это весь текст, который попадает в контекстное окно. Модель не имеет памяти между разговорами (если только приложение не подставляет историю диалога в промпт за тебя). Каждый новый запрос модель обрабатывает с нуля.
Представь контекст как окно фиксированного размера, через которое модель «смотрит» на текст:
┌──────────────────────────────────────────────┐
│ КОНТЕКСТНОЕ ОКНО (например, 8 000 токенов) │
│ │
│ [Системный промпт] [История диалога] [Твой запрос] │
│ 500 токенов 2000 токенов 300 токенов │
│ │
│ Осталось для ответа: 8 000 - 2 800 = 5 200 токенов │
└──────────────────────────────────────────────┘
Что из этого следует для тебя:
- Модель не помнит предыдущие разговоры. Если ты открыл новую вкладку или новый чат — модель начинает с чистого листа. Всё, что она «знает» в рамках текущего диалога — это текст, который приложение отправляет вместе с каждым новым сообщением.
- Порядок текста в промпте важен. Модель часто лучше учитывает информацию из начала и конца промпта, чем из середины. Ключевые инструкции размещай ближе к началу или непосредственно перед данными.
- Контекстное окно — это бюджет. Если ты даёшь модели большой документ на анализ, у тебя остаётся меньше места для инструкций и для самого ответа.
Процесс генерации — как модель «пишет»
Модель генерирует текст последовательно, токен за токеном. Она не пишет весь ответ сразу, а на каждом шаге выбирает следующий наиболее вероятный токен, учитывая всё, что уже есть в контексте.
Упрощённо процесс выглядит так:
Промпт: "Столица Франции —"
Шаг 1. Модель смотрит на контекст и вычисляет вероятности следующего токена:
"Париж" → вероятность 92%
"Пари" → вероятность 3%
"город" → вероятность 1%
... другие варианты ...
Шаг 2. Модель выбирает токен "Париж" (самый вероятный).
Шаг 3. Теперь контекст: "Столица Франции — Париж". Модель вычисляет следующий токен:
"." → вероятность 78%
"," → вероятность 8%
", а" → вероятность 4%
... другие варианты ...
И так далее, пока модель не сгенерирует специальный токен «конец ответа» или не достигнет лимита.
Важный нюанс: модель не всегда выбирает самый вероятный токен. Параметр temperature (о котором мы поговорим в модуле 10) управляет «креативностью» — чем выше temperature, тем чаще модель выбирает менее вероятные варианты, делая текст разнообразнее, но и непредсказуемее.
Почему это знание меняет промпты
Теперь, понимая механику, ты можешь формулировать промпты точнее:
| Знание о модели | Как применить в промпте |
|---|---|
| Модель генерирует токен за токеном | Проси пошаговый вывод: «Сначала опиши подход, потом решение» |
| Модель лучше видит начало и конец | Ключевые инструкции — в начало, данные — ближе к концу |
| Модель не помнит между диалогами | В каждом промпте давай весь нужный контекст |
| Лимит токенов — общий на вход и выход | Держи промпт компактным, если ждёшь длинный ответ |
Практический пример: считаем токены
Давай посмотрим на конкретном примере, как длина промпта в токенах влияет на возможности ответа.
Вход (короткий промпт):
Переведи на английский: "Как дела?"
Этот промпт занимает примерно 15–20 токенов. При контекстном окне в 8 000 токенов модель может сгенерировать около 7 980 токенов ответа — огромный запас.
Вход (длинный промпт):
Я дам тебе статью на русском языке. Переведи её на английский,
сохраняя стиль и тон оригинала. Обрати внимание на терминологию:
если встречаешь специализированный термин, используй устоявшийся
английский эквивалент, а не дословный перевод.
СТАТЬЯ:
[далее 6 000 токенов текста статьи]
Теперь промпт занимает ~6 050 токенов, оставляя лишь ~1 950 на ответ. Если статья длинная, ответ может не поместиться — модель оборвёт перевод на середине.
Вывод: перед отправкой большого документа подумай: хватит ли оставшегося места для ответа? Для длинных текстов иногда лучше разбить их на части и обрабатывать по очереди.
Проверь себя
Ты отправляешь модели промпт из 6 000 токенов. Контекстное окно модели — 8 000 токенов. Сколько токенов осталось на ответ?
Ответ: примерно 2 000 токенов (8 000 − 6 000). Это около 1 500 слов русского текста — достаточно для короткой статьи, но не для развёрнутого отчёта.
Типичная ошибка: невидимая история
Ты работаешь в веб-интерфейсе, ведёшь долгий диалог с моделью — 20, 30, 50 сообщений. Кажется, что модель «помнит» всё. Но на самом деле приложение добавляет историю диалога в каждый новый запрос, и она съедает контекстное окно.
Длинная история может занимать 6 000–7 000 токенов. Когда ты дописываешь новый вопрос, на ответ остаётся всего 1 000 токенов. Модель начинает отвечать коротко, обрывать предложения или «забывать» инструкции, которые ты дал в начале.
Решение: если диалог стал длинным, а модель ведёт себя странно — начни новый чат и перенеси в него ключевые инструкции.
Итог
- Токен — минимальная единица текста для модели. Русский текст занимает больше токенов на слово, чем английский.
- Контекстное окно — это фиксированный бюджет токенов на промпт и ответ вместе. Длинный промпт оставляет меньше места для ответа.
- Модель генерирует текст последовательно, токен за токеном, выбирая наиболее вероятное продолжение.
- Модель не имеет памяти между разговорами — всё, что ей нужно знать, должно быть в промпте.
Что дальше
Мы разобрали, как модель работает внутри. Теперь посмотрим на разнообразие самих моделей: какие типы LLM существуют, чем они отличаются и как это влияет на написание промптов.