Запись архива

Инфраструктура кеширования промптов в Anthropic Claude API: как сократить расходы до 75% и ускорить агентов

Разбор работы инфраструктуры кеширования промптов в Anthropic Claude API: как устроено переиспользование префиксов контекста, реальная экономия токенов до 75% при разработке автономных агентов и практические примеры интеграции в кодовую базу.

Схема работы кеширования промптов в Anthropic Claude API с графиками экономии токенов и задержек
Схема работы кеширования промптов в Anthropic Claude API с графиками экономии токенов и задержек
President of the United States Donald J. Trump at CPAC 2017 February 24th 2017 by, Michael Vadon 01.jpg | by Michael Vadon | wikimedia_commons | CC BY-SA 4.0

Разработка долгоживущих ИИ-агентов и сложных конвейеров на базе больших языковых моделей неизбежно упирается в ограничения контекстного окна и стоимость инференса. Когда агент в цикле выполняет десятки вызовов API, передавая объемные системные промпты, документацию репозитория или историю диалога, расходы на входные токены растут экспоненциально.

Инфраструктура кеширования промптов, реализованная в Anthropic Claude API, решает эту проблему на уровне серверной архитектуры инференса. Вместо того чтобы каждый раз заново обрабатывать миллионы токенов статического контекста, система сохраняет состояние промежуточных слоев внимания, позволяя повторно использовать готовые блоки. В этом материале разберем технические принципы работы механизма, реальные метрики экономии и сценарии внедрения кеширования в продакшн-системы.

Архитектура кеширования контекста в Claude API

Классический подход к вызову LLM через REST API предполагает передачу всего массива данных при каждом запросе. Сервер модели выполняет первичное вычисление весов внимания (attention keys and values) для каждого токена входной последовательности. При работе с объемными системными инструкциями или фреймворками вроде Model Context Protocol (MCP), где метаданные инструментов могут занимать десятки тысяч токенов, эти вычисления повторяются избыточно.

Механизм кеширования промптов в Claude позволяет явно указать контрольные точки (cache breakpoints) с помощью специального параметра `cache_control` в структуре сообщения. Когда запрос поступает на сервера Anthropic, система проверяет хэш переданного префикса. Если префикс совпадает с ранее закэшированным для данного аккаунта или сессии блоком, модель пропускает этап первичной обработки и загружает готовое состояние из оперативной памяти ускорителей.

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

Экономия токенов и метрики задержки

Финансовая и производительная выгода от внедрения кеширования промптов складывается из трех основных параметров: стоимости записи, стоимости чтения из кеша и сокращения времени генерации первого токена (Time to First Token, TTFT).

На момент релиза функции ценовая политика Anthropic для моделей семейства Claude 3.5 Sonnet и Claude 3 Opus организована таким образом, что запись нового блока в кеш требует небольшой надбавки к базовой стоимости входных токенов (обычно на 25% дороже стандартного ввода), однако чтение закэшированного блока обходится на 90% дешевле базового тарифа.

В сценариях агентской разработки, где один и тот же системный промпт размером 20 000 токенов и набор из 30 инструментов отправляются в модель по 50–100 раз за сессию отладки, математика выглядит следующим образом:

  • Без кеширования: 50 вызовов × 20 000 токенов = 1 000 000 оплаченных токенов ввода по полной стоимости.
  • С кешированием: 1 вызов записи (20 000 токенов по повышенному тарифу) + 49 вызовов чтения (по 20 000 токенов со скидкой 90%).

Итоговая экономия на объеме входных данных достигает 75–80% в зависимости от частоты обращений.

Помимо снижения затрат на API, инженеры получают кратное сокращение задержек. Обработка больших префиксов занимает существенную долю времени до выдачи первого ответа модели. Загрузка готового контекста из кеша сокращает TTFT на порядки, что критически важно для интерактивных сред разработки и голосовых или чат-агентов реального времени.

Практическая реализация в коде через Python SDK

Для активации кеширования в официальном Python SDK от Anthropic необходимо настроить параметр `cache_control` внутри блоков сообщений. Кешировать можно системные промпты, историю сообщений и определения инструментов (tools).

Ниже приведен пример корректной конфигурации запроса с использованием механизма кеширования для объемного системного контекста и списка инструментов:

python
import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
model=»claude-3-5-sonnet-20241022″,
max_tokens=1024,
system=[
{
«type»: «text»,
«text»: «Вы — автономный инженерный агент, управляющий кодовой базой репозитория. Ваша задача — анализировать баги, писать тесты и формировать патчи.»,
«cache_control»: {«type»: «ephemeral»}
}
],
messages=[
{
«role»: «user»,
«content»: «Проанализируй состояние модуля авторизации и найди уязвимости в обработке JWT.»
}
],
tools=[
{
«name»: «run_terminal_command»,
«description»: «Выполнение безопасных команд в изолированном контейнере»,
«input_schema»: {
«type»: «object»,
«properties»: {
«command»: {«type»: «string»}
},
«required»: [«command»]
},
«cache_control»: {«type»: «ephemeral»}
}
]
)

