Кэширование промптов оптимизирует использование API, позволяя возобновлять работу с определённых префиксов в ваших промптах. Это значительно сокращает время обработки и затраты для повторяющихся задач или промптов с постоянными элементами.
This feature qualifies for Zero Data Retention (ZDR) with limited technical retention. See the Data retention section for details on what is retained and why.
Существует два способа включить кэширование промптов:
cache_control на верхнем уровне вашего запроса. Система автоматически применяет точку кэширования к последнему кэшируемому блоку и перемещает её вперёд по мере роста разговора. Лучше всего подходит для многоходовых разговоров, где растущая история сообщений должна кэшироваться автоматически.cache_control непосредственно на отдельных блоках контента для точного контроля над тем, что именно кэшируется.Самый простой способ начать — использовать автоматическое кэширование:
curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-opus-4-6",
"max_tokens": 1024,
"cache_control": {"type": "ephemeral"},
"system": "You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.",
"messages": [
{
"role": "user",
"content": "Analyze the major themes in Pride and Prejudice."
}
]
}'При автоматическом кэшировании система кэширует весь контент вплоть до последнего кэшируемого блока включительно. При последующих запросах с тем же префиксом кэшированный контент используется автоматически.
Когда вы отправляете запрос с включённым кэшированием промптов:
Это особенно полезно для:
По умолчанию кэш имеет время жизни 5 минут. Кэш обновляется без дополнительной платы каждый раз, когда используется кэшированный контент.
Если 5 минут недостаточно, Anthropic также предлагает кэш с продолжительностью 1 час за дополнительную плату.
Для получения дополнительной информации см. Кэш на 1 час.
Кэширование промптов кэширует полный префикс
Кэширование промптов ссылается на весь промпт — tools, system и messages (в таком порядке) вплоть до блока, обозначенного cache_control включительно.
Кэширование промптов вводит новую структуру ценообразования. В таблице ниже показана цена за миллион токенов для каждой поддерживаемой модели:
| Model | Base Input Tokens | 5m Cache Writes | 1h Cache Writes | Cache Hits & Refreshes | Output Tokens |
|---|---|---|---|---|---|
| Claude Opus 4.6 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.5 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / MTok |
| Claude Opus 4.1 | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
| Claude Opus 4 | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
| Claude Sonnet 4.6 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Sonnet 4.5 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Sonnet 4 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Sonnet 3.7 (deprecated) | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
| Claude Haiku 4.5 | $1 / MTok | $1.25 / MTok | $2 / MTok | $0.10 / MTok | $5 / MTok |
| Claude Haiku 3.5 | $0.80 / MTok | $1 / MTok | $1.6 / MTok | $0.08 / MTok | $4 / MTok |
| Claude Opus 3 (deprecated) | $15 / MTok | $18.75 / MTok | $30 / MTok | $1.50 / MTok | $75 / MTok |
| Claude Haiku 3 | $0.25 / MTok | $0.30 / MTok | $0.50 / MTok | $0.03 / MTok | $1.25 / MTok |
Таблица выше отражает следующие множители ценообразования для кэширования промптов:
Эти множители суммируются с другими модификаторами ценообразования, такими как скидка Batch API, ценообразование для длинного контекста и резидентность данных. Полные сведения см. в разделе ценообразование.
Кэширование промптов (как автоматическое, так и явное) в настоящее время поддерживается на:
Автоматическое кэширование — это самый простой способ включить кэширование промптов. Вместо того чтобы размещать cache_control на отдельных блоках контента, добавьте одно поле cache_control на верхнем уровне тела запроса. Система автоматически применяет точку кэширования к последнему кэшируемому блоку.
curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-opus-4-6",
"max_tokens": 1024,
"cache_control": {"type": "ephemeral"},
"system": "You are a helpful assistant that remembers our conversation.",
"messages": [
{"role": "user", "content": "My name is Alex. I work on machine learning."},
{"role": "assistant", "content": "Nice to meet you, Alex! How can I help with your ML work today?"},
{"role": "user", "content": "What did I say I work on?"}
]
}'При автоматическом кэшировании точка кэширования автоматически перемещается вперёд по мере роста разговора. Каждый новый запрос кэширует всё вплоть до последнего кэшируемого блока, а предыдущий контент считывается из кэша.
| Запрос | Контент | Поведение кэша |
|---|---|---|
| Запрос 1 | System + User(1) + Asst(1) + User(2) ◀ кэш | Всё записывается в кэш |
| Запрос 2 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) ◀ кэш | System до User(2) считывается из кэша; Asst(2) + User(3) записываются в кэш |
| Запрос 3 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) + Asst(3) + User(4) ◀ кэш | System до User(3) считывается из кэша; Asst(3) + User(4) записываются в кэш |
Точка кэширования автоматически перемещается к последнему кэшируемому блоку в каждом запросе, поэтому вам не нужно обновлять маркеры cache_control по мере роста разговора.
По умолчанию автоматическое кэширование использует TTL 5 минут. Вы можете указать TTL 1 час по цене 2x от базовой цены входных токенов:
"cache_control": {"type": "ephemeral", "ttl": "1h"}Автоматическое кэширование совместимо с явными точками кэширования. При совместном использовании автоматическая точка кэширования использует один из 4 доступных слотов точек кэширования.
Это позволяет комбинировать оба подхода. Например, используйте явные точки кэширования для независимого кэширования системного промпта и инструментов, а автоматическое кэширование — для разговора:
{
"model": "claude-opus-4-6",
"max_tokens": 1024,
"cache_control": {"type": "ephemeral"},
"system": [
{
"type": "text",
"text": "You are a helpful assistant.",
"cache_control": {"type": "ephemeral"}
}
],
"messages": [...]
}Автоматическое кэширование использует ту же базовую инфраструктуру кэширования. Ценообразование, минимальные пороги токенов, требования к порядку контекста и окно просмотра назад в 20 блоков применяются так же, как и при явных точках кэширования.
cache_control с тем же TTL, автоматическое кэширование не выполняет никаких действий.cache_control с другим TTL, API возвращает ошибку 400.Автоматическое кэширование доступно в Claude API и Azure AI Foundry (предварительная версия). Поддержка Amazon Bedrock и Google Vertex AI появится позже.
Для более точного контроля над кэшированием вы можете размещать cache_control непосредственно на отдельных блоках контента. Это полезно, когда вам нужно кэшировать разные разделы, которые изменяются с разной частотой, или когда требуется точный контроль над тем, что именно кэшируется.
Размещайте статический контент (определения инструментов, системные инструкции, контекст, примеры) в начале промпта. Отмечайте конец повторно используемого контента для кэширования с помощью параметра cache_control.
Префиксы кэша создаются в следующем порядке: tools, system, затем messages. Этот порядок формирует иерархию, где каждый уровень строится на предыдущих.
Вы можете использовать всего одну точку кэширования в конце статического контента, и система автоматически найдёт наиболее длинную совпадающую последовательность кэшированных блоков. Понимание того, как это работает, поможет вам оптимизировать стратегию кэширования.
Три основных принципа:
Ключи кэша накопительны: Когда вы явно кэшируете блок с помощью cache_control, хэш-ключ кэша генерируется путём последовательного хэширования всех предыдущих блоков в разговоре. Это означает, что кэш каждого блока зависит от всего контента, предшествующего ему.
Обратная последовательная проверка: Система проверяет попадания в кэш, двигаясь назад от явной точки кэширования, проверяя каждый предыдущий блок в обратном порядке. Это гарантирует получение максимально длинного попадания в кэш.
Окно просмотра назад в 20 блоков: Система проверяет не более 20 блоков перед каждой явной точкой cache_control. После проверки 20 блоков без совпадения она прекращает проверку и переходит к следующей явной точке кэширования (если есть).
Пример: Понимание окна просмотра назад
Рассмотрим разговор из 30 блоков контента, где вы устанавливаете cache_control только на блоке 30:
Если вы отправляете блок 31 без изменений в предыдущих блоках: Система проверяет блок 30 (совпадение!). Вы получаете попадание в кэш на блоке 30, и только блок 31 требует обработки.
Если вы изменяете блок 25 и отправляете блок 31: Система проверяет в обратном порядке от блока 30 → 29 → 28... → 25 (нет совпадения) → 24 (совпадение!). Поскольку блок 24 не изменился, вы получаете попадание в кэш на блоке 24, и только блоки 25-30 требуют повторной обработки.
Если вы изменяете блок 5 и отправляете блок 31: Система проверяет в обратном порядке от блока 30 → 29 → 28... → 11 (проверка №20). После 20 проверок без совпадения она прекращает поиск. Поскольку блок 5 находится за пределами окна в 20 блоков, попадания в кэш не происходит, и все блоки требуют повторной обработки. Однако если бы вы установили явную точку cache_control на блоке 5, система продолжила бы проверку с этой точки: блок 5 (нет совпадения) → блок 4 (совпадение!). Это позволяет получить попадание в кэш на блоке 4, демонстрируя, почему следует размещать точки кэширования перед редактируемым контентом.
Ключевой вывод: Всегда устанавливайте явную точку кэширования в конце разговора, чтобы максимизировать шансы на попадание в кэш. Кроме того, устанавливайте точки кэширования непосредственно перед блоками контента, которые могут быть отредактированы, чтобы эти разделы можно было кэшировать независимо.
Вы можете определить до 4 точек кэширования, если хотите:
Важное ограничение: Если в вашем промпте более 20 блоков контента перед точкой кэширования, и вы изменяете контент раньше этих 20 блоков, вы не получите попадания в кэш, если не добавите дополнительные явные точки кэширования ближе к этому контенту.
Сами точки кэширования не добавляют никаких затрат. Вы платите только за:
Добавление большего количества точек cache_control не увеличивает ваши затраты — вы по-прежнему платите одинаковую сумму в зависимости от того, какой контент фактически кэшируется и считывается. Точки кэширования просто дают вам контроль над тем, какие разделы можно кэшировать независимо.
Минимальная длина кэшируемого промпта составляет:
Более короткие промпты не могут быть кэшированы, даже если они отмечены cache_control. Любые запросы на кэширование менее этого количества токенов будут обработаны без кэширования. Чтобы узнать, был ли промпт кэширован, см. поля использования в ответе.
Для параллельных запросов обратите внимание, что запись в кэш становится доступной только после начала первого ответа. Если вам нужны попадания в кэш для параллельных запросов, дождитесь первого ответа перед отправкой последующих запросов.
В настоящее время "ephemeral" — единственный поддерживаемый тип кэша, который по умолчанию имеет время жизни 5 минут.
Большинство блоков в запросе можно кэшировать. Это включает:
toolssystemmessages.content, как для пользовательских, так и для ассистентских ходовmessages.content, в пользовательских ходахmessages.content, как в пользовательских, так и в ассистентских ходахКаждый из этих элементов может быть кэширован — автоматически или путём отметки cache_control.
Хотя большинство блоков запроса можно кэшировать, есть некоторые исключения:
Блоки thinking не могут быть напрямую кэшированы с помощью cache_control. Однако блоки thinking МОГУТ кэшироваться вместе с другим контентом, когда они появляются в предыдущих ходах ассистента. При таком кэшировании они УЧИТЫВАЮТСЯ как входные токены при чтении из кэша.
Вложенные блоки контента (например, цитаты) сами по себе не могут быть напрямую кэшированы. Вместо этого кэшируйте блок верхнего уровня.
В случае цитат блоки контента документов верхнего уровня, служащие исходным материалом для цитат, могут быть кэшированы. Это позволяет эффективно использовать кэширование промптов с цитатами путём кэширования документов, на которые будут ссылаться цитаты.
Пустые текстовые блоки не могут быть кэшированы.
Изменения кэшированного контента могут инвалидировать часть или весь кэш.
Как описано в разделе Структурирование промпта, кэш следует иерархии: tools → system → messages. Изменения на каждом уровне инвалидируют этот уровень и все последующие.
В следующей таблице показано, какие части кэша инвалидируются при различных типах изменений. ✘ означает, что кэш инвалидирован, а ✓ означает, что кэш остаётся действительным.
| Что изменяется | Кэш tools | Кэш system | Кэш messages | Влияние |
|---|---|---|---|---|
| Определения инструментов | ✘ | ✘ | ✘ | Изменение определений инструментов (имён, описаний, параметров) инвалидирует весь кэш |
| Переключение веб-поиска | ✓ | ✘ | ✘ | Включение/отключение веб-поиска изменяет системный промпт |
| Переключение цитат | ✓ | ✘ | ✘ | Включение/отключение цитат изменяет системный промпт |
| Настройка скорости | ✓ | ✘ | ✘ | Переключение между speed: "fast" и стандартной скоростью инвалидирует кэши system и messages |
| Выбор инструмента | ✓ | ✓ | ✘ | Изменения параметра tool_choice влияют только на блоки messages |
| Изображения | ✓ | ✓ | ✘ | Добавление/удаление изображений в любом месте промпта влияет на блоки messages |
| Параметры thinking | ✓ | ✓ | ✘ | Изменения настроек расширенного thinking (включение/отключение, бюджет) влияют на блоки messages |
| Результаты не-инструментов, переданные в запросы с расширенным thinking | ✓ | ✓ | ✘ | Когда результаты не-инструментов передаются в запросах при включённом расширенном thinking, все ранее кэшированные блоки thinking удаляются из контекста, а все сообщения в контексте, следующие за этими блоками thinking, удаляются из кэша. Подробнее см. в разделе Кэширование с блоками thinking. |
Отслеживайте производительность кэша с помощью этих полей ответа API в usage в ответе (или событии message_start при потоковой передаче):
cache_creation_input_tokens: Количество токенов, записанных в кэш при создании новой записи.cache_read_input_tokens: Количество токенов, полученных из кэша для этого запроса.input_tokens: Количество входных токенов, которые не были прочитаны из кэша или использованы для его создания (то есть токены после последней точки кэширования).Понимание разбивки токенов
Поле input_tokens представляет только токены, которые идут после последней точки кэширования в вашем запросе — не все входные токены, которые вы отправили.
Для расчёта общего количества входных токенов:
total_input_tokens = cache_read_input_tokens + cache_creation_input_tokens + input_tokensПространственное объяснение:
cache_read_input_tokens = токены до точки кэширования, уже кэшированные (чтения)cache_creation_input_tokens = токены до точки кэширования, кэшируемые сейчас (записи)input_tokens = токены после вашей последней точки кэширования (не подходят для кэша)Пример: Если у вас есть запрос со 100 000 токенов кэшированного контента (прочитанного из кэша), 0 токенов нового кэшируемого контента и 50 токенами в пользовательском сообщении (после точки кэширования):
cache_read_input_tokens: 100 000cache_creation_input_tokens: 0input_tokens: 50Это важно для понимания как затрат, так и ограничений скорости, поскольку input_tokens обычно будет значительно меньше общего количества входных токенов при эффективном использовании кэширования.
При использовании расширенного thinking с кэшированием промптов блоки thinking имеют особое поведение:
Автоматическое кэширование вместе с другим контентом: Хотя блоки thinking не могут быть явно отмечены cache_control, они кэшируются как часть контента запроса при последующих вызовах API с результатами инструментов. Это обычно происходит при использовании инструментов, когда вы передаёте блоки thinking обратно для продолжения разговора.
Подсчёт входных токенов: Когда блоки thinking считываются из кэша, они учитываются как входные токены в метриках использования. Это важно для расчёта затрат и планирования бюджета токенов.
Паттерны инвалидации кэша:
cache_controlПодробнее об инвалидации кэша см. в разделе Что инвалидирует кэш.
Пример с использованием инструментов:
Request 1: User: "What's the weather in Paris?"
Response: [thinking_block_1] + [tool_use block 1]
Request 2:
User: ["What's the weather in Paris?"],
Assistant: [thinking_block_1] + [tool_use block 1],
User: [tool_result_1, cache=True]
Response: [thinking_block_2] + [text block 2]
# Request 2 caches its request content (not the response)
# The cache includes: user message, thinking_block_1, tool_use block 1, and tool_result_1
Request 3:
User: ["What's the weather in Paris?"],
Assistant: [thinking_block_1] + [tool_use block 1],
User: [tool_result_1, cache=True],
Assistant: [thinking_block_2] + [text block 2],
User: [Text response, cache=True]
# Non-tool-result user block causes all thinking blocks to be ignored
# This request is processed as if thinking blocks were never presentКогда включён блок пользователя, не являющийся результатом инструмента, он обозначает новый цикл ассистента, и все предыдущие блоки thinking удаляются из контекста.
Для получения более подробной информации см. документацию по расширенному thinking.
Начиная с 5 февраля 2026 года, кэширование промптов будет использовать изоляцию на уровне рабочего пространства вместо изоляции на уровне организации. Кэши будут изолированы по рабочим пространствам, обеспечивая разделение данных между рабочими пространствами в одной организации. Это изменение применяется к Claude API и Azure AI Foundry (предварительная версия); Amazon Bedrock и Google Vertex AI сохранят изоляцию кэша на уровне организации. Если вы используете несколько рабочих пространств, пересмотрите свою стратегию кэширования с учётом этого изменения.
Изоляция организаций: Кэши изолированы между организациями. Разные организации никогда не используют общие кэши, даже если они используют идентичные промпты.
Точное совпадение: Попадания в кэш требуют 100% идентичных сегментов промпта, включая весь текст и изображения вплоть до блока, отмеченного cache control включительно.
Генерация выходных токенов: Кэширование промптов не влияет на генерацию выходных токенов. Ответ, который вы получите, будет идентичен тому, который вы получили бы без использования кэширования промптов.
Для оптимизации производительности кэширования промптов:
Адаптируйте стратегию кэширования промптов к вашему сценарию:
При возникновении неожиданного поведения:
cache_control находятся в одних и тех же местахtool_choice и использование изображений остаются неизменными между вызовамиcache_control раньше в промпте, чтобы обеспечить кэширование всего контентаtool_use имеют стабильный порядок, поскольку некоторые языки (например, Swift, Go) рандомизируют порядок ключей при преобразовании JSON, что нарушает кэшиИзменения tool_choice или наличие/отсутствие изображений в любом месте промпта инвалидируют кэш, требуя создания новой записи кэша. Подробнее об инвалидации кэша см. в разделе Что инвалидирует кэш.
Если 5 минут недостаточно, Anthropic также предлагает кэш с продолжительностью 1 час за дополнительную плату.
Чтобы использовать расширенный кэш, включите ttl в определение cache_control следующим образом:
"cache_control": {
"type": "ephemeral",
"ttl": "1h"
}Ответ будет содержать подробную информацию о кэше, как показано ниже:
{
"usage": {
"input_tokens": 2048,
"cache_read_input_tokens": 1800,
"cache_creation_input_tokens": 248,
"output_tokens": 503,
"cache_creation": {
"ephemeral_5m_input_tokens": 456,
"ephemeral_1h_input_tokens": 100
}
}
}Обратите внимание, что текущее поле cache_creation_input_tokens равно сумме значений в объекте cache_creation.
Если у вас есть промпты, которые используются с регулярной периодичностью (то есть системные промпты, используемые чаще чем каждые 5 минут), продолжайте использовать кэш на 5 минут, поскольку он будет продолжать обновляться без дополнительной платы.
Кэш на 1 час лучше всего использовать в следующих сценариях:
Кэш на 5 минут и кэш на 1 час ведут себя одинаково с точки зрения задержки. Как правило, вы увидите улучшенное время до первого токена для длинных документов.
Вы можете использовать как кэш на 1 час, так и на 5 минут в одном запросе, но с важным ограничением: записи кэша с более длительным TTL должны появляться перед более короткими TTL (то есть запись кэша на 1 час должна появляться перед любыми записями кэша на 5 минут).
При смешивании TTL мы определяем три позиции выставления счёта в вашем промпте:
A: Количество токенов при наибольшем попадании в кэш (или 0, если попаданий нет).B: Количество токенов при наибольшем блоке cache_control на 1 час после A (или равно A, если таких нет).C: Количество токенов при последнем блоке cache_control.Если B и/или C больше A, они обязательно будут промахами кэша, поскольку A является наибольшим попаданием в кэш.
Вам будет выставлен счёт за:
A.(B - A).(C - B).Вот 3 примера. На них изображены входные токены 3 запросов, каждый из которых имеет разные попадания и промахи кэша. Каждый имеет разное рассчитанное ценообразование, показанное в цветных блоках.
Чтобы помочь вам начать работу с кэшированием промптов, мы подготовили кулинарную книгу по кэшированию промптов с подробными примерами и рекомендациями.
Ниже мы привели несколько фрагментов кода, демонстрирующих различные паттерны кэширования промптов. Эти примеры показывают, как реализовать кэширование в различных сценариях, помогая вам понять практическое применение этой функции:
Кэширование запросов сохраняет KV (ключ-значение) кэш-представления и криптографические хэши кэшированного содержимого, но не хранит исходный текст запросов или ответов. Кэшированные записи имеют минимальное время жизни 5 минут (стандартное) или 60 минут (расширенное). Кэш-записи изолированы между организациями. Поскольку Anthropic не хранит исходный текст запросов или ответов, эта функция может подходить для клиентов, которым требуются обязательства по хранению данных типа ZDR.
Для получения информации о соответствии требованиям ZDR по всем функциям см. API и хранение данных.
Was this page helpful?