Context Engineering в AI Coding

Andrej Karpathy снова сделал то, что у него получается лучше всего: сформулировал идею (на самом деле он поддержал идею Tobi Lutke), которая витала в воздухе, но которой не хватало точного названия: Context Engineering.

Люди обычно связывают промпт с коротким описанием задачи, которую дают AI. В то время как в приложениях с LLM под капотом, происходит "Context Engineering".

Context Engineering заключается в правильном использовании контекста в запросах к LLM.
Тут всё просто. Делайте хорошо (давайте правильный контекст), плохо не делайте (не давайте лишней информации); Garbage In, Garbage Out.

Я хочу рассказать, как правильно работать с контекстом в AI Coding.

Для начала, что такое контекст?

Контекст, это вся та информация, которую мы передаём в запросе к LLM:
- system prompt — здесь обычно инструкции от разработчиков AI Coding tool и иногда сюда передаются правила которые указываются пользователем
- user prompt — запрос пользователя + файлы с кодом
- conversation — история переписки в текущем чате
- tools — function calling инструменты, которые модель может вызвать в процессе
- structured output — json схема ответа модели

Что отличает хороший AI Coding tool от плохого? Правильно, грамотное использование контекста. Для этого придумали memory bank, task manager, scratchpads, function calling, RAG в конце-концов. Все эти инструменты созданы для того, чтобы не грузить в модель всю-всю информацию, а дать ей возможность грамотно собирать только необходимую информацию.

Вот основные проблемы связанные с контекстом:

◾️ Отравление контекста — если запрос пользователя был недостаточно понятным, то модель может допустить ошибку и пойти не по правильному пути, сохранит это знание в conversation, что в итоге приведёт к тому, что проблема не будет решена.
Решение: внимательно читайте ответ модели. Именно поэтому, если с первого раза модель меня не поняла, то я возвращаюсь назад, меняю промпт и отправляю запрос заново.

◾️ Переполненность контекста — это случаи, когда контекст становится очень огромным: например, в одном чате мы хотим решить сразу несколько разных задач. Это приводит к расфокусу модели на контексте и ведёт к потере качества генерируемого кода.
Решение: есть очень хорошее правило: один чат = одна задача. Оно хорошо действует для моделей со стандартным (128K) размером контекстного окна: Claude 4 Sonnet, но вот при использовании Gemini 2.5 pro, где контекстное окно 1M, имеет смысл давать сразу несколько связанных между собой задач

◾️ Лишняя информация — если в контексте есть лишние файлы (код, правила, документация), которые нерелевантны к решаемой задаче, то это может сбить с толку модель.
Решение: грамотно выбирайте релевантные файлы с кодом и документацию заранее

◾️ Противоречия — если правила противоречат друг-другу, это так же собьет модель с толку.
Решение: писать правильные rules это тоже нетривиальная задача. Постоянно их обновлять — это правильно. /init команду (когда на основе имеющегося проекта генерятся rules) имеет смысл использовать в самом начале, чтобы была хотя бы какая-то структура rules, а потом всё равно их нужно обновлять.

А вот ещё несколько решений проблем с контекстом:

◾️ Правильный выбор tools. Не нужно добавлять все MCP сервера подряд — выбирайте только те, которые действительно полезны в работе

◾️ Грамотное использование summary. Многие AI Coding инструменты вынуждены использовать краткую выжимку части истории сообщений для того чтобы экономить токены. Важно понимать, что это может приводить к потере основной сути задачи, так что если есть возможность, всегда старайтесь открывать новый чат.

◾️ Context Offloading. Можно использовать черновик: просим модель записывать некоторую информацию в файлик, а потом просим модель использовать этот файлик. Так, например Anthropic в своих Best Practices рекомендуют использовать черновик (scratchpad) при решении большого количества linting задач: запускаем линтер, сгружаем результат в такой черновик, а потом просим решать эти проблемы по-очереди. Это позволит не хранить в контексте лишнюю информацию
Открыть в Telegram
 
 
Back to Top