Перейти к содержанию

Учусь ИИ, урок 2: токены и контекстное окно — почему нейросеть «забывает»

В прошлом уроке я писал, что языковая модель угадывает «следующий кусочек» текста. Схитрил: не сказал, что это за кусочки. Не буквы, но и не слова, а токены. От них зависит, сколько текста модель «помнит», почему она внезапно забывает начало разговора и сколько стоит ответ.

Урок за 4 минуты: что такое токен, почему русский текст обходится дороже английского, что такое контекстное окно и почему длинный разговор с нейросетью дорожает с каждым сообщением.

Токен — это кусочек слова

Модель не читает буквы: их слишком мало, каждая почти ничего не значит. Не читает и целые слова: их слишком много, особенно в русском с его падежами. Поэтому текст режут на кусочки среднего размера — токены. Частые слова целиком становятся одним токеном, редкие разбиваются на части.

Как резать, решают заранее, ещё до обучения: по огромному корпусу текстов составляют словарь из десятков тысяч самых полезных кусочков. Этот словарь и программу нарезки называют токенизатором. У каждой модели он свой.

Внутри модели токен — просто номер в словаре. «Привет» для неё не слово, а, условно, число 49 213.

Сколько это в цифрах

Я прогнал несколько строк через две модели, которые стоят у меня дома (Qwen3 и Gemma 3, обе через Ollama):

Текст Символов Токенов у Qwen3 Токенов у Gemma 3
«Привет, как дела?» 17 7 7
«Hello, how are you?» 19 6 7
Начало «Курочки Рябы» по-русски 94 44 36
То же по-английски 146 38 39
«электрофотографический» 22 7 5
«3,14159265358979» 16 16 18

Что из этого видно:

  • Русский дороже английского. У Qwen3 одна и та же сказка по-русски заняла 44 токена, а по-английски — 38, хотя английский текст на полтора раза длиннее в буквах. Токенизаторы учили в основном на английском, и русские слова режутся на кусочки мельче.
  • Модели режут по-разному. Gemma 3 обошлась с русским текстом заметно экономнее Qwen3. Для русскоязычной работы это не мелочь: меньше токенов — больше влезает и дешевле обходится.
  • Числа — поцифирно. Шестнадцать символов числа «пи» дали 16–18 токенов: каждая цифра отдельно. Отчасти поэтому модели бывают неуклюжи в арифметике: они видят не число, а цепочку цифр.

Грубая прикидка для русского текста: один токен — это 2–3 буквы. Стандартная страница (1800 знаков) — примерно 700–900 токенов.

Контекстное окно: память модели

Модель не помнит прошлых разговоров. Всё, что она «знает» о текущей беседе, — это текст, который ей подают прямо сейчас: ваш вопрос, её прошлые ответы, приложенные файлы, скрытые инструкции. Вместе это называется контекстом, а предел его длины в токенах — контекстным окном.

Окна у современных моделей огромные: десятки и сотни тысяч токенов, у некоторых — миллион. Но у окна есть край. Что за краем — для модели не существует. Чат-программа поступает с этим одним из двух способов: молча выкидывает самое старое или заменяет его кратким пересказом.

Отсюда эффект «модель забыла, о чём мы договаривались вначале». Она не забыла — этого просто больше нет в её окне.

Я наблюдал это вживую. Пока мы с ИИ-агентом переделывали этот блог, работа шла весь день, и агент несколько раз упирался в край окна. Тогда старая часть разговора заменялась пересказом: решения сохранялись, а мелкие подробности пропадали. Поэтому важные договорённости агент записывает в отдельные файлы-заметки: они переживут любое сжатие.

Почему длинный чат дорожает

Модель не хранит разговор у себя. С каждым новым сообщением чат-программа отправляет ей всю историю заново — и платите вы (или ваш тариф) за все эти токены каждый раз.

Первое сообщение — 100 токенов. Десятое — уже, скажем, 5000: вся переписка плюс новый вопрос. Двадцатое — 10 000. Каждый следующий ответ дороже предыдущего, хотя вопрос такой же короткий.

Отсюда простые правила:

  • Новая задача — новый чат. Хвост старого разговора не помогает, а стоит денег и сбивает модель.
  • Не вставляйте файл целиком, если нужен один раздел.
  • Платные API считают отдельно входные токены (то, что вы отправили) и выходные (что модель написала). Выходные обычно в несколько раз дороже.

Попробуйте сами

Откройте любой онлайн-токенизатор — например, токенизатор OpenAI, он работает без регистрации. Вставьте одно и то же предложение по-русски и по-английски и сравните число токенов. Потом вставьте длинное число или редкую фамилию и посмотрите, как их режет.

Если у вас стоит Ollama, точное число токенов показывает сама модель — поле prompt_eval_count в ответе:

curl http://localhost:11434/api/generate -d '{
  "model": "qwen3:4b",
  "prompt": "Привет, как дела?",
  "raw": true,
  "stream": false,
  "options": {"num_predict": 1}
}'

"raw": true отключает служебную обёртку чата, чтобы посчитать только ваш текст, а num_predict: 1 просит модель не тратить время на ответ.

Что запомнить

  • Модель читает и пишет токенами — кусочками слов. Один токен в русском — примерно 2–3 буквы.
  • Русский обычно дороже английского по токенам, и у разных моделей по-разному.
  • Контекстное окно — вся «память» модели в текущем разговоре. Что за его краем, того для неё нет.
  • В чате каждое сообщение отправляет всю историю заново, поэтому длинные разговоры дорожают. Новая задача — новый чат.

Проверьте себя

  1. Почему одна и та же фраза по-русски обычно занимает больше токенов, чем по-английски?
  2. Модель «забыла» условие, которое вы дали в начале длинного разговора. Что на самом деле произошло?
  3. Вы задали в одном чате 30 коротких вопросов подряд. Почему тридцатый ответ обошёлся дороже первого?

В следующем уроке — галлюцинации: почему модель уверенно сочиняет несуществующие факты и как это ловить.

Написать комментарий

Адрес почты не публикуется. Обязательные поля отмечены звёздочкой.

Возможно, вы не читали