К курсу

Цикл агента

Один шаг цикла агентаПрактика: один шаг циклаЦикл в кодеПрактика: цикл в кодеОстановка и повторыПрактика: остановка и повторыЧто решает только кодПрактика: что решает код

Надёжность в проде

Таймаут и ключ идемпотентностиПрактика: таймаут и ключ идемпотентностиСказал «готово», а ничего не произошлоПрактика: ложный успехУстойчивый агент: checkpoint и продолжениеПрактика: устойчивый агент

Устройство агентов

Workflow или агентПрактика: workflow или агентReAct и plan-and-executeПрактика: ReAct и plan-and-executePlan-and-SolveПрактика: Plan-and-SolveReflexionПрактика: ReflexionОдин агент или ройПрактика: один агент или рой

Контекст и стоимость

Почему растёт счёт за агентаПрактика: токены и кэшКонтекст-инженерияПрактика: управление окномПамять агентаПрактика: что агент хранит

Инструменты и протоколы

MCPПрактика: MCPОписания инструментов и инъекцииПрактика: описания инструментов и инъекцииКод вместо набора инструментовПрактика: код вместо набора инструментовНавыки агента и A2AПрактика: навыки агента и A2A

Фреймворки

LangGraph или обычный циклПрактика: LangGraph или обычный циклAgent SDK: что вы покупаетеПрактика: agent SDK

Агенты для кода

Агент для кода по спецификацииПрактика: агент для кода по спецификации
←→ENВойти
Агенты › Контекст и стоимость

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

Опирается наПочему растёт счёт за агента

Этот блок о том, что лежит в окне модели на каждом шаге: чем оно заполняется, какими четырьмя способами держать его полезным и как при сжатии истории можно потерять правило, которому агент обязан следовать.

Покупатель Northwind оспаривает повреждение в заказе 4417. Агент раз за разом загружает полную историю заказа и документы о доставке. К шагу 15 перед ним лежит 96 000 токенов, а сама жалоба покупателя занимает в них совсем немного.

Одна доска у телефона

У вашего коллеги на телефоне есть одна доска. Всё, чем он воспользуется в следующей фразе, должно быть на ней, а чего на доске нет, для него не существует. Между звонками вы стираете её и пишете заново, поэтому каждый раз сами выбираете, что на ней окажется.

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

Окна выросли: у Claude Sonnet 5.5 это 1 миллион токенов. Размер всё равно важен, и причин две. Первую показал прошлый блок: за каждый токен вы платите снова при всех последующих вызовах. Вторая — качество. Anthropic сообщает, что по мере роста контекста модель хуже извлекает из него сведения, а в документации LangGraph предупреждают, что на длинных контекстах большинство моделей работает хуже, отвлекаясь на устаревшее и постороннее.

Вот шаг 15 этого прогона:

Числа выдуманные, для одного прогона с большим числом вызовов инструментов. Почти всё окно занято выводом инструментов, которым агент уже воспользовался.
Числа выдуманные, для одного прогона с большим числом вызовов инструментов. Почти всё окно занято выводом инструментов, которым агент уже воспользовался.

Здесь первыми идут результаты инструментов. Следующим большим куском могут стать схемы инструментов, и они лежат на доске ещё до начала работы. Anthropic приводит пример: пять подключённых серверов MCP, у которых 58 инструментов занимают около 55 000 токенов.

Четыре приёма

1. Загружать только то, что нужно шагу. Инструмент возвращает короткий результат и способ получить остальное. Агент запоминает указатель и достаёт подробности, если они понадобятся. В Anthropic это называют извлечением «just in time».

{
  "order_id": "4417",
  "lines_total": 212,
  "lines_shown": 5,
  "next_cursor": "c_88f2",
  "lines": [
    {
      "sku": "LMP-204",
      "qty": 1,
      "status": "delivered_damaged"
    }
  ]
}

То же относится и к схемам. В API Anthropic инструменты с defer_loading: true не попадают в окно, пока их не найдёт поиск по инструментам, и в документации сказано, что обычно это уменьшает токены определений больше чем на 85 процентов. Цена загрузки по требованию — больше вызовов, и каждый медленнее, чем если бы данные уже были под рукой.

2. Сжимать старую историю. Есть две степени.

Очистка убирает содержимое старых результатов инструментов и оставляет заглушку. Агент ими уже воспользовался. В API Anthropic это функция в бете, и ваш код включает её в запросе:

