18 марта 2026
Prompt engineering учит правильно формулировать запрос. Context engineering решает другую задачу: какая информация должна попасть в контекстное окно модели, в каком объёме и в какой момент. Разница между «хорошо написанным промптом» и «системой, которая стабильно решает задачи» - именно в инженерии контекста. За три года между запуском GPT-3.5 и появлением агентных IDE отрасль прошла путь от «давайте всё запихнём в промпт» через «давайте достанем релевантное из векторной базы» к «давайте спроектируем, как контекст рождается, живёт и умирает на протяжении многошаговой задачи». Эта статья разбирает, как и почему дисциплина появилась, какие у контекста режимы отказа, как выбирать между just-in-time и предзагрузкой, какие техники работают на длинных задачах и чем измерять качество контекста в продакшне.
Context engineering как дисциплина: откуда взялась
Context engineering - дисциплина проектирования архитектуры, которая подаёт LLM нужную информацию в нужный момент. Anthropic формулирует ключевой вопрос так: «какая конфигурация контекста с наибольшей вероятностью приведёт к желаемому поведению модели?» Контекст включает всё, что модель «видит» при генерации ответа: системный промпт, инструкции, описания инструментов, внешние данные, историю сообщений и результаты вызовов инструментов. Каждый из этих элементов занимает токены в конечном контекстном окне.
Дисциплина не появилась из теоретических соображений. Она выросла из накопившегося опыта неудач RAG-систем 2023-2024 годов и признания, что модели большего размера сами по себе не создают лучших AI-систем. Надёжность зависит от того, как информация проходит через систему, а не от размера модели или изобретательности промпта.
Прародитель - оригинальная RAG-статья. В 2020 году Patrick Lewis с коллегами из Facebook AI Research опубликовали «Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks» (NeurIPS 2020). Идея простая и оказавшаяся очень продуктивной: вместо того чтобы хранить все знания в параметрах модели, держать их во внешнем индексе и подтягивать релевантные фрагменты в контекст в момент генерации. Эта статья дала отрасли архитектурный шаблон retrieve-then-generate, на котором следующие три года выросло целое поколение продуктов - от чат-ботов с базой знаний до Q&A над приватными документами. Но шаблон оказался обманчиво простым: первая волна RAG-внедрений показала, что качественное извлечение - отдельная инженерная задача, а не «возьмите любой векторный поиск».
Karpathy и фрейм контекстного окна. В мае 2023 года Andrej Karpathy на Microsoft Build выступил с лекцией «State of GPT», где впервые широко популяризовал метафору контекстного окна как «рабочей памяти» модели и предупредил аудиторию: всё, что попало в это окно, влияет на вывод, и потому отбор содержимого окна - такая же инженерная задача, как обучение модели. Эта лекция важна не как источник новых идей, а как момент, когда сообщество разработчиков получило общий словарь: «context window», «in-context learning», «few-shot». Karpathy позже сформулировал известный тезис, что software 3.0 - это «программирование контекстом», и эта рамка плотно прижилась.
Lance Martin и серия «Context Engineering» в LangChain. С 2024 года Lance Martin (LangChain) в серии постов на блоге компании последовательно вводил термин «context engineering» как обобщение того, что раньше называлось «retrieval», «prompt design», «memory management» по отдельности. Его аргумент: эти три практики решают одну и ту же задачу - управление содержимым контекстного окна - и должны проектироваться вместе. Серия зафиксировала переход от «у нас есть RAG-пайплайн» к «у нас есть контекстная архитектура».
Drew Breunig и формулировка «context rot». Параллельно Drew Breunig в эссе «How Long Contexts Fail» дал имя явлению, которое многие наблюдали, но не умели обсуждать: по мере роста длины контекста модель начинает деградировать в специфических измерениях, и просто «увеличение окна» не решает проблему. Термин «context rot» закрепился в индустрии как короткое обозначение целого семейства failure modes (см. ниже).
Anthropic и оформление дисциплины. К осени 2025 года Anthropic в посте «Effective context engineering for AI agents» формализовал название дисциплины и собрал в одном месте практики, которые уже использовались в Claude Code: just-in-time retrieval, compaction, sub-agent архитектура, structured note-taking. Этот пост стал общеупотребительной точкой отсчёта - не потому, что Anthropic «изобрёл» context engineering, а потому, что они первыми системно описали его как отдельную инженерную практику с конкретными приёмами и trade-offs.
Полезный исторический урок: дисциплина возникла из failures, а не из success. RAG в 2023 году обещал «дайте нам ваши документы и получите Q&A», и это обещание массово не сбылось - точнее, сбылось на демо и сломалось в продакшене. Из разбирательств с тем, почему сломалось, выросли отдельные практики - chunking-стратегии, hybrid search, reranking, query rewriting, evaluation harness - которые сначала жили под зонтиком «advanced RAG», а потом перегруппировались в более широкое понятие, включающее не только retrieval, но и память, инструменты, управление длинными задачами. Это типовой паттерн: новая дисциплина рождается, когда практики из соседних областей перестают укладываться в исходные ярлыки.
Context engineering vs prompt engineering
Prompt engineering фокусируется на формулировке инструкций: как задать вопрос, чтобы получить нужный ответ. Context engineering строит инфраструктуру, которая соединяет модель с внешними данными.
Аналогия: prompt engineering - это как вы задаёте вопрос, а context engineering - это обеспечить модель нужным учебником, калькулятором и заметками до того, как она начнёт отвечать. Riley Goodside, один из ранних публичных prompt-инженеров, в 2022-2023 годах детально документировал технику «всё умещается в один длинный промпт» - и его же опыт в дальнейших проектах показал, где эта техника ломается: на длинных задачах, где состояние не помещается в контекст, и на динамичных данных, где «длинный промпт» устаревает быстрее, чем его успевают написать.
| Prompt Engineering | Context Engineering | |
|---|---|---|
| Фокус | Формулировка запроса | Архитектура информационного потока |
| Масштаб | Один запрос | Система из нескольких inference-вызовов |
| Управляет | Тоном, форматом, стилем ответа | Какие данные попадают в окно и когда |
| Результат | Лучший ответ на конкретный вопрос | Стабильная система, решающая класс задач |
| Эволюция | Ручная итерация промптов | Архитектурные решения по памяти, retrieval, инструментам |
Prompt engineering не исчезает - он становится одним из компонентов context engineering. Хорошо сформулированный промпт внутри плохо спроектированного контекста не спасёт систему.
Контекстное окно как дефицитный ресурс
Контекстное окно - рабочее пространство модели, измеряемое в токенах. Всё, что модель обрабатывает за один вызов, должно уместиться в это окно: системный промпт, история диалога, результаты вызовов инструментов, извлечённые документы.
Исследования показывают эффект context rot: по мере роста числа токенов модель теряет точность извлечения информации. Архитектура трансформера требует n² попарных связей для n токенов, что делает длинные последовательности прогрессивно сложнее для обработки. Модели остаются «способными» на длинных контекстах, но точность снижается.
Из этого следует принцип: контекстное окно - это бюджет внимания, а не бесконечная свалка. Стратегическое распределение токенов на высокосигнальную информацию важнее, чем попытки «впихнуть всё».
Практическое следствие, которое стоит вынести отдельно: рост окна модели с 8K до 200K и далее до 1M+ токенов не отменяет дисциплину, а смещает её акценты. Раньше задача звучала «как уместить нужное в маленькое окно». Сейчас она звучит «как не утопить нужное в большом окне» - модель с 1M контекстом, в которую запихнули весь репозиторий, по поведению часто хуже, чем модель с 200K, в которую загрузили только релевантные файлы.
Режимы отказа контекста и как их диагностировать
Эти проблемы не решаются улучшением промптов или увеличением окна. Они требуют архитектурного подхода и - не менее важно - диагностических процедур, которые показывают, какой именно режим отказа произошёл в конкретном инциденте.
| Режим | Описание | Пример |
|---|---|---|
| Context Poisoning | Ошибки накапливаются: агент переиспользует загрязнённую информацию | Агент получил неверный результат API и строит дальнейшие решения на нём |
| Context Distraction | Избыточная история заставляет модель опираться на устаревшие паттерны | Агент повторяет подход, который уже не работает, потому что он есть в ранней истории |
| Context Confusion | Нерелевантные инструменты или документы вводят модель в заблуждение | 20 доступных инструментов, из которых 18 не нужны для текущей задачи |
| Context Clash | Противоречивая информация создаёт конфликтующие предположения | Системный промпт говорит одно, а извлечённый документ - противоположное |
| Lost in the Middle | Модель пропускает информацию, расположенную в середине длинного контекста | Релевантный документ в середине списка из 20 - модель отвечает, как будто его нет |
Lost in the Middle - самый цитируемый результат экспериментов с длинным контекстом. Liu et al. (Stanford, «Lost in the Middle: How Language Models Use Long Contexts», 2023) показали систематическую U-образную кривую: модели хорошо извлекают информацию из начала и конца длинного контекста и значительно хуже из середины. Эффект воспроизводился на разных моделях и разных задачах. Практическое следствие для дизайна: критическую информацию (текущую задачу, недавно обновлённое состояние) держите в начале или конце окна, а не в середине большого блока ретривнутых документов.
Context distraction исследовали Shi et al. в работе «Large Language Models Can Be Easily Distracted by Irrelevant Context» (2023): достаточно вставить в промпт нерелевантный, но грамматически связный фрагмент, чтобы заметно деградировала точность на математических и логических задачах. Это объясняет, почему «больше контекста для надёжности» часто работает в обратную сторону: лишние факты не нейтральны, они активно конкурируют за внимание модели.
Диагностика на практике. Когда агент ведёт себя странно, первый вопрос - какой именно failure mode сработал. Полезный мини-чеклист:
- Context poisoning - проверить, нет ли в истории ошибочного результата tool call, на который агент ссылается. Признак: агент повторяет неверный факт через несколько шагов после того, как он впервые появился.
- Context distraction - посмотреть, не накопилось ли в истории старых попыток, которые модель пытается продолжить. Признак: агент возвращается к подходу, который явно отбросил пять шагов назад.
- Context confusion - проверить, сколько инструментов и документов сейчас в окне. Признак: модель выбирает «почти подходящий» инструмент вместо очевидного.
- Context clash - сравнить системный промпт с содержимым ретривнутых документов. Признак: модель колеблется между двумя несовместимыми ответами или явно их смешивает.
- Lost in the middle - подсчитать, где именно в окне находится критический фрагмент. Признак: модель «не видит» документ, который точно есть в её контексте.
Без такого чеклиста расследование инцидента сваливается в общее «модель глючит», и команда начинает менять промпт наугад вместо того, чтобы устранить конкретное архитектурное упущение.
Шесть компонентов context engineering
1. Агенты
AI-агенты используют LLM как движок рассуждений и оркестрируют решения между инструментами, памятью и базами знаний. Агент выступает одновременно потребителем и архитектором контекста: он решает, какая информация поднимается на поверхность на каждом шаге.
2. Аугментация запросов (Query Augmentation)
Пользовательский ввод в реальном мире - неполный и неоднозначный. Аугментация запросов переформулирует входные данные для разных downstream-систем: запрос в векторную базу данных требует одной формулировки, запрос к LLM - другой.
3. Извлечение (Retrieval)
Качественное извлечение - фундамент: «мусор на входе - мусор на выходе» действует напрямую. Критический trade-off - стратегия чанкинга:
- Мелкие чанки - точные эмбеддинги, но теряют окружающий контекст
- Крупные чанки - богатый контекст, но шумные эмбеддинги и больший расход токенов
4. Промптинг
Извлечённый контекст требует явных инструкций по его использованию. Техники: Chain-of-Thought (рассуждение по шагам), few-shot (примеры ожидаемого поведения), ReAct (цикл «рассуждение - действие - наблюдение»).
5. Память
Память агента состоит из трёх слоёв:
- Краткосрочная - текущее контекстное окно с последними взаимодействиями и извлечёнными документами
- Долгосрочная - внешнее хранилище (векторная БД) для фактов, предпочтений, истории
- Рабочая - временное пространство для данных многошаговой задачи, существует только до её завершения
Эффективная система памяти - селективная: сохраняет только высокосигнальную информацию и периодически удаляет устаревшие записи.
6. Инструменты
Инструменты связывают мышление с действием: запросы к БД, вызовы API, получение актуальных данных. Model Context Protocol (MCP) стандартизирует интеграцию инструментов через универсальный JSON-RPC протокол, заменяя кастомные интеграции.
Проектирование системных промптов
Anthropic рекомендует калибровать системный промпт на «правильной высоте» - между двумя крайностями:
- Избыточно сложные промпты с жёстко прописанной хрупкой логикой - ломаются при нестандартных запросах
- Размытые указания без конкретных сигналов - модель не понимает, что от неё ожидается
Практические рекомендации:
- Организовывать промпт в отдельные секции с помощью XML-тегов или Markdown-заголовков:
<background_information>,<instructions>,## Tool guidance - Начинать с минимального промпта на лучшей доступной модели
- Итеративно добавлять инструкции на основе наблюдаемых ошибок
- Использовать few-shot примеры вместо исчерпывающего перечисления edge-кейсов - «примеры стоят тысячи слов» для LLM
Дизайн инструментов
Хорошо спроектированные инструменты:
- Самодостаточные - устойчивы к ошибкам, содержат всю необходимую информацию
- Понятные - описание чётко указывает, когда и зачем использовать
- Минимально перекрывающиеся - если два инструмента делают почти одно и то же, модель будет колебаться
- Экономные по токенам - возвращают только нужные данные, не «всё что есть»
Just-in-time vs. предзагрузка: рамка решения
Самый распространённый архитектурный выбор в context engineering - между двумя стратегиями:
- Pre-loaded retrieval - заранее ретривим релевантные документы и подаём их в окно перед запуском модели. Классический RAG-пайплайн.
- Just-in-time retrieval - храним лёгкие идентификаторы (пути файлов, ссылки, запросы), которые агент динамически достаёт по ходу выполнения через инструменты.
Это не про «какая стратегия лучше», а про то, какие свойства задачи заставляют выбирать одну, а не другую. Полезная таблица для решения:
| Характеристика задачи | Pre-loaded | Just-in-time |
|---|---|---|
| Релевантные документы известны до запуска | Да - подаём сразу | Излишне - не нужна динамика |
| Объём потенциально релевантных данных значительно больше окна | Не работает - не уместится | Естественный выбор |
| Latency критична (пользователь ждёт ответ за секунды) | Лучше - один вызов модели | Хуже - несколько round-trips |
| Документы быстро меняются между шагами | Контекст устаревает | Свежие данные на каждом шаге |
| Команда без LLM-эксплуатационного опыта | Проще запустить | Сложнее отладить |
Just-in-time на практике
Anthropic Claude Code - канонический пример just-in-time подхода. Агент навигирует по файловой системе и анализирует кодовые базы, не загружая целые объекты в контекст: вместо этого он использует Read, Glob, Grep как инструменты. Размеры файлов сигнализируют о сложности, имена указывают на назначение, timestamps подсказывают релевантность. Контекст «открывается прогрессивно» - по мере того, как агент решает, что именно ему нужно посмотреть. Подход публично описан в блоге Anthropic Engineering и виден в открытом исходнике CLI.
Aider (Paul Gauthier, open-source) использует промежуточную стратегию - так называемую repo-map технику. Aider не загружает в контекст ни весь репозиторий, ни «только то, что попросит модель» - вместо этого он строит компактную карту репозитория (имена файлов, символы, структура импортов) и подаёт её модели как навигационный артефакт. Модель решает по карте, какие файлы запросить целиком. Документация: aider.chat/docs/repomap.
Cursor IDE в публичной документации описывает многоуровневую стратегию: для коротких диалогов работает обычная история, для запросов с явной ссылкой на файл (через @-mentions) - pre-loaded подгрузка, для агентного режима - комбинация semantic search по индексу проекта плюс инструменты для чтения файлов по запросу модели. Ссылка: docs.cursor.com.
Cline и Continue.dev - open-source IDE-расширения, которые пошли по схожему пути: контекст собирается из активного файла, выделения, диагностики LSP, плюс инструменты для агентского чтения остального проекта. Они интересны как доказательство, что just-in-time подход воспроизводим вне крупных вендоров и не требует проприетарной инфраструктуры. Cline: github.com/cline/cline; Continue.dev: docs.continue.dev.
Pre-loaded на практике
Классический RAG для Q&A над документацией - всё ещё абсолютно валидный шаблон, и большинство production-внедрений LLM в корпоративных продуктах живут именно по нему. Стек обычно состоит из эмбеддинг-модели (OpenAI text-embedding-3, Cohere embed-v3, voyageai), векторного хранилища (pgvector, Chroma, Weaviate, Qdrant) и оркестратора (LlamaIndex, LangChain), который собирает retrieval-пайплайн с reranking. Этот шаблон описан в десятках туториалов; стилизованный пример типичного внедрения - корпоративный support-бот, который ретривит топ-5 фрагментов из knowledge base и подаёт их в промпт. Этот пример не цитирует конкретную компанию - это стилизованный пример на основе типичных паттернов, потому что архитектура повторяется почти везде с минимальными вариациями.
Гибридные модели
На практике большинство production-агентов гибридны: семантический поиск даёт первичную выборку, инструменты позволяют дозапрашивать недостающее. Граница зависит от характеристик задачи и динамичности контента. Полезный принцип: pre-load то, что нужно гарантированно (текущая задача, активный файл, последняя ошибка), и оставьте just-in-time для всего остального.
Техники для длинных задач с доказательной базой
Задачи, которые требуют сотен или тысяч шагов, сталкиваются с ограничением контекстного окна. Три техники решают эту проблему по-разному, и за каждой стоит реальная производственная практика.
Compaction (сжатие контекста)
При приближении к лимиту контекстного окна - суммаризировать содержимое и реинициализировать с конденсированным резюме. Принципы:
- Сначала максимизировать recall (захватить все критические детали)
- Итеративно улучшать precision (убирать лишнее)
- Сохранять: архитектурные решения, нерешённые баги, детали реализации
- Удалять: избыточные результаты инструментов, дублирующиеся сообщения
Доказательство в продакшене: Claude Code реализует это через команду /compact, которая сжимает историю разговора с сохранением последних прочитанных файлов и активных задач. Компактация - не «отдалённая идея», а ежедневная практика для пользователей, которые ведут длинные сессии разработки. Аналогичные механизмы есть в Cursor (auto-summarize при подходе к лимиту) и в Cline (manual context window cleanup).
Structured note-taking (структурированные заметки)
Агент ведёт внешние файлы памяти (NOTES.md, TODO-списки, plan.md), которые регулярно обновляет и перечитывает при сбросе контекста. Это обеспечивает:
- Постоянное отслеживание прогресса на сложных задачах
- Сохранение критических зависимостей между шагами
- Когерентность на протяжении многих часов работы
Доказательство в продакшене: Claude Code использует CLAUDE.md как persistent context, который автоматически подтягивается в начало каждой сессии, и активно работает с TODO-списками через TodoWrite-инструмент. Devin от Cognition Labs построен вокруг идеи постоянной памяти агента: scratchpad-файлы, в которых агент фиксирует план и промежуточные результаты, переживают переходы между шагами и серверные перезапуски. Стилизованный пример пользы заметок - long-running рефакторинг, где агент за 30+ шагов несколько раз возвращается к собственному плану, чтобы свериться с приоритетами; типичный паттерн воспроизводится в любой агентной IDE и описан как «стилизованный пример на основе типичных паттернов».
Sub-agent архитектура
Специализированные подагенты выполняют фокусные задачи с чистым контекстным окном. Подагент может потратить тысячи токенов на исследование, но вернуть конденсированное резюме в 1000-2000 токенов. Основной агент координирует высокоуровневый план и синтезирует результаты.
Доказательство в продакшене: Claude Code предоставляет Task-инструмент, через который основной агент делегирует подзадачи специализированным подагентам с собственным контекстом. GitHub Copilot Workspace, представленный в 2024 году, в preview-режиме реализует сходную идею - «спецификация - план - реализация» как стадии с собственными контекстами. Devin и аналогичные «agentic» системы используют sub-agent architecture как способ удержать контекст основного агента в управляемых пределах.
Когда что использовать
| Техника | Лучше всего подходит для | Производственные примеры |
|---|---|---|
| Compaction | Разговорные задачи с интенсивным обменом сообщениями | Claude Code /compact, Cursor auto-summarize |
| Note-taking | Итеративная разработка с чёткими milestone-ами | CLAUDE.md, Devin scratchpad, TODO-инструменты |
| Sub-agents | Исследование и анализ с возможностью параллельного выполнения | Claude Code Task, Copilot Workspace stages |
Инструментарий и измерение
Любой инженерной дисциплине нужен измерительный аппарат. Без него «улучшения промпта» индустриально неотличимы от суеверия. Context engineering - не исключение; ниже - те инструменты, которые сложились в стандартный набор за 2023-2025 годы.
Трассировка и наблюдение
LangSmith (LangChain) - индустриальный стандарт для трассировки LLM-приложений. Каждый вызов модели и каждый retrieval сохраняется как trace; можно посмотреть, какой именно контекст был подан в окно, какой ответ вернулся, сколько токенов израсходовано. Документация: docs.smith.langchain.com. Открытые альтернативы - Langfuse и Helicone; принцип одинаковый.
Anthropic в своих инструментах (Claude Console, Workbench) предоставляет аналогичную картину - распределение токенов по типам контента (system, user, tool result, generated) и утилизация контекстного окна по сессии. Без этой картины нельзя осмысленно говорить о «бюджете токенов» - можно только догадываться.
Хранение и индексация
Стандартный набор векторных хранилищ:
- pgvector - расширение PostgreSQL; правильный выбор, если у вас уже есть Postgres и не хочется заводить новый сервис. Реальная производственная история - Supabase публично описал переход на pgvector как основу собственного AI-стека.
- Chroma - lightweight in-process хранилище; удобно для прототипов и небольших датасетов. Документация: docs.trychroma.com.
- Qdrant, Weaviate, Pinecone, Milvus - managed/self-hosted векторные БД с фильтрацией, hybrid search, replication. Выбор по эксплуатационной готовности, а не по «у кого embedding-модель лучше».
Оркестрация retrieval-пайплайнов
LlamaIndex и LangChain - две основные библиотеки для сборки retrieval-пайплайнов. LlamaIndex исторически глубже в retrieval-стратегиях (sub-question query, recursive retriever, hybrid search), LangChain - шире по охвату (агенты, инструменты, интеграции). На практике они часто соседствуют. Документация: docs.llamaindex.ai, python.langchain.com.
Качественные метрики
Минимальный набор, который должен быть в production-системе с context engineering:
- Token utilization per task - сколько токенов потрачено на одну задачу: входных, выходных, на retrieval. OpenAI и Anthropic дают это бесплатно в API response.
- Retrieval quality - precision/recall ретривнутых документов относительно «золотого набора», собранного на исторических задачах. Без этой метрики нельзя сравнивать стратегии чанкинга.
- End-to-end task success rate - процент задач, которые система решает корректно. Это единственная метрика, которая отвечает на вопрос «стало ли лучше»; всё остальное - прокси.
- Context window utilization - какая доля окна реально используется. Хронические 90%+ - сигнал, что пора компактовать или менять стратегию retrieval; хронические 10% - сигнал, что окно выбрано неоправданно большое.
- Latency per turn - время от пользовательского ввода до ответа. Just-in-time стратегии его увеличивают; нужно явно решать, какой бюджет latency приемлем.
Главное правило измерения: метрики собираются с самого начала, а не «когда дойдут руки». Без исторических данных любое сравнение «до и после» сводится к субъективному ощущению.
Антипаттерны context engineering
Большинство неработающих LLM-систем ломаются не на «модель плохая», а на типовых архитектурных ошибках в обращении с контекстом. Список ниже стоит пройти как чеклист до того, как обвинить модель.
Prompt-stuffing без retrieval. Соблазн «давайте просто запихнём весь репозиторий или всю документацию в промпт» очень велик, особенно с появлением 1M-контекстов. Проблема в том, что без relevance-фильтрации модель платит вниманием за каждый токен и быстро упирается в context rot и lost-in-the-middle. Внешне это выглядит как «модель всё знает, но отвечает мимо». Решение - retrieval, даже если окно позволяет обойтись без него.
Никакой компактации. Long-running агентные сессии без compaction-механизма растут монотонно: история, результаты инструментов, промежуточные размышления. К концу сессии в окне столько шума, что свежий запрос конкурирует с тысячами старых токенов. Симптом - «утром агент работал, к вечеру стал тупее». Решение - явный механизм compaction по триггеру (доля окна, число сообщений, время сессии).
Sub-agent overuse. Обратная крайность: команда вдохновляется идеей подагентов и начинает делегировать любую мелочь. На простой задаче, которую основной агент решил бы за один шаг, появляется тройной round-trip с serialization/deserialization контекста и накладные расходы на координацию. Эвристика: подагент оправдан, если фокусная задача требует существенно отдельного контекста или если параллелизм даёт реальный выигрыш.
Few-shot примеры с устаревшими паттернами. Few-shot работает, потому что модель копирует паттерн из примеров. Если примеры устарели (старая API, deprecated подход, исправленный баг), модель честно скопирует устаревшее. Симптом - модель упорно пишет код в стиле, от которого команда отказалась полгода назад. Решение - привязка few-shot примеров к версионированному источнику и регулярный аудит.
Игнорирование needle-in-haystack деградации. Многие команды доверяют рекламным цифрам про «100% recall на 1M токенов» и проектируют систему, исходя из того, что модель прочитает любой документ в окне одинаково внимательно. Реальные бенчмарки (Lost in the Middle, NoLima, RULER) показывают U-образную или хуже кривую. Симптом - модель «не видит» документ, который явно есть в контексте. Решение - проектировать раскладку контекста с учётом позиционных эффектов и измерять retrieval-эффективность на реальных задачах.
Жёсткое кодирование context budget без измерения. «Выделим 8000 токенов на retrieval, 4000 на историю, 2000 на инструменты» - звучит инженерно, но в отсутствие измерений эти цифры взяты с потолка. Реальное распределение зависит от типа задачи; что работает для Q&A, не работает для кодинга. Решение - сначала собрать данные о реальном утилизации, потом выставлять бюджеты.
Контекст как git без git. Команды редко версионируют системный промпт и набор инструментов. Через полгода в Confluence лежит четыре версии «текущего промпта», в коде - ещё две, в продакшене - какая-то третья. Когда что-то ломается, никто не помнит, что именно поменялось. Решение - системные промпты, инструменты и шаблоны хранить в репозитории под git с теми же ревью-практиками, что и обычный код.
Практические рекомендации
Все техники сводятся к одному принципу: найти минимальный набор высокосигнальных токенов, который максимизирует вероятность нужного результата.
Управление контекстным окном
- Относитесь к токенам как к бюджету - стратегически распределяйте место на высокосигнальную информацию
- Внедряйте селективную память - оценка важности при записи и периодическое удаление устаревших записей
- Оптимизируйте стратегию чанкинга - баланс между точностью (мелкие чанки) и контекстным богатством (крупные чанки)
Проектирование инструментов и промптов
- Начинайте с минимального промпта - добавляйте инструкции только по мере обнаружения реальных ошибок
- Структурируйте секции - XML-теги и заголовки позволяют модели эффективнее навигировать по промпту
- Используйте примеры вместо правил - diverse few-shot примеры демонстрируют желаемое поведение эффективнее, чем перечисление edge-кейсов
- Стандартизируйте интеграцию - MCP вместо кастомных интеграций для каждого инструмента
Архитектура агентов
- Используйте just-in-time retrieval - лёгкие идентификаторы вместо предзагрузки всего
- Создавайте циклы обратной связи - агент наблюдает за результатами и корректирует стратегию
- Выбирайте технику по задаче - compaction для диалогов, заметки для итеративной разработки, подагенты для параллельного исследования
Источники
Первоисточники и фундаментальные работы
- Patrick Lewis et al. Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (NeurIPS 2020). Архитектурный шаблон retrieve-then-generate, давший начало современному RAG.
- Nelson F. Liu et al. Lost in the Middle: How Language Models Use Long Contexts (Stanford, 2023). Систематическая U-образная кривая извлечения по позиции в контексте.
- Freda Shi et al. Large Language Models Can Be Easily Distracted by Irrelevant Context (2023). Доказательство, что нерелевантный контекст активно деградирует точность.
- Andrej Karpathy. State of GPT (Microsoft Build, май 2023). Популяризация фрейма контекстного окна как рабочей памяти модели.
Практики и отраслевые источники
- Effective context engineering for AI agents - Anthropic Engineering. Системное оформление дисциплины с приёмами из Claude Code.
- Context Engineering for Agents - Lance Martin (LangChain). Серия постов, закрепившая термин в индустрии.
- How Long Contexts Fail / How to Fix Your Context - Drew Breunig. Введение термина «context rot» и каталог режимов отказа.
- Context engineering - Weaviate Blog. Обзор практик и компонентов.
Производственные системы и реализации
- Claude Code documentation - Anthropic. Sub-agents, /compact, CLAUDE.md как примеры приёмов.
- Aider repo-map - Paul Gauthier. Техника карты репозитория как промежуточная стратегия retrieval.
- Cursor documentation. Многоуровневая стратегия контекста в IDE.
- Cline и Continue.dev. Open-source IDE-агенты с публично доступной архитектурой контекста.
- GitHub Copilot Workspace. Стадии «спецификация - план - реализация» как пример sub-agent архитектуры в продукте.
Инструментарий и измерение
- LangSmith. Трассировка LLM-приложений как индустриальный стандарт.
- pgvector, Chroma. Векторное хранение для retrieval.
- LlamaIndex, LangChain. Сборка retrieval-пайплайнов и оркестрация агентов.