Amiga
Оглавление курса · урок 4 из 24

Модуль 1 · Как устроен агент · урок 4 из 24

Контекстная инженерия

Промпт-инжиниринг отвечал на вопрос, как сформулировать запрос. Контекстная инженерия отвечает на другой: что вообще должна видеть модель на каждом шаге длинной работы. Для агента, который делает сотни вызовов инструментов за ход, второй вопрос важнее первого. В уроке — модель мышления и конкретные рычаги Codex.

Определение и главная идея

В статье Anthropic «Effective context engineering for AI agents» (сентябрь 2025) контекстная инженерия описана как развитие промпт-инжиниринга: курирование всего набора токенов на момент инференса — инструкций, инструментов, внешних данных, истории. Биргитта Бёкелер в «Context Engineering for Coding Agents» (февраль 2026) пересказывает определение коллеги ещё короче: это отбор того, что видит модель, ради лучшего результата.

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

Наш вывод. Большое окно не отменяет дисциплину. Оно лишь откладывает момент, когда вы заметите, что агент начал игнорировать правила из начала разговора.

Из чего состоит контекст Codex

Если собрать воедино то, что разобрано в уроках об агентном цикле и о сборке промпта:

Слой Когда попадает Кто управляет
Базовые инструкции, правила песочницы Всегда, в начале Codex и ваш config.toml
Определения инструментов, включая MCP Всегда Вы: какие серверы и инструменты включены
Цепочка AGENTS.md В начале сессии Вы, лимит 32 KiB
Метаданные навыков В начале сессии Вы: какие навыки установлены
Полный текст навыка Когда навык выбран Модель или вы явным вызовом
Прочитанные файлы, вывод команд По ходу работы Модель, с ограничениями harness
Рассуждения и ответы По ходу работы Модель

Последние два слоя к середине длинной задачи занимают большую часть окна. Именно поэтому дизайн инструментов и их вывода — центральная тема контекстной инженерии, а не второстепенная.

Кто решает, что загрузить

Бёкелер предлагает полезную классификацию по тому, кто принимает решение о загрузке:

  • Модель — навыки, чтение файлов, поиск. Гибко, но не гарантированно: навык может не сработать, если описание не совпало с задачей.
  • Человек — упоминание файла через @, явный вызов навыка $skill-name, slash-команды. Гарантированно, но требует внимания.
  • Софт агента — хуки. Детерминированно. В Codex хук SessionStart может вернуть текст, который добавляется как дополнительный developer-контекст.

Наш вывод — правило размещения знания:

Знание Где держать Почему
Нужно почти в каждой задаче (команды сборки, запреты) AGENTS.md Загружается всегда, должно быть коротким
Нужно в определённом типе задач (миграции, релиз мобильного приложения) Навык Загружается по требованию
Обязано сработать без исключений (проверка секретов, запрет правки миграций) Хук или линтер Не зависит от решения модели
Справочное, большое (схема БД, API CRM) Файл в docs/, ссылка из AGENTS.md Агент прочитает, когда нужно

Заранее или по требованию

Anthropic противопоставляет загрузку заранее и подгрузку по требованию (just-in-time retrieval): агент держит идентификаторы — пути, имена таблиц, запросы — и подтягивает данные инструментами, когда они нужны. Рабочий вариант для кодинг-агента — гибрид: короткий файл инструкций загружается сразу, остальное агент находит поиском по репозиторию.

Codex устроен именно так. Задача внешнего harness — сделать подгрузку по требованию дешёвой: понятная структура каталогов, говорящие имена, ссылки из AGENTS.md на конкретные документы. Об этом уроки о читаемости для агента и об AGENTS.md как оглавлении.

В статье OpenAI о компьютерной среде для Responses API (март 2026) прямо назван антипаттерн — складывать все входные данные в промпт. Предлагается класть файлы в файловую систему, а структурированные данные — в SQLite с описанием таблиц и давать модели самой выбрать нужное. Для агентства это, например, выгрузка лидов из CRM для отладки интеграции: не вставлять JSON на 5 000 строк в чат, а положить файл в рабочую папку и сказать, где он.

Инструменты как часть контекста

Каждый подключённый инструмент — это токены определения в каждом запросе и потенциально огромный вывод. Принципы из статьи Anthropic о проектировании инструментов:

  • несколько целевых инструментов вместо обёртки над всем API;
  • без пересекающихся инструментов — модель тратит силы на выбор между ними;
  • осмысленный, сжатый ответ, пагинация и фильтрация;
  • ошибка объясняет, как исправить вызов.

В Codex для MCP-серверов есть точные рычаги: enabled_tools (белый список), disabled_tools (чёрный список, применяется после белого) и бюджет вывода конкретного инструмента output_token_limit. Для всех инструментов действует tool_output_token_limit.

toml · .codex/config.toml
[mcp_servers.playwright]
command = "npx"
args = ["-y", "@playwright/mcp@latest"]
# Только то, что нужно для проверки вёрстки
enabled_tools = ["browser_navigate", "browser_snapshot", "browser_click", "browser_take_screenshot", "browser_console_messages"]

[mcp_servers.playwright.tools.browser_snapshot]
output_token_limit = 8000

Изоляция контекста субагентами

Третий приём из той же статьи Anthropic — субагенты в чистом контексте, которые возвращают выжимку примерно на 1 000–2 000 токенов вместо всего прочитанного. В Codex субагенты работают в своих тредах и наследуют песочницу родителя. Это не бесплатно: по документации они расходуют больше токенов, чем один агент. Используйте их для шумной работы с коротким результатом: исследовать незнакомый модуль, разобрать логи, прогнать и проанализировать тесты. Настройка — в уроке о субагентах.

Примеры сильнее правил

Ещё один вывод Anthropic: несколько канонических примеров работают лучше длинного списка правил. Вместо десяти пунктов о том, как писать компонент OctoberCMS, — одна строка в AGENTS.md вроде «Эталон компонента — components/Awards.php, повторяй структуру». Агент всё равно копирует шаблоны, которые видит в коде. Лучше, если это будет хороший шаблон, а не случайный.

Попробуйте сами

10–15 мин на рабочем месте
  1. Откройте свой AGENTS.md и разметьте каждый абзац по таблице выше: AGENTS.md, навык, хук или линтер, docs/. Всё, что не «почти в каждой задаче», вынесите.
  2. Для самого используемого MCP-сервера пропишите enabled_tools только с теми инструментами, которые реально вызывались за последнюю неделю. Сравните input_tokens первого хода в codex exec --json до и после.
  3. Замените одно длинное правило в AGENTS.md ссылкой на эталонный файл в репозитории и проверьте на реальной задаче, повторяет ли агент структуру эталона.

Коротко

  • Контекст — конечный бюджет внимания; качество падает плавно по мере заполнения.
  • Знание размещают по тому, кто должен решить о загрузке: модель, человек или софт.
  • Гибрид: короткие инструкции заранее, остальное — подгрузкой по требованию.
  • Инструменты и их вывод — главный потребитель окна; ограничивайте набор и объём.
  • Канонический пример в коде работает лучше списка правил.
Отметка хранится только в вашем браузере
Хотите связаться с владельцем
компании напрямую?
Дмитрий Тарасов
Дмитрий Тарасов
СЕО

НАПИСАТЬ

Написать в MAX