База от вайбкодера

Сейчас почти любой разработчик умеет открыть ChatGPT, Cursor или Claude и попросить написать код. Но если MCP, RAG, Agent, Rules и Skills для тебя просто набор слов из AI-твиттера, значит, инструментом ты пользуешься, а как он устроен — не понимаешь.

Для разработчика это слабая позиция.

———

LLM

GPT, Claude, Gemini, DeepSeek — это LLM.

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

Получила SELECT * FROM users WHERE — и пытается понять, что вероятнее всего пойдёт дальше. Потом следующий токен. Потом ещё один. Так и строится ответ.

Отсюда главное: LLM — не компилятор и не база данных с готовыми ответами. Она каждый раз генерирует продолжение.

Поэтому один и тот же запрос может дать разные результаты. Фраза «вчера она этот код написала правильно» примерно такая же полезная, как «вчера race condition не случился».

———

Токены и контекст

LLM работает не со словами, а с токенами — кусками текста.

В контекст помещается всё, что модель должна учитывать: запрос, история, код, документация, результаты инструментов.

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

И качество ответа часто упирается не в «слабую модель», а в плохой контекст.

———

Prompt

Промпт — это вход модели. Для разработчика проще воспринимать его как контракт.

Написал: Сделай авторизацию получил что-нибудь уровня:

func DoStuff(any interface{}) interface{}

Формально задача выполнена. Пользы мало.

Чем точнее задача, ограничения и ожидаемый результат, тем меньше пространства для фантазии.

Zero-shot, one-shot, few-shot — способы дать модели больше контекста.

———

Function Calling / Tool Use

Сама LLM не умеет сходить в PostgreSQL, запустить go test или открыть файл. Она генерирует текст.

Чтобы модель могла действовать во внешнем мире, ей дают инструменты.

Модель формирует вызов функции, обычный код выполняет его и возвращает результат обратно.

Если совсем приземлённо — это RPC, инициатором которого стала LLM.

———

AI Agent

Теперь добавим цикл:

понять задачу → поменять код → запустить тесты → увидеть ошибку → исправить → повторить

Получится агент.

То есть за словом «AI Agent» обычно нет отдельной магии. Там LLM, контекст, инструменты и управляющий цикл.

Раньше мы писали управляющую логику сами. Теперь часть решений принимает вероятностная модель.

И это уже совсем другой набор граблей.

———

MCP

Когда инструментов много, появляется знакомая проблема: у GitHub свой API, у базы свой, у файловой системы свой интерфейс.

MCP стандартизирует подключение таких инструментов к LLM-приложениям.

Аналогия с USB простая: один стандарт вместо пачки интеграций.

———

Rules и Skills

Rules — постоянные правила проекта: как писать код, что не трогать, какие тесты запускать.

По смыслу это .editorconfig для поведения модели.

Skills — инструкции под конкретные задачи: code review, деплой, миграции PostgreSQL.

Rules — конфиг. Skills — плагины.

———

RAG

Допустим, у тебя огромная кодовая база. Можно попытаться передать её модели целиком.

Но это примерно как лечить медленный запрос через SELECT *, а потом докинуть RAM.

RAG работает иначе:

поиск → контекст → генерация

Система находит релевантные данные, добавляет их в контекст, и только потом LLM строит ответ.

Вместо всей монорепы модель получает несколько файлов по задаче.

———

Если собрать всё вместе:

LLM генерирует текст. Контекст определяет, что она видит. Промпт задаёт задачу. Tools дают доступ к внешнему миру. MCP стандартизирует инструменты. Rules и Skills управляют поведением. RAG подтягивает данные. Agent связывает всё это в цикл.

После этого большая часть «AI-магии» исчезает.

Остаётся обычная программная система. Просто один из её компонентов принимает вероятностные решения.

И если ты этого не понимаешь, то вайбкодишь не ты.

Вайбкодят тебя.