- Дата публикации
Как Anthropic ускорила Claude Code: всё держится на кэше промптов
Что нового
Anthropic подробно рассказала, как устроен Claude Code — «долгоживущий» AI‑ассистент для работы с кодом — и почему весь продукт крутится вокруг кэширования промптов.
Ключевые новшества и подходы:
- Claude Code строит всю работу агента вокруг prompt caching — повторного использования уже обработанной части промпта.
- Команда держит высокий процент попаданий в кэш как критический метрику: настраивает алерты и поднимает инциденты (SEV), если hit rate падает.
- Вся структура промпта разделена на уровни стабильности:
- Статический системный промпт и список инструментов — общие для всех сессий.
- Файл
CLAUDE.md— общий внутри проекта. - Контекст сессии — общий внутри одной сессии.
- Сообщения диалога — меняются каждый ход.
- Anthropic выстроила работу так, чтобы:
- не менять модели посреди длинной сессии;
- не добавлять и не удалять инструменты по ходу разговора;
- обновлять контекст через сообщения, а не правкой системного промпта;
- делать компактацию (сжатие истории) так, чтобы не терять кэш.
- На базе опыта Claude Code Anthropic встроила компактацию диалога прямо в API, чтобы другим разработчикам не приходилось заново решать те же проблемы.
Цифр по стоимости токенов, скорости или точным hit rate Anthropic не приводит, но прямым текстом говорит: даже несколько процентов промахов по кэшу заметно бьют по цене и задержке.
Как это работает
Базовый принцип: кэш по префиксу
API Anthropic кэширует промпт по точному совпадению префикса. Всё, что идёт от начала запроса и до специальных точек cache_control, попадает в кэш. Если в любом месте префикса меняется хотя бы один байт — весь хвост после этого места перестаёт кэшироваться.
Отсюда главное правило: как вы упорядочите части промпта, так вы и будете платить.
Anthropic строит промпт Claude Code так:
-
Статический системный промпт + инструменты
Это глобальная часть, которая одинакова для всех пользователей и сессий. Здесь лежит описание роли Claude Code, правила работы, список инструментов (включая MCP‑инструменты) и их схемы. -
CLAUDE.md
Проектный контекст: описание репозитория, конвенции, особенности кода. Кэшируется на уровне проекта. -
Контекст сессии
Дополнительные данные, актуальные для текущей сессии: выбранные файлы, состояние режима (например, Plan Mode), пользовательские настройки. -
Сообщения диалога
История общения: запросы пользователя, ответы Claude, результаты вызовов инструментов.
За счёт такого разбиения максимальное количество запросов разделяет общий префикс, а значит — попадает в кэш.
Хрупкость структуры промпта
Anthropic подчёркивает, что эта конструкция легко ломается из‑за мелочей:
- Добавили подробный таймстемп в статический системный промпт — префикс меняется каждый раз, кэш рушится.
- Поменяли порядок описаний инструментов случайным образом — кэш перестаёт совпадать по байтам.
- Обновили параметры инструмента (например, список агентов, которых может вызвать «Agent tool») — тоже ломается совпадение префикса.
Вывод: любой «живой» параметр в статическом блоке — потенциальный убийца кэша.
Обновления через сообщения, а не через системный промпт
Когда контекст устаревает (сменилось время, пользователь изменил файл, состояние режима и т.п.), логично было бы править системный промпт. Anthropic этого избегает, потому что каждое изменение системного промпта приводит к промаху по кэшу.
Вместо этого Claude Code передаёт обновления через сообщения:
- В следующее сообщение пользователя или результат инструмента вставляет тег вроде
<system-reminder>. - В этот блок кладёт обновлённые факты: новое время, изменённое состояние, новые файлы и т.д.
Системный промпт при этом не трогает, префикс остаётся прежним, кэш продолжает работать.
Не менять модель посреди сессии
Кэш промптов жёстко привязан к конкретной модели. Кэш для Claude 3 Opus не работает для Claude 3 Haiku и наоборот.
Anthropic приводит пример: диалог уже разросся до 100 000 токенов с Claude 3 Opus. Пользователь задаёт простой вопрос, и может показаться разумным переключиться на более дешёвый Claude 3 Haiku. Но при таком переключении нужно заново отправить весь контекст Haiku, и он не сможет использовать кэш Opus.
Результат: ответ Haiku выходит дороже, чем если бы Opus продолжил разговор по уже закэшированному префиксу.
Решение — субагенты:
- Основной агент на Opus формирует специальное «hand‑off» сообщение: сжатое описание задачи для Haiku.
- Дальше отдельный субагент на Haiku решает локальную задачу, не требующую всего контекста.
Так Anthropic делает, например, с Explore‑агентами Claude Code, которые используют Haiku.
Не добавлять и не удалять инструменты в середине диалога
Инструменты входят в тот самый кэшируемый префикс. Если в середине разговора вы:
- убираете часть инструментов,
- добавляете новые,
- меняете их порядок,
то весь префикс с инструментами перестаёт совпадать, и кэш промпта для этой сессии умирает.
Anthropic сознательно никогда не меняет набор инструментов по ходу сессии. Вместо этого она моделирует изменение состояния через сами инструменты.
Пример: Plan Mode без убийства кэша
Интуитивный подход к Plan Mode в IDE: когда пользователь его включает, можно было бы:
- заменить набор инструментов на «только чтение»;
- отключить всё, что меняет файлы.
Но это ломает префикс и кэш. Anthropic пошла другим путём:
- В запрос всегда попадает полный список инструментов.
- Plan Mode реализован как инструменты
EnterPlanModeиExitPlanMode. - При включении Plan Mode агент получает системное сообщение: он сейчас в режиме планирования, может только исследовать код, не должен править файлы и обязан вызвать
ExitPlanMode, когда план готов. - Определения инструментов при этом не меняются.
Бонус: так как EnterPlanMode — тоже инструмент, сам Claude может вызвать его, когда чувствует, что задача сложная и требует предварительного плана, и при этом кэш не страдает.
Экономия на MCP‑инструментах через отложенную загрузку
Claude Code может подключать десятки MCP‑инструментов. Если каждый раз отправлять в запрос полный JSON‑описания всех инструментов, промпт раздувается, а стоимость растёт.
Удалять инструменты посреди диалога нельзя — это ломает кэш. Anthropic использует схему defer_loading:
- В префикс попадают лёгкие заглушки инструментов: только имя и флаг
defer_loading: true. - Когда модели реально нужен инструмент, она вызывает специальный tool search.
- После этого Anthropic подгружает полную схему только выбранного инструмента.
Кэшируемый префикс при этом остаётся стабильным: набор заглушек и их порядок не меняются.
Компактация истории без потери кэша
Когда диалог упирается в лимит контекстного окна, Claude Code делает компактацию:
- Отдельным запросом просит модель сжать историю в краткое резюме.
- Продолжает диалог уже с этим резюме вместо длинной истории сообщений.
Наивная реализация выглядит так:
- Отправить всю историю в отдельный API‑запрос с системным промптом вида «Суммируй этот диалог» и без инструментов.
Проблема: такой запрос не совпадает по префиксу с основным диалогом.
- Системный промпт другой.
- Набор инструментов другой (или отсутствует).
Из‑за этого кэш промптов не используется вообще, и вы платите полную стоимость за весь длинный контекст, который как раз и пытаетесь ужать.
Anthropic решает это через cache‑safe forking:
- Для компактации Claude Code использует точно тот же системный промпт, тот же пользовательский и системный контекст и тот же список инструментов, что и в родительской сессии.
- В запрос добавляет всю историю диалога родителя.
- В конец истории, как новое пользовательское сообщение, добавляет промпт компактации: просьбу кратко пересказать диалог.
С точки зрения API такой запрос почти идентичен последнему запросу в основной сессии:
- Префикс тот же.
- Инструменты те же.
- Разница только в последнем сообщении.
В результате API повторно использует закэшированный префикс, и вы платите только за хвост — текст промпта компактации и ответ‑резюме.
Единственное условие: нужно заранее оставлять буфер контекста под это резюме и под ответ модели, чтобы они поместились в окно.
Anthropic перенесла этот подход в сам API: компактация теперь встроена, и разработчики могут использовать такие же cache‑safe паттерны без ручной реализации.
Что это значит для вас
Если вы строите своего агента — неважно, это AI‑помощник в IDE, чат‑бот поддержки или внутренний ассистент — опыт Claude Code даёт несколько прямых советов.
1. Проектируйте промпт с учётом кэша
- Вынесите максимум стабильной информации в начало промпта.
- Не вставляйте туда динамику: даты, случайные идентификаторы, перемешивающиеся списки.
- Отдельно держите:
- глобальный системный промпт и инструменты;
- проектный контекст;
- контекст сессии;
- историю сообщений.
Чем больше запросов делят общий префикс, тем ниже стоимость и задержка.
2. Обновляйте контекст через сообщения
- Не переписывайте системный промпт при каждом изменении даты, режима или состояния файлов.
- Добавляйте обновления в виде отдельных сообщений (например, в следующем сообщении пользователя с пометкой наподобие
<system-reminder>).
Так вы не сломаете кэш, но модель всё равно получит свежие данные.
3. Избегайте смены модели в длинных диалогах
- Если сессия уже разрослась до десятков тысяч токенов, переключение с Opus на Haiku может оказаться дороже, чем продолжение работы на Opus.
- Используйте субагентов: основной агент формирует краткое задание, а быстрый/дешёвый агент решает локальную подзадачу.
Это особенно полезно, если вы делаете сложного ассистента, который комбинирует, например, «тяжёлую» модель для рассуждений и «лёгкую» для быстрых операций.
4. Фиксируйте набор инструментов и используйте отложенную загрузку
- Не добавляйте и не убирайте инструменты посреди разговора.
- Моделируйте изменение режима через сами инструменты и системные сообщения, как в Plan Mode Claude Code.
- Для большого числа инструментов используйте подход
defer_loading: держите в префиксе только заглушки и подгружайте полные схемы по запросу модели.
Это пригодится, если вы строите окружение с десятками интеграций — от Git и CI до внутренних API.
5. Относитесь к кэшу как к инфраструктуре
Anthropic мониторит процент попаданий в кэш так же строго, как аптайм сервиса:
- Настраивает алерты на падение hit rate.
- Считает серьёзные падения инцидентами (SEV).
Если вы масштабируете агента на большое количество пользователей, стоит делать так же: даже небольшой рост промахов по кэшу заметно увеличивает стоимость и задержку.
6. Для форков и компактации копируйте параметры родителя
Когда вы запускаете побочные вычисления:
- компактацию / суммаризацию диалога,
- исполнение отдельного навыка или сложной подзадачи,
используйте те же:
- системный промпт,
- пользовательский и системный контекст,
- список инструментов и их порядок.
Меняйте только последние сообщения. Тогда побочный запрос сможет использовать кэш родительской сессии.
Доступность Claude Code
Claude Code тесно связан с экосистемой Anthropic и доступен через их интерфейсы и API. Для пользователей из России прямой доступ к сервисам Anthropic может потребовать VPN и работы через зарубежные аккаунты и платёжные инструменты.
Место на рынке
Anthropic в этом материале не даёт прямых сравнений с конкурентами вроде GPT‑4o или других код‑агентов. Вместо этого она показывает архитектурный подход, который можно применить в любом стекe.
Что можно зафиксировать по факту:
- Claude Code изначально проектировали как долгоживущий агент с большими диалогами и сложным инструментарием.
- В таких сценариях стоимость и задержка сильно зависят от того, насколько эффективно вы переиспользуете уже отправленный контекст.
- Anthropic вкладывается не только в сами модели Claude 3, но и в инфраструктурные возможности API: prompt caching и встроенную компактацию.
Если вы строите аналог Claude Code на других моделях (например, на GPT‑серии от OpenAI), те же принципы всё равно работают: кэш по префиксу, стабильный порядок инструментов, отсутствие динамики в системном промпте, форки с общим префиксом.
Anthropic делает ставку на то, что грамотная работа с кэшем — обязательное условие для любых серьёзных агентных продуктов, а не только приятный бонус к снижению цены.
Выводы Anthropic
Команда Claude Code формулирует свои правила так:
- Кэш промптов — это префикс‑матч. Любое изменение в префиксе убивает всё, что идёт после. Нужна архитектура, построенная вокруг этого ограничения.
- Используйте сообщения вместо правки системного промпта. Вводите режимы и обновления контекста через диалог, а не через редактирование верхней части промпта.
- Не меняйте инструменты и модели в середине разговора. Состояния (например, Plan Mode) описывайте через инструменты и сообщения. Инструменты не удаляйте, а загрузку откладывайте.
- Мониторьте кэш как аптайм. Следите за hit rate, алертите на падения, относитесь к этому как к инциденту, а не к мелкой оптимизации.
- Форки должны делить префикс с родителем. Для компактации и побочных вычислений используйте те же параметры запроса, чтобы кэш работал и там.
Anthropic строит Claude Code вокруг кэширования промптов с первого дня и предлагает всем, кто делает своих агентов, начинать с тех же принципов.