{
  "context_management": {
    "edits": [
      {
        "type": "clear_tool_uses_20250919",
        "trigger": {
          "type": "input_tokens",
          "value": 60000
        },
        "keep": {
          "type": "tool_uses",
          "value": 3
        },
        "clear_at_least": {
          "type": "input_tokens",
          "value": 20000
        },
        "exclude_tools": [
          "get_refund_policy"
        ]
      }
    ]
  }
}

Compaction, то есть сжатие в сводку, заменяет старые реплики кратким пересказом. Anthropic предлагает её в бете, по запросу или автоматически при достижении порога токенов, по умолчанию это 150 000 входных токенов. Своя compaction есть и у OpenAI.

Прогон, который прибавляет 6 000 токенов за шаг: окно держится ниже порога и не доходит до 366 000.
Прогон, который прибавляет 6 000 токенов за шаг: окно держится ниже порога и не доходит до 366 000.

В этой модели, где начало занимает 12 000 токенов, а сводка 8 000, 60 вызовов отправляют 4,85 миллиона входных токенов с compaction и 11,34 миллиона без неё. В этот счёт уже входят два дополнительных вызова, которые пишут сводки: написать сводку — это тоже оплачиваемый вызов модели.

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

3. Держать заметки вне окна. Агент записывает выясненное в файл или хранилище и читает обратно, когда нужно: «фото проверено, претензия перевозчику C-118 открыта». Про хранилище, которое переживает прогон, следующий блок.

4. Отдать подзадачу субагенту. Отдельный агент с чистым окном читает 200 строк документов поставщика и возвращает короткий ответ. Anthropic описывает субагентов, которые могут потратить десятки тысяч токенов и вернуть сводку, часто на 1 000–2 000. Остального главный агент не видит, а значит, и проверить не может.

Приём

Пример в Northwind

Цена

Загрузка по требованию

Первые 5 строк заказа и курсор

Больше вызовов, шаги медленнее

Очистка старых результатов

Оставить 3 последних результата

Позже может понадобиться загрузить заново

Compaction

Сводка шагов с 1 по 24

Детали могут пропасть, промах кэша, лишний вызов

Заметки вне окна

Заметки по обращению

Нужны инструменты и внимание к тому, что записано

Субагент

Прочитать документы поставщика

Лишние вызовы модели, обратно приходит только сводка

Что может потерять compaction

Бывает, что доску стирают в спешке. Представьте, что на шаге 12 подключился руководитель и написал: «Не возвращать деньги по заказу 4417, пока не закончена проверка адреса». Эта фраза живёт в истории. Сводка на шаге 24 сохраняет суть дела и теряет фразу. На шаге 25 модель видит «повреждение подтверждено, возврат положен» и вызывает issue_refund.

Правило, которое есть только в истории, может исчезнуть, когда историю сожмут в сводку.
Правило, которое есть только в истории, может исчезнуть, когда историю сожмут в сводку.

Anthropic об этом предупреждает: при слишком агрессивной compaction пропадает тонкий контекст, важность которого становится ясна только позже. В документации по compaction также сказано, что текстовые инструкции в системных сообщениях внутри сжатого участка перестают действовать, как только их заменяет сводка.

Защищают три вещи, начиная с самой надёжной:

  1. Правило, которое обязано выполняться, проверяет ваш код перед запуском инструмента. Об этой проверке говорилось в блоке о решениях в коде.
  2. Постоянное правило лежит в основном системном промпте, вне сводки. Правило, появившееся по ходу прогона, ваш код сохраняет и добавляет в промпт.
  3. Вы говорите тому, кто пишет сводку, что сохранить обязательно. Поле instructions в API Anthropic целиком заменяет стандартный промпт сводки, поэтому в нём должно быть всё важное. Ещё можно оставить последние реплики дословно.

Если пишете compaction сами, соблюдайте и формат сообщений. В API Anthropic результаты инструмента должны идти сразу за tool_use, который их запросил, поэтому если разрезать такую пару, API отклонит запрос.

Вывод

Глубже

Effective context engineering for AI agents (Anthropic)Откуда взяты just-in-time, compaction, заметки и субагенты, с объяснением, зачем каждый из них.Compaction (Anthropic)Сравнение compaction по запросу и по порогу и как оставить последние реплики дословно.Context editing (Anthropic)Параметры очистки результатов инструментов и как она влияет на кэш промпта.Context engineering for agents (LangChain)Та же область, разложенная на write, select, compress и isolate, со схемами.
‹ Назад
Предложить улучшениеНашёл ошибку