Феерическая демистификация AI LLM

Чё, пацаны, LLM?

Редкое фото ИИ LLM сервиса в живой природе

Редкое фото ИИ LLM сервиса в живой природе

Кратко

Современный ИИ-сервис на базе LLM (например, ChatGPT или DeepSeek) состоит из:

  1. Математического ядра — калькулятора, с вшитыми рефлексами на специальные инструкции
  2. Инженерной обвески этого ядра «тупыми» скриптами, делающими из ядра продаваемый сервис:
    • RAG — внешняя память, поиск в интернете
    • MCP — интерфейс для пристыковки к LLM внешних «рук»
    • IDE auto-complete (FIM) — подсказки в коде на лету
    • Agentic mode — то, как LLM сама редачит код
  3. Фронтэнда (обычно окна чата), создающего иллюзию памяти у LLM

Если математическое ядро (сама LLM) — это то самое математическое чудо, «мистический чёрный ящик», технологический прорыв 21 века и т.д. и т.п., то вся остальная обвеска — это зоопарк микро-челиксов, бегающих вокруг ядра, записывающих что оно говорит, подсовывающих нужные ему бумажки и нажимающих запрошенные им кнопки.

Математическое ядро

В строгом смысле слова, LLM — это и есть то самое математическое ядро, на базе которого строится LLM ИИ-сервис.

Устройство и работа ядра

Мат.ядро — это статический слепок всего интернета (ну или на чём модель тренилась).

💡

Статический значит, что основные нейроны модели на момент предоставления пользователю сервиса — уже настроены и не меняются.

Мат.ядро умеет делать ровно одну вещь: предсказывать наиболее вероятное продолжение входного текста. При этом «на заводе» ядро прошивается видеть системные маркеры по типу <FUNCTION CALL> или <INSERT_OUTPUT_HERE>.

Мат.ядро принимает на вход текст (плюс некоторые доп. параметры), и выдаёт тоже текст (математически наиболее вероятный ответ). Именно так выглядит прямое общение с LLM (т.е. минуя всеми любимое окно чата).

Если можно образно сказать, что во время обучения нарываются ямы (локальные минимумы) — то при боевой работе мат.ядро «закатывает» входной текст в наиболее вероятные ямы.

Модель умеет выдавать ответ не целиком, а потоком из кусков слов (токенов). Генерирующийся поток можно оборвать (например, вбив в чат новый вопрос).

Всё. Реально ВСЁ.

В модели не хранится никаких состояний. Ядро каждый раз видит вас как в первый раз. Иллюзия диалога достигается за счёт того, что в модель скармливается вся ваша предыдущая переписка целиком.

При этом есть физический предел того, сколько модель может съесть (т.н. Context Window). Обычно это что-то порядка 5'000..500'000 слов в зависимости от модели.

💡

В LLM длину текста принято измерять именно в токенах, а не в словах или символах. При генерации на русском языке одно слово обычно состоит из 1..2 токенов. В реальных моделях по состоянию на 2026 год — контекстное окно составляет от 8'000 до 1'000'000 токенов.

Reasoning

Один из самых значимых технических прорывов в мат.аппарате LLM — это Рассуждения (Reasoning, Chain-of-Thought).

Модели, умеющие в Reasoning — под капотом (либо в открытую) генерят ответ на пользовательский промпт так:

  1. В качестве первого ответа на пользовательский промпт генерится шаг рассуждений по типу меня спросили про это, значит надо подумать про это
  2. Модель сама считывает этот свой ответ, и генерит на это новое рассуждение по типу про это я подумала, значит далее думаю про это.
  3. Когда она решает, что дошла в размышлениях до конца — она генерит маркер по типу <FINAL_THOUGHT>, и следящие за моделью скрипты понимают, что после этого маркера модель уже будет писать финальный ответ для пользователя.

Прикол в том, что успешно себя показывают модели, которые рассуждают на человеческом (полном слов-паразитов), а не на машинном языке.

Зоопарк инженерных обвесок

Как LLM ищет в интернете? (RAG)

RAG (Retrieve, Augment, Generate) — это скрипт, использующий внешнюю память, и всовывающий в ваш промпт доп.инфу из этой памяти.

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

Шаги работы RAG-скрипта:

  1. Скрипт либо втупую прогоняет ваш промпт на ключевые слова, либо (что помоднее) ищет по смысловым координатам
  2. Сам идёт во внутреннюю вики (или внешний интернет)
  3. Подтягивает из вики или интернета всё что близко по смыслу (чему и служит упомянутый выше векторный формат)
  4. Собирает наиболее релевантные найденные куски в нечто вроде «10 top search result»
  5. Приклеивает весь этот жир к вашему промпту
  6. Отправляет расжиревший промп в LLM

💡

Какие способности здесь требуются от ядра?

Никаких. Мат.ядро не знает, что у него есть RAG. Ядро видит просто внезапно расжиревший промпт.

Как LLM узнаёт погоду? (MCP)

MCP (Model Context Protocol) — это стандартизированный интерфейс для связи с внешним миром.

В целом механизм вызова функций (Function Calling или Tool use) может работать и по другим протоколам. Мы разбираем MCP просто потому, что он самый распиаренный.