print(response.content)
print(f»Использование токенов: {response.usage}»)

В ответе API возвращает детализированную статистику использования токенов, включая поля `cache_creation_input_tokens` (объем данных, записанных в кеш при первом запросе) и `cache_read_input_tokens` (объем данных, успешно прочитанных из кеша при последующих вызовах). Мониторинг этих метрик позволяет контролировать эффективность архитектуры и вовремя выявлять случаи инвалидации кеша.

Ограничения и правила проектирования контекста

Несмотря на высокую эффективность, интеграция кеширования требует соблюдения строгих архитектурных ограничений, без которых система будет работать неэффективно:

  • Минимальный объем блока. API Anthropic накладывает ограничения на минимальный размер префикса, который имеет смысл кешировать (для Claude 3.5 Sonnet порог составляет от 1024 токенов). Передача слишком коротких инструкций с флагом `cache_control` вызовет ошибку валидации или не принесет прироста производительности.
  • Порядок элементов. Блоки контекста должны быть организованы от статического к динамическому. Все неизменяемые данные (системный промпт, документация, схемы базы данных, статические инструменты) размещаются в начале и закрываются меткой кеша. Динамическая часть (текущая история диалога, новые сообщения пользователя) располагается в самом конце запроса.
  • Время жизни кеша (TTL). Закэшированные блоки хранятся в памяти серверов ограниченное время (обычно до 5 минут с момента последнего обращения). Каждое новое успешное чтение автоматически продлевает срок жизни кеша. Для долгоиграющих агентов это означает, что пауза между запросами более чем на 5 минут приведет к сбросу кеша и необходимости повторной записи при следующем вызове.

Архитектурные паттерны для агентских систем

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

Для обхода этого ограничения рекомендуется разделять инструменты на два пула:

  • Базовый пул (файловые операции, поиск по коду, чтение логов), который используется постоянно и фиксируется в начале списка с активным кешированием.
  • Периферийный пул специализированных утилит, которые подключаются точечно и не попадают в зону статического кеша.

Такой подход позволяет удерживать коэффициент попадания в кеш (Cache Hit Rate) на уровне выше 90% даже в сложных автономных сценариях, существенно снижая общие затраты на инфраструктуру LLM-инференса и ускоряя реакцию агентов.

Сравнение с конкурентами: кеширование в OpenAI и Google Gemini

Для объективной оценки возможностей Anthropic Claude API полезно сравнить его механизм кеширования с аналогами от других провайдеров LLM:

Параметр Anthropic Claude API OpenAI (GPT-4 Turbo) Google Gemini API
Тип кеширования Префиксное (явные breakpoints) Неявное (автоматическое) Префиксное (контекстное)
Минимальный размер кеша 1024 токенов Нет явного порога 512 токенов
Время жизни кеша (TTL) 5 минут До 1 часа 10 минут
Стоимость записи +25% к базовому тарифу Бесплатно +10% к базовому тарифу
Скидка при чтении 90% 50% 80%
Поддержка инструментов Да (через cache_control) Нет Да (через context caching)

Как видно из таблицы, Anthropic предлагает самую агрессивную скидку на чтение из кеша (90%), что делает его наиболее выгодным для сценариев с высокой частотой повторяющихся запросов. Однако OpenAI выигрывает по времени жизни кеша (до 1 часа), что удобно для долгих сессий без активных обращений.

Проверка и следующие шаги

Перед внедрением кеширования в продакшн-контур рекомендуется выполнить следующие проверки:

Проанализируйте текущую структуру ваших системных промптов и выделите статическую часть объемом более 1000 токенов.
2. Настройте логирование полей `cache_read_input_tokens` и `cache_creation_input_tokens` в middleware вашего приложения для аудита реального потребления.
3. Убедитесь, что логика формирования запросов не добавляет динамические таймстампы или случайные идентификаторы в начало статического префикса.
4. Проверьте, что время между вызовами не превышает 5 минут для сохранения кеша. Если агент работает асинхронно с длительными паузами, рассмотрите возможность группировки запросов в пакеты.

Практический пример расчета экономии: если ваш агент делает 100 вызовов в день с системным промптом на 15 000 токенов, стоимость без кеширования составит 1 500 000 входных токенов × $3 за миллион = $4.50. С кешированием: 1 запись (15 000 × $3.75 = $0.056) + 99 чтений (15 000 × $0.30 = $0.045 за чтение, итого $4.455) = $4.511. Экономия — 0%? Нет, потому что запись дешевле чтения в этом примере? Пересчитаем: запись 15 000 токенов по $3.75/млн = $0.056, чтение 15 000 токенов по $0.30/млн = $0.0045. Итого: $0.056 + 99 × $0.0045 = $0.056 + $0.4455 = $0.5015. Без кеша: 100 × 15 000 × $3/млн = $4.50. Экономия: ($4.50 — $0.50) / $4.50 × 100% = 88.9%. Это подтверждает заявленные 75-80% и показывает, что при высокой частоте вызовов экономия может превышать 85%.

Источники: docs.anthropic.com, github.com/anthropics/anthropic-sdk-python, anthropic.com, anthropic.com.