# Контекст-инжиниринг (Context engineering): что это и как работает

> **Контекст-инжиниринг (context engineering)** — это проектирование всего, что модель видит перед генерацией ответа: системного промпта, истории диалога, фрагментов документов, результатов инструментов и памяти между сессиями. Цель — собрать минимальный набор токенов, который даёт верный ответ без лишних затрат.

Anthropic в статье «Effective context engineering for AI agents» (29 сентября 2025) описывает сдвиг так: работа с языковыми моделями всё меньше сводится к подбору слов в запросе и всё больше — к вопросу, какая конфигурация контекста даст нужное поведение ([Anthropic Engineering](https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents)).

## Что такое контекст-инжиниринг

Контекст — это все токены, которые модель получает при генерации. В него входят:

- системные инструкции и роль;
- история диалога и результаты предыдущих шагов агента;
- описания инструментов и их вывод (логи, содержимое файлов, ответы API);
- фрагменты из RAG и приложенные документы;
- данные из MCP-серверов;
- память между сессиями: файлы заметок, правила проекта.

Контекст-инжиниринг решает, что из этого потока попадёт в ограниченное окно, в каком порядке и в каком виде. Anthropic формулирует цель как поиск **наименьшего набора высокосигнальных токенов**, повышающего вероятность нужного результата.

Объём сам по себе не помогает: из-за эффекта **context rot** чем больше токенов в окне, тем хуже модель извлекает из него нужное. У модели есть «бюджет внимания», который тратится с каждым токеном. Поэтому «добавить ещё документов» нередко ухудшает ответ.

Не путайте термин с [управлением контекстом нейросети](/pages/upravlenie-kontekstom-neyroseti-context-management). Там речь о приёмах внутри диалога (усечение, суммаризация). Контекст-инжиниринг шире: он проектирует всю систему агента — какие файлы тот читает, какие инструменты получает, что помнит между запусками, где проходят границы кэша.

## Чем отличается от промпт-инжиниринга

| Критерий | Промпт-инжиниринг | Контекст-инжиниринг |
|---|---|---|
| Объект работы | Текст запроса и системная инструкция | Всё содержимое окна: промпт, история, файлы, вывод инструментов, RAG, память |
| Характер | Разовая задача | Итеративный процесс: контекст пересобирается на каждом шаге |
| Кто занимается | Автор промпта, пользователь | Инженер, который строит агента и его окружение |
| Где проявляется | Качество одного ответа | Устойчивость длинных задач, стоимость и скорость агента |

Пример: агент выдаёт бессмысленный код. Переформулировка промпта не помогает, потому что в окне накопились десятки тысяч токенов старых логов и файлов, а нужный файл затерялся в середине. Лечится это компактированием истории и выборочной подгрузкой файлов, а не новым промптом.

## Приёмы

- **Компактирование и суммаризация истории.** Когда контекст близок к лимиту, историю сжимают: сохраняют решения, нерешённые проблемы и детали реализации, шумный вывод инструментов отбрасывают.
- **Изоляция в субагентах.** Каждый субагент работает в своём чистом окне и возвращает главному агенту выжимку — по оценке Anthropic, обычно 1 000–2 000 токенов. В Claude Code у субагента свой системный промпт, набор инструментов и права ([документация](https://code.claude.com/docs/en/sub-agents)).
- **Кэширование промптов.** Стабильный префикс (инструменты, системный промпт, база знаний) считается один раз, поэтому стабильное кладут в начало, переменное — в конец. Любое изменение блока до точки кэширования сбрасывает кэш. Минимальный кэшируемый префикс у моделей Claude 5.5 — 512 токенов, срок жизни по умолчанию — 5 минут ([документация Anthropic](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)). Подробнее — в статье [«Кэширование промптов»](/pages/keshirovanie-promptov).
- **Выборочная подгрузка вместо «прочитай весь репозиторий».** Агент хранит лёгкие идентификаторы (пути, запросы) и подгружает данные в момент нужды — just-in-time retrieval. Claude Code так и работает: CLAUDE.md загружается сразу, файлы находятся через glob и grep.
- **Структурирование блоками.** Anthropic рекомендует делить промпт на секции (`<background_information>`, `<instructions>` и т. д.) и разделять их XML-тегами или markdown-заголовками: один блок — одна роль.
- **Память между сессиями.** Каждая сессия начинается с пустого окна, поэтому знания переносят файлами: в Claude Code это CLAUDE.md (пишете вы) и auto memory (пишет агент); оба хранятся как markdown ([документация](https://code.claude.com/docs/en/memory)). Файл инструкций длиннее 200 строк расходует контекст и хуже соблюдается.

## Как это влияет на деньги

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

Выдержка из [каталога RouterAI](https://routerai.ru/models) на момент написания (₽ за 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](/pages/vibe-coding-claude-code).
- **Cline** — правила проекта в `.clinerules/` или `.cline/rules/`, отдельно глобальные; читает также `.cursorrules`, `.windsurfrules` и `AGENTS.md`, правила можно включать по одному ([документация](https://docs.cline.bot/customization/cline-rules)). Подключение: [Cline через RouterAI](/pages/vibe-coding-vscode-cline).
- **OpenHands** — Context Condenser суммаризирует старую часть истории, когда она превышает порог, например `CondenserSettings(enabled=True, max_size=50)` ([документация](https://docs.openhands.dev/sdk/guides/context-condenser)).

## Итог

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

## Что почитать

- [Контекстное окно нейросети](/pages/kontekstnoe-okno-nejroseti)
- [Ограничения контекста нейросети](/pages/ogranicheniya-konteksta-neyroseti)
- [Захват контекста (Context retrieval)](/pages/zahvat-konteksta-context-retrieval)
- [Чанкинг текста для RAG](/pages/text-chunking-dlya-rag)
- [Каталог моделей RouterAI](https://routerai.ru/models)
