Контекст-инжиниринг (Context engineering): что это и как работает
Контекст-инжиниринг (context engineering) — это проектирование всего, что модель видит перед генерацией ответа: системного промпта, истории диалога, фрагментов документов, результатов инструментов и памяти между сессиями. Цель — собрать минимальный набор токенов, который даёт верный ответ без лишних затрат.
Anthropic в статье «Effective context engineering for AI agents» (29 сентября 2025) описывает сдвиг так: работа с языковыми моделями всё меньше сводится к подбору слов в запросе и всё больше — к вопросу, какая конфигурация контекста даст нужное поведение (Anthropic Engineering).
Что такое контекст-инжиниринг
Контекст — это все токены, которые модель получает при генерации. В него входят:
- системные инструкции и роль;
- история диалога и результаты предыдущих шагов агента;
- описания инструментов и их вывод (логи, содержимое файлов, ответы API);
- фрагменты из RAG и приложенные документы;
- данные из MCP-серверов;
- память между сессиями: файлы заметок, правила проекта.
Контекст-инжиниринг решает, что из этого потока попадёт в ограниченное окно, в каком порядке и в каком виде. Anthropic формулирует цель как поиск наименьшего набора высокосигнальных токенов, повышающего вероятность нужного результата.
Объём сам по себе не помогает: из-за эффекта context rot чем больше токенов в окне, тем хуже модель извлекает из него нужное. У модели есть «бюджет внимания», который тратится с каждым токеном. Поэтому «добавить ещё документов» нередко ухудшает ответ.
Не путайте термин с управлением контекстом нейросети. Там речь о приёмах внутри диалога (усечение, суммаризация). Контекст-инжиниринг шире: он проектирует всю систему агента — какие файлы тот читает, какие инструменты получает, что помнит между запусками, где проходят границы кэша.
Чем отличается от промпт-инжиниринга
| Критерий | Промпт-инжиниринг | Контекст-инжиниринг |
|---|---|---|
| Объект работы | Текст запроса и системная инструкция | Всё содержимое окна: промпт, история, файлы, вывод инструментов, RAG, память |
| Характер | Разовая задача | Итеративный процесс: контекст пересобирается на каждом шаге |
| Кто занимается | Автор промпта, пользователь | Инженер, который строит агента и его окружение |
| Где проявляется | Качество одного ответа | Устойчивость длинных задач, стоимость и скорость агента |
Пример: агент выдаёт бессмысленный код. Переформулировка промпта не помогает, потому что в окне накопились десятки тысяч токенов старых логов и файлов, а нужный файл затерялся в середине. Лечится это компактированием истории и выборочной подгрузкой файлов, а не новым промптом.
Приёмы
- Компактирование и суммаризация истории. Когда контекст близок к лимиту, историю сжимают: сохраняют решения, нерешённые проблемы и детали реализации, шумный вывод инструментов отбрасывают.
- Изоляция в субагентах. Каждый субагент работает в своём чистом окне и возвращает главному агенту выжимку — по оценке Anthropic, обычно 1 000–2 000 токенов. В Claude Code у субагента свой системный промпт, набор инструментов и права (документация).
- Кэширование промптов. Стабильный префикс (инструменты, системный промпт, база знаний) считается один раз, поэтому стабильное кладут в начало, переменное — в конец. Любое изменение блока до точки кэширования сбрасывает кэш. Минимальный кэшируемый префикс у моделей Claude 5.5 — 512 токенов, срок жизни по умолчанию — 5 минут (документация Anthropic). Подробнее — в статье «Кэширование промптов».
- Выборочная подгрузка вместо «прочитай весь репозиторий». Агент хранит лёгкие идентификаторы (пути, запросы) и подгружает данные в момент нужды — just-in-time retrieval. Claude Code так и работает: CLAUDE.md загружается сразу, файлы находятся через glob и grep.
-
Структурирование блоками. Anthropic рекомендует делить промпт на секции (
<background_information>,<instructions>и т. д.) и разделять их XML-тегами или markdown-заголовками: один блок — одна роль. - Память между сессиями. Каждая сессия начинается с пустого окна, поэтому знания переносят файлами: в Claude Code это CLAUDE.md (пишете вы) и auto memory (пишет агент); оба хранятся как markdown (документация). Файл инструкций длиннее 200 строк расходует контекст и хуже соблюдается.
Как это влияет на деньги
Контекст — это токены, а токены — это счёт. В агентном цикле входной контекст отправляется заново на каждом шаге, поэтому лишние 30 тысяч токенов истории оплачиваются столько раз, сколько шагов делает агент.
Выдержка из каталога RouterAI на момент написания (₽ за 1 млн токенов, актуальные цены смотрите в каталоге):
| Модель | Вход | Выход | Кэш: чтение |
|---|---|---|---|
anthropic/claude-sonnet-5.5 |
215 ₽ | 1077 ₽ | 10,77 ₽ |
anthropic/claude-haiku-5.5 (запрос до 100K) |
10,77 ₽ | 53,85 ₽ | 1,08 ₽ |
openai/gpt-5.5 |
538,53 ₽ | 3231,17 ₽ | 53,85 ₽ |
deepseek/deepseek-v4-flash |
4,95 ₽ | 16,85 ₽ | 1,29 ₽ |
Пример: агент делает 100 шагов в день, на каждом отправляя 200 тысяч входных токенов, то есть 20 млн в сутки. На anthropic/claude-sonnet-5.5 это около 4 300 ₽ по обычной цене входа и около 215 ₽, если префикс читается из кэша. Выходные токены и запись в кэш в расчёт не входят. Разница получилась только от устройства контекста.
У кэша есть цена: у Anthropic запись на 5 минут стоит 1,25× от цены входа, чтение — 0,1×. Кэш выгоден, когда префикс переиспользуется много раз, и бесполезен, если системный промпт меняется в каждом запросе.
Инструменты и практика
-
Claude Code —
CLAUDE.md(илиAGENTS.md), правила в.claude/rules/, auto memory, команда/compact, субагенты. Подключение: Claude Code через RouterAI. -
Cline — правила проекта в
.clinerules/или.cline/rules/, отдельно глобальные; читает также.cursorrules,.windsurfrulesиAGENTS.md, правила можно включать по одному (документация). Подключение: Cline через RouterAI. -
OpenHands — Context Condenser суммаризирует старую часть истории, когда она превышает порог, например
CondenserSettings(enabled=True, max_size=50)(документация).
Итог
Контекст-инжиниринг вырос из промпт-инжиниринга, когда модели начали работать длинными циклами: качество ответа определяется не только инструкцией, но и всем, что к ней приложено. На каждом шаге стоит спросить себя: что модель должна увидеть, что можно убрать и что стоит закэшировать. Ответы улучшают результат и уменьшают счёт.