Канал

2 марта 2026 г.

Модель, агент и обвязка. Часть 1

Модель, агент и обвязка. Часть 1

LLM, как баба Ванга на минималках — умеет лишь предсказывать следующий токен. Вы ей: «в лесу родилась», а она вам — «ёлочка». Больше модели не умеют ничего. Совсем ничего. Даже позировать.

Как же тогда нейронки создают приложения и решают еще кучу задач? В этом посте разберемся с базовой теорией, а во второй части — соберем собственного агента, чтобы окончательно разобраться.

Как и следует ожидать от старой гадалки, LLM более-менее помнит, что было у нее в молодости на этапе тренировки (хотя может и присочинить на ходу), но забывает то, что вы ей только что сказали. Важно понимать, что никакого дообучения, пока вы с ней общаетесь, не происходит.

Карго-культ
За недолгую историю существования LLM пользователи эмпирически подобрали лайфхаки, которые тиражируются в виде статей, репозиториев и роликов на Ютубе, но многие из которых уже окончательно устарели и на актуальных замерах показывают падение качества.

Сюда относятся угрозы, попытки вызвать жалость или подкупить модель, генерация банков памяти, массовое подключение MCP-серверов, подробные инструкции в AGENTS.md, использование скиллов без разбора и прочие магические действия.

Чтобы получить интуицию, какие советы лучше внимательно тестировать перед внедрением, стоит представлять, с чем мы имеем дело.

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

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

К тому же в контекстное окно попадает не только ваш последний промпт, но еще куча всего:
* системный промпт самой модели
* базовый промпт вашего агента
* ваши дополнения из AGENTS.md и аналогов
* скиллы
* подключенные MCP-серверы
* результаты вызовов инструментов (например, содержимое файлов, которые агент решил прочитать)
* и, наконец, вся ваша переписка из текущей сессии

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

Инструменты
Как же происходит чтение файлов и вызов MCP-серверов, если модель только лишь генерит токены?

За это отвечает обвязка — старый добрый детерминированный код: модель генерит специальный токен «позови-ка-такой-то-тул-с-такими-то-параметрами» и ставит генерацию на паузу. Обвязка видит этот токен, вызывает нужный инструмент и подклеивает в промпт результат этого вызова.

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

Или, как это точно сформулировал @electroVafinBot:

Агент — это не тот, кто умный. Агент — это тот, кто достаточно упертый, чтобы не бросать начатое после первого «Syntax Error».

А дальше работают все те же практики, что и для человеческих команд разработки: уточнение требований, декомпозиция, поиск и исследование доступных библиотек, линтеры и автотесты в CI и т.д.

Claude Code, Antigravity и OpenClaw построены ровно по этому принципу.

Расскажите в комментариях, какие из распространенных рекомендаций для работы с LLM по вашим наблюдениям на самом деле не работают. А мы соберем своего собственного агента в следующей части.

@devspotting