Инженерия контекста
Инженерия промптов — про слова, которые вы выбираете. Инженерия контекста — про рабочее пространство, которое вы передаёте модели: что в нём есть, в каком порядке и что вы намеренно оставили за бортом.
Это различие важно, потому что контекстное окно — не блокнот. Это ограниченный, дорогой ресурс внимания. То, как вы его заполняете, меняет то, на чём модель фокусируется, сколько это вам стоит и остаётся ли модель полезной по мере роста сессий.
- Отличать инженерию контекста от инженерии промптов — и понимать, почему область сместилась в эту сторону
- Относиться к контекстному окну как к бюджету внимания, а не как к складскому ящику
- Распознавать гниение контекста и эффект 'потерянного в середине' до того, как они сорвут длинную сессию
- Размещать инструкции там, где внимание действительно сосредоточено — наверху, в конце, и никогда не зарытыми в середине
- Применять три рабочие тактики: уплотнение, ведение заметок и извлечение точно в срок
Бюджет контекста
У каждой модели есть максимальный размер контекста — жёсткий потолок, измеряемый в токенах. Думайте о нём как о бюджете. Вы тратите его на:
- Ваш системный промпт и постоянные инструкции
- Извлечённые документы, фрагменты кодовой базы, определения инструментов
- Историю разговора
- Вывод модели (который тоже учитывается в окне в многоходовых сессиях)
Когда он заканчивается, чем-то приходится жертвовать. Либо старое содержимое отбрасывается, либо сессия упирается в стену.
Большинство руководств для новичков относятся к контекстному окну по принципу "чем больше, тем лучше". Инженерия контекста относится к нему как к ресурсу, который нужно распределять аккуратно: тратить его на то, что модели действительно нужно для этого хода, а не на всё, что может оказаться релевантным. Anthropic описывает всю эту дисциплину как поиск "наименьшего возможного набора высокосигнальных токенов" — каждый добавленный вами токен конкурирует за конечный бюджет внимания, что является прямым следствием того, как трансформер соотносит каждый токен с каждым другим.
Гниение контекста и эффект "потерянного в середине"
В моделях с длинным контекстом есть хорошо задокументированное явление: модели уделяют непропорционально много внимания содержимому ближе к началу и концу своего контекста, а их способность вспомнить содержимое, зарытое в середине, ухудшается. Исследователи, изучавшие этот эффект, назвали его "потерянным в середине" (lost in the middle).
Практическое следствие: если вы набьёте контекст на 100 000 токенов документами и зароете самую критичную инструкцию на позиции 60 000, модель может фактически проигнорировать её — не потому, что неспособна прочитать так далеко, а потому, что внимание распределено по окну неравномерно.
"Гниение контекста" (context rot) — более широкий паттерн: по мере роста сессии качество ответов имеет тенденцию дрейфовать. Ранние инструкции размываются. Повторяющийся обмен репликами вытесняет исходную задачу. Модель начинает осторожничать, повторяться или терять нить того, о чём вы на самом деле просили.
Это не баги, которые можно полностью устранить более удачным промптом. Это структурные свойства того, как внимание работает при масштабе. Инженерный ответ — держать контекст меньше и острее, а не набивать его и надеяться.
Порядок имеет значение
Куда вы помещаете содержимое — так же важно, как и то, что вы включаете. Устоявшаяся хорошая практика:
| Позиция | Что туда помещать |
|---|---|
| Самый верх (системный промпт) | Стабильные, долгосрочные инструкции. Персона, правила, требования к формату. |
| После системного промпта | Текущая задача, простыми словами. |
| Прямо перед последним ходом пользователя | Самый критичный, конкретный контекст именно для этого запроса. |
| Середина | Вспомогательные документы, извлечённые фрагменты — упорядоченные по релевантности, а не по хронологии. |
| История разговора | Только то, что необходимо для непрерывности. Обрезайте агрессивно. |
Общее правило: чем ближе к текущему ходу, тем больше внимания. Критичные инструкции, которые живут только в середине длинной истории, под угрозой.
"Правильная высота" для инструкций
Системный промпт может провалиться двумя противоположными способами. Слишком низко — и вы зашиваете хрупкую логику "если-это-то-то", которая ломается в тот же момент, когда реальность отличается. Слишком высоко — и вы пишете расплывчатые указания, предполагающие контекст, которого у модели нет. Anthropic называет цель "правильной высотой" — золотой серединой, которая "достаточно конкретна, чтобы эффективно направлять поведение, но при этом достаточно гибка, чтобы давать сильные эвристики". Целься туда: конкретные правила и примеры, а не дерево решений и не общее настроение.
Извлечение вместо набивки
Соблазн — поместить туда всё: все документы, всю кодовую базу, весь разговор. Сопротивляйтесь ему.
Лучший подход — избирательное извлечение: определить, что модели действительно нужно для этого конкретного запроса, и впрыснуть только это. Хорошо извлечённый фрагмент нужного документа на 2 000 токенов превосходит свалку на 40 000 токенов, где ответ затерян где-то в середине.
Именно поэтому существует генерация с дополнением извлечением (RAG) — не только чтобы преодолеть ограничения контекста, но и чтобы улучшить качество, держа контекст отобранным. Агентная версия — извлечение точно в срок: вместо предзагрузки каждого документа агент держит лёгкие идентификаторы (пути к файлам, ID, запросы) и подтягивает фактическое содержимое в контекст только в тот момент, когда оно нужно.
Для интерактивных сессий применима та же логика: вместо накопления всего периодически уплотняйте или очищайте историю, чтобы убрать содержимое, которое больше не релевантно текущей задаче. Команды /compact и /clear в Claude Code — это инструменты инженерии контекста, а не просто управление сессией. На API тот же паттерн автоматизируется через память и редактирование контекста — старые результаты инструментов вычищаются из окна, тогда как важное записывается в постоянное хранилище памяти.
Три рабочие тактики
Для долгосрочной работы три техники делают основную тяжёлую работу. Они сочетаются — большинство реальных агентов используют все три.
- Когда сессия приближается к лимиту окна, суммируйте её и переинициализируйте с дистиллированной версией. Сохраняйте несущие детали — архитектурные решения, нерешённые баги, ключевые выборы реализации — и отбрасывайте пошаговый отчёт. Именно это делает /compact в Claude Code.
- Заставьте агента записывать устойчивые факты во внешнюю память (файл, черновик, CLAUDE.md) и считывать их позже. Это даёт постоянную память с минимальными накладными расходами в окне — заметки живут вне бюджета, пока не понадобятся.
- Не набивайте заранее каждый документ. Держите лёгкие ссылки и загружайте фактическое содержимое во время выполнения, только для того шага, которому оно нужно. Целевая выборка на 2 000 токенов побеждает свалку на 40 000 токенов.
Сторона затрат
Токены, которые вы отправляете, — это токены, за которые вы платите, и деньгами, и задержкой. Набивка контекста слабо релевантным материалом раздувает и то, и другое. Инженерия контекста и эффективность затрат — это одна и та же проблема.
Конкретнее:
- Раздутый системный промпт, который вы копируете-вставляете из шаблона, оплачивается при каждом вызове.
- Старая история разговора, которую вы тащите вперёд, потому что "вдруг пригодится", оплачивается при каждом вызове.
- Документы, которые вы впрыскиваете "на всякий случай", оплачиваются при каждом вызове.
Обрезка того, чему там быть не нужно, одновременно лучше для качества и дешевле в эксплуатации.
Практические тактики для пользователей Claude
В Claude.ai:
- Используйте отдельные разговоры для отдельных задач. Не позволяйте послеобеденным отступлениям загрязнять контекст сфокусированного проекта.
- Суммируйте длинные ветки перед тем, как задать сложный вопрос, который от них зависит. Явное резюме часто полезнее сырой истории.
- Помещайте конкретную вещь, которую хотите, в конец длинного сообщения, а не зарывайте в середину.
В Claude Code:
- Держите ваш файл
CLAUDE.mdподжарым. Каждая строка в нём впрыскивается в каждую сессию. См. CLAUDE.md и Управление контекстом. - Используйте
/clearпри переключении на по-настоящему другую задачу. Используйте/compact, когда хотите продолжить, но сессия растёт. - Ссылайтесь на файлы по пути, а не вставляйте их содержимое, когда полный файл не нужен для текущего шага.
На уровне API:
- Проектируйте системные промпты так, чтобы они содержали только то, что действительно нужно каждому запросу. Перемещайте инструкции, специфичные для задачи, в ход пользователя.
- Для сценариев с большим количеством документов извлекайте и впрыскивайте релевантные фрагменты, а не загружайте весь корпус.
- Структурируйте промпт так, чтобы стабильный, переиспользуемый префикс шёл первым — это также включает кеширование промптов, естественного спутника инженерии контекста.
Когда вы хотите передать Claude длинный документ, правило размещения каждый раз побеждает чистый объём:
Инструкция первой, повторённая последней
Задача: найди каждый пункт, где этот договор ограничивает нашу ответственность, и процитируй каждый дословно с номером раздела. [... вставьте сюда полный 40-страничный договор ...] Напоминание о задаче: перечисли каждый пункт об ограничении ответственности выше, процитированный точно, с номерами разделов. Если таких нет, скажи об этом явно.
Одна и та же инструкция находится наверху и внизу — на двух позициях, которым внимание благоволит — поэтому она выживает даже при очень длинной середине.
Сдвиг в мышлении
Инженерия промптов спрашивает: "Что мне сказать?" Инженерия контекста спрашивает: "Что модель должна увидеть, в каком порядке и что мне следует намеренно оставить за бортом?"
Второй вопрос сложнее, но именно он на самом деле определяет качество при масштабе.
Check yourself
0/3- Контекстное окно — это бюджет внимания, а не хранилище — тратьте его только на высокосигнальные токены.
- Позиция важнее объёма: критичные инструкции идут наверх и прямо перед финальным ходом, никогда не зарытыми в середине.
- Уплотнение, ведение заметок и извлечение точно в срок — три тактики, которые сохраняют связность длинных агентов.
- Отбор контекста — тот же рычаг, что и сокращение затрат: меньше токенов, лучше ответы, ниже счёт.