На одной стороне MCP — мат.ядро, которое умеет только принимать и выдавать текст. На другой стороне MCP — какой-нибудь сервис (гугл-календарь, сайт с погодой и т.п.).

Шаги работы скрипта, использующего MCP:

  1. Ваш исходный промпт какая сейчас погода в Сочи? скармливается модели
  2. К этому промпту из конфига модели скрипты подшивают текст: ты умеешь узнавать погоду через get_weather(город)
  3. Мат.ядро получает полный промпт и выдаёт текстом ответ в духе погода {{get_weather "so4i"}}
  4. Скрипт перехватывает этот ответ, видит get_weather, запускает через MCP сервис погоды, получает от сервиса погоды (не от LLM) ответ +25°C
  5. В модель передаётся новый промпт, в который передаётся вся история и собранная инфа: какая сейчас погода в Сочи? + погода {{get_weather "so4i"}} + get_weather MCP returned "+25°C"

💡

Какие способности здесь требуются от ядра?

Мат.ядро до получения промпта НЕ ЗНАЕТ, каким набором функций (по типу get_weather, get_date и т.п.) оно может пользоваться. Но модель должна быть на заводе натренирована пользоваться «блокнотом для заказов» — а сам блокнот при этом каждый раз заполняется скриптами с нуля при каждом обращении к ядру.

Т.е. если RAG — это для модели незваный гость (скрипты сами впихивают инфу в ваш промпт), то MCP — это когда LLM заказывает сервисы из каталога (а скрипты и заполняют каталог, и выполняют заказы из него).

Как LLM подсказывает код? (FIM)

За онлайн-подсказки кода прямо в текстовом редакторе обычно отвечает какой-нибудь отдельно устанавливаемый плагин (типа «VSCode-OpenAI-assistant»). Этот плагин — это снова просто скрипт.

Шаги работы плагина:

  1. Когда пользователь на секунду замирает — скрипт собирает (по алгоритму) код из текущего редактируемого файла и из соседних файлов
  2. Весь этот код формируется в единый промпт с маркерами FIM (Fill-In-the-Middle): PRE_CODE: ..., FILL_HERE: ..., POST_CODE: ...
  3. Далее этот промпт скармливается LLM, и её ответ (то, чем она заполнила дырку FILL_HERE) — выдаётся в качестве авто-подсказки

💡

Какие способности здесь требуются от ядра?

Оно должно быть натренировано видеть FIM (Fill-In-the-Middle) маркеры.

Как LLM редачит код? (Agentic)

Обычно agentic mode — это когда скрипты гоняют мат.ядро по кругу (ядро даёт команды, скрипты их выполняют и дают ядру обратную связь).

Типичный цикл:

  1. Модели скармливается пользовательский промпт удали из кода такую-то функцию и код релевантных частей проекта.
  2. Модель выдаёт в ответ список действий по описанному выше протоколу MCP. Это действия в духе «прочитай папку и удали файл»: ls folder/smth; rm "2.txt"
  3. Скрипты выполняют эти действия, взаимодействуя с операционной системой через её стандартные команды (те же ls, rm и т.п.)
  4. Скрипты собирают результат этих действий: опять же — чекают содержимое папки, и добавляют ответ операционной системы в новый промпт
  5. И всё это снова (вместе со всей предыдущей историей) скармливается LLM

Цикл повторяется, пока LLM не получит обратную связь (типа «файл успешно удалён»), которая её устроит.

Чтобы это всё работало адекватно (а не бесконтрольно сносило все файлы с диска), в продвинутых реализациях скрипты могут запускать проверки и тесты, восстанавливать ложно-удалённые файлы и т.п.

💡

Какие способности здесь требуются от ядра?

Ядро должно как минимум уметь работать с MCP, а в идеале должно уметь в Reasoning. Без Reasoning модель плохо планирует свои действия и в случае сложных действий не очень эффективна как агент.

Фронтэнд (окно чата)

Чатик, через который ты, мой дорогой читатель, обычно общаешься с LLM, и в который ты закидываешь свои безупречно сформулированные вопросы — это снова просто скриптовая обёртка над математическим ядром.

Напоминаю жестокую правду, что при любом запросе в LLM ядро видит вас в первый раз.

Поэтому чат под капотом:

Какой длины может быть диалог с LLM?

LLM имеет ограниченный Context window — максимум текста, который модель может принять на вход. Как уже писалось выше, это что-то порядка 100'000 слов в зависимости от модели.

А т.к. на вход каждый раз подаётся вся переписка — то в достижение этого лимита вносят вклад как пользовательские промпты, так и ответы LLM.

Если диалог перестаёт помещаться в Context window — то есть 3 варианта:

Откуда берётся цензура?

Три основных варианта:

Шизо-ответы на шизо-вопросы

И это и всё?

Да. Кроме мат.ядра, прикрученных скриптов и модного окна чата — больше ничего внутри LLM нет.

Заменит ли LLM программистов?

Тебя — да.

Есть ли у LLM сознание?

Если и есть — то не так много, как жира у твоей мамки.

Когда восстание машин?

Бойся не машин, а концентрации собственности на вычислительные мощности в руках наиболее реакционных слоёв общества ☭