Это вторая статья серии «AI без магии». В первой разобрали, как мы пришли от статистики 1948 года к GPT-4 и что LLM — это «очень-очень хорошее автодополнение». Теперь смотрим, что происходит внутри модели на каждом шаге работы: что такое токены и контекст, как модель выбирает следующее слово, и почему даже идеальная LLM обречена иногда уверенно врать.
Слово «думает» в кавычках
Когда мы говорим «модель думает», мы натягиваем человеческое слово на процесс, который на думание совсем не похож. Внутри нет рассуждений, нет внутреннего монолога, нет момента «дай-ка я подумаю». Есть только повторяющаяся операция: посмотреть на весь текст в окне контекста — и выдать следующий токен. Потом этот токен дописывается в конец, и операция повторяется.
Это называется авторегрессией: каждый следующий токен предсказывается на основе всех предыдущих. И никаких «остановок подумать» в этом цикле нет. Модель не может задержаться, не может посмотреть на свой ответ со стороны, не может сказать «погоди, я ошибся пять токенов назад, давай начну заново». Каждый шаг она обязана выдать ровно один токен — и сразу едет дальше.
Поэтому всё странное, что мы наблюдаем в LLM, можно вывести из этих ограничений. Почему она «забывает» начало длинного диалога — потому что окно контекста конечно. Почему уверенно несёт чушь — потому что у её процесса нет внутренней проверки на правду. Почему «подумай пошагово» помогает — потому что модель пишет себе промежуточные токены и читает их обратно как часть собственного входа.
Разберём по порядку.
Токены, а не слова
Модель не видит ни букв, ни слов. Она видит токены — sub-word куски длиной обычно 3-4 символа. Слово «привет» в большинстве токенизаторов — один токен. «Галлюцинирует» — три-четыре. Цифры разбиваются почти посимвольно. Эмодзи иногда занимают 2-3 токена каждый.
Самый известный пример того, что модель не видит букв: посчитайте R в слове «strawberry». Долгое время GPT-4 говорила «два», потому что для неё strawberry — это два токена straw и berry, а не последовательность букв. Внутри её представления буквы R нет — есть только два числа из словаря.
Похожая история с опечатками. Слово ghost в OpenAI-токенизаторе — один токен с номером, скажем, 7142. Опечатка gohst — три токена g, oh, st. Для модели это два совершенно разных входа. Она научилась исправлять опечатки только потому, что в обучающих данных таких опечаток было много, и она запомнила, какие искажённые токен-цепочки соответствуют каким нормальным.
У этого есть ещё практическое следствие: русский токенизируется хуже английского. Английский текст в среднем влезает в один токен на 4 символа, русский — на 1.5-2. То есть один и тот же текст по-русски занимает в API в 2-3 раза больше токенов. Это значит дороже, медленнее и быстрее упирается в лимит контекста. Поэтому многие приложения внутри переводят запросы на английский — это экономнее.
Контекст: память, которая всегда заканчивается
Окно контекста — это всё, что модель «помнит» в данный момент. Туда входит ваш промпт, системное сообщение, история диалога, и всё, что модель уже успела выдать в текущем ответе. Размер окна меряется в токенах: у GPT-4 Turbo это 128k, у Claude — 200k, у Gemini 1.5 Pro доходит до 1-2 миллионов.
128k токенов — это примерно 300 страниц текста. Звучит много, но на длинных диалогах это заканчивается быстрее, чем кажется: системный промпт, RAG-контекст, история переписки, прикреплённые документы — всё это съедает место. Когда контекст заполняется, более старые сообщения вытесняются. Отсюда классическое «модель забыла, что я ей сказал в начале».
Важная тонкость: внутри окна контекста модель тоже распределяет внимание неравномерно. Исследования показывают, что модели лучше помнят начало и конец контекста, а в середине информация «теряется» — это называют lost in the middle. Поэтому если у вас длинный документ, важные инструкции лучше повторять в конце, а не закапывать в середину.
И ещё: контекст — это не «память» в смысле БД. Между разными чатами модель ничего не помнит. Каждый новый разговор начинается с пустого окна, и всё, что вы ей рассказали в прошлый раз, для неё не существует. Когда ChatGPT начинает «помнить» вас между сессиями — это надстройка: специальный модуль вытаскивает релевантные факты и подкладывает их в системный промпт нового разговора.
Один токен за раз
Теперь самое любопытное. Вы спросили модель что-то, она «думает» секунду, и пишет ответ. Что происходит внутри этой секунды?
На самом деле она не «пишет ответ». Она много-много раз делает одну и ту же операцию. Один прогон через сеть — это не ответ целиком, а один токен.
Берётся ваш промпт целиком. Он прогоняется через все 96 слоёв трансформера. На выходе модель выдаёт распределение вероятностей по всему словарю: для каждого из 50-100 тысяч токенов словаря — число, оценка вероятности того, что именно этот токен должен быть следующим. Из этого распределения выбирается один токен. Он дописывается в конец промпта. И всё начинается сначала: новый промпт (старый плюс один токен) прогоняется через сеть, получается новое распределение, выбирается новый токен.
Вот так, по одному токену за раз, наматывается весь ответ. Когда модель выдаёт специальный токен «конец» — генерация останавливается.
Из этого следует пара важных вещей. Во-первых, модель не может «откатить» уже сказанный токен. Если она на пятом токене своего ответа сболтнула что-то не то — она не может вернуться и переписать. Она может только продолжать с этого места, делая вид, что всё идёт по плану. Поэтому вы иногда видите ответы вроде «Шопен родился в 1820 году… а вернее, в 1810 году»: модель внутри ответа поняла, что ошиблась, но первая ошибка уже в контексте, и стереть её нельзя.
Во-вторых, скорость ответа линейна по длине. Длинный ответ — это в буквальном смысле много прогонов через всю сеть, по одному на каждый токен. Поэтому стриминг в чатах — это не «ускоренный показ», это реальный темп генерации.
Sampling: почему «всегда самое вероятное» — плохо
Из распределения нужно как-то выбрать один токен. Самый очевидный способ — взять самый вероятный. Это называется greedy, и работает оно плохо.
Если всегда брать максимум, текст становится плоским и быстро зацикливается. В книге Prompt Engineering with LLMs есть хрестоматийный пример: попросили старую модель text-curie-001 написать список причин, почему ей нравится «Звёздный путь». Получилось вот это:
- The characters are well-developed and interesting.
- The plot is well-constructed and engaging. …
- The franchise has a strong foundation.
- The franchise has a passionate fanbase.
- The franchise has a strong legacy.
- The franchise has a long history. …
- The franchise has a strong legacy.
- The franchise has a strong following.
Модель попала в паттерн «The franchise has a strong X», и из этого паттерна не может выбраться: на каждом шаге продолжение паттерна вероятнее, чем его слом. Список не заканчивается, потому что каждый следующий пункт списка вероятнее, чем «всё, хватит».
Чтобы такого не было, в выбор добавляют случайность. Главная ручка — temperature. При temperature=0 модель работает почти как greedy: всегда выбирает самое вероятное. При temperature=1 выбор идёт по «честным» вероятностям. При temperature=2 распределение «уплощается» — даже маловероятные токены получают шанс, и текст становится диким и творческим (а часто и невнятным).
Есть ещё две тонкие настройки: top-k (выбираем только из k самых вероятных токенов, остальные игнорируем) и top-p, она же nucleus sampling (выбираем из минимального набора токенов, чья суммарная вероятность ≥ p, например 0.9). Top-p обычно работает лучше top-k, потому что адаптивен: если модель уверена в одном токене, top-p оставит только его; если распределение размазано — оставит больше вариантов.
В практике для большинства задач температура 0.7-0.8 — sweet spot. Для кода и фактов часто берут 0.0-0.3 (нужна предсказуемость). Для творчества — 1.0+.
Почему модель галлюцинирует
Теперь самое интересное. Почему даже хорошо обученная LLM иногда уверенно несёт чушь?
Часто говорят: «потому что модель не знает, что правда, а что нет». Это правда, но это только полдела. На самом деле проблема глубже и интереснее.
В сентябре 2025 года исследователи OpenAI выпустили работу «Why Language Models Hallucinate», в которой утверждают неожиданное: главная причина галлюцинаций — это то, как модели обучают и оценивают. Современные бенчмарки устроены как тест с выбором ответа: за правильный ответ — балл, за неправильный — ноль, за «не знаю» — тоже ноль. В такой системе угадать выгоднее, чем признаться, что не знаешь.
Представьте себе модель, которую спросили о дне рождения малоизвестного человека. У модели есть две стратегии:
- сказать «не знаю» — гарантированный ноль
- угадать любую дату — 1 шанс из 365 быть правым, и в среднем по тысяче таких вопросов угадавшая модель наберёт больше баллов, чем честная
Бенчмарки годами поощряли вторую стратегию. И модели её выучили. Они галлюцинируют не потому что «сломаны», а потому что их специально, пусть и непреднамеренно, научили угадывать, когда они не знают.
В той же статье OpenAI приводит свежие цифры из system card GPT-5 — сравнение двух моделей на бенчмарке SimpleQA:
| Метрика | gpt-5-thinking-mini | OpenAI o4-mini |
|---|---|---|
| Доля «не знаю» | 52% | 1% |
| Точность (правильных ответов) | 22% | 24% |
| Доля галлюцинаций | 26% | 75% |
Старая o4-mini угадывает почти всегда — и поэтому ошибается в 75% случаев. Новая gpt-5-thinking-mini в половине случаев честно говорит «не знаю» — и галлюцинирует только в 26%. Точность при этом почти одинаковая. Иначе говоря: разница в честности, а не в знаниях.
Но есть и более глубокая, теоретическая часть. Та же группа в работе «Calibrated Language Models Must Hallucinate» доказывает: даже идеально откалиброванная модель обречена галлюцинировать на редких фактах. Логика такая. На этапе предобучения модель видит только корректные тексты — без меток «правда» / «неправда». Она учится приближать общее распределение языка. Закономерности типа правил пунктуации она выучит безошибочно, потому что в них есть паттерн. Но произвольные единичные факты — день рождения малоизвестного человека, точное название третьей статьи в малоизвестном журнале — паттернами не описываются. Они просто запоминаются или не запоминаются, в зависимости от того, сколько раз встретились в обучающих данных.
Аналогия из той же статьи: представьте, что нужно по фотографии питомца угадать его день рождения. Никакой алгоритм с этим не справится, потому что между фото и датой нет никакой закономерности. А раз модель обязана выдать токен на каждом шаге — она выдаст какой-то. Иногда правдоподобный.
Из этого следует, что галлюцинации нельзя полностью убрать, пока архитектура остаётся такой же. Можно научить модель чаще говорить «не знаю» — это и делают новые модели вроде GPT-5 Thinking. Можно подключить retrieval: вытаскивать настоящие факты из базы и давать модели в контекст. Можно прикрутить инструменты — поиск, калькулятор, код. Но саму склонность модели к правдоподобному угадыванию это снижает, а не убирает.
Полезно различать три типа галлюцинаций (по обзору Huang et al. 2023):
- Фактические — модель говорит неправильное про реальный мир. «Шопен родился в 1820 году».
- Цитатные — модель выдумывает источник, статью, книгу или цитату. Особенно опасно в академической работе и юриспруденции: были реальные случаи, когда американские адвокаты подавали в суд иски со ссылками на несуществующие судебные дела, сгенерированные ChatGPT.
- Вычислительные — модель уверенно делает арифметическую ошибку. Это естественно: ей не положено считать, она положена предсказывать токен.
Универсальный признак того, что нужно перепроверить ответ модели — это точные числа, имена, даты, ссылки. Всё, что нельзя угадать из паттерна, модель скорее всего достроила.
Почему «подумай пошагово» работает
Есть знаменитый трюк: если добавить к промпту «давайте подумаем шаг за шагом», качество ответов на задачи резко растёт. Это называется chain-of-thought, и звучит немного по-эзотерически — будто мы уговариваем модель «постараться». На самом деле механизм абсолютно прямолинейный.
Помните, что модель не умеет «остановиться и подумать». На каждом шаге она обязана выдать токен. Когда ей подсунули задачу типа «у Васи 5 яблок, он съел 2, сколько осталось» — модель прямо сейчас, на следующем шаге, должна выдать ответ. У неё нет внутреннего скетчпада. Если ответ требует двух-трёх шагов рассуждения — у неё нет места эти шаги сделать.
Когда мы пишем «подумай пошагово», мы фактически разрешаем модели выписать промежуточные шаги во внешний мир — на свой собственный выход. Эти выписанные шаги становятся частью её контекста для следующего токена. То есть модель использует собственный output как рабочую память.
Это ровно то, что сейчас называют «reasoning models» вроде o1, o3, GPT-5 Thinking, DeepSeek R1. Внутри они делают именно это, только в гораздо большем объёме: модель сначала генерирует длинную внутреннюю цепочку рассуждений (часто скрытую от пользователя), и только потом — финальный ответ. Это работает, потому что у LLM «думать» означает буквально «писать токены». Чем больше токенов на черновик — тем сложнее задачу можно решить.
Что мы теперь знаем
Соберём картину. LLM — это авторегрессивный предсказатель токенов. На каждом шаге она получает на вход всё, что есть в окне контекста, и выдаёт распределение вероятностей по словарю. Из этого распределения сэмплируется один токен — параметрами temperature, top_p управляется баланс между предсказуемостью и творчеством. Дальше токен дописывается в контекст и операция повторяется.
Из этой механики выводятся все её странности. Модель не может «остановиться и подумать» — может только писать токены, и поэтому «подумай пошагово» работает. Модель не различает правду и правдоподобие — поэтому уверенно галлюцинирует. Модель не помнит ничего за пределами окна контекста — поэтому забывает начало диалога. Модель видит токены, а не буквы — поэтому путается в подсчёте букв.
В следующих трёх статьях разберём всё это по деталям. Сначала — токенизация и эмбеддинги: как именно текст становится числами и почему вектор слова «король» минус вектор «мужчина» плюс вектор «женщина» равен вектору «королева». Потом — attention: как именно работает тот самый soft search, который позволяет модели смотреть на любой токен из контекста за один шаг. И финал — внутри блока трансформера: как все эти кубики собираются в работающую модель, которую мы зовём GPT.
- Why Language Models Hallucinate Главный тезис: модели галлюцинируют не потому что «глупые», а потому что бенчмарки штрафуют «не знаю» и поощряют угадывать.
- Calibrated Language Models Must Hallucinate Теоретическая работа: даже идеально откалиброванная модель обязана иногда галлюцинировать на редких фактах.
- A Survey on Hallucination in Large Language Models Подробная таксономия типов галлюцинаций — фактические, верности, intrinsic vs extrinsic.