cache_control к стабильному префиксу: при первом запросе будет создан кэш, а последующие запросы смогут прочитать его до истечения срока действия.
Перед началом работы задайте API-ключ:
В примерах этого руководства используется
claude-sonnet-5. Сведения о поддержке контекстного кэша другими моделями см. в описании моделей на платформе.Сценарии использования
Если в нескольких запросах многократно передаётся один и тот же большой фрагмент контента, можно кэшировать его стабильный префикс, например:- длинный system prompt
- неизменяемую базу знаний или документацию продукта
- стабильную историю сообщений в многошаговом диалоге
- многократно используемые кодовые базы, определения и описания инструментов
Claude Messages API
Кэш на 5 минут
Добавьтеcache_control в content block, который требуется кэшировать:
ttl не указан, по умолчанию срок действия кэша составляет 5 минут.
Кэш на 1 час
Чтобы использовать кэш на 1 час, добавьте заголовок запросаanthropic-beta и задайте для ttl значение 1h:
Поля использования в ответе
Claude Messages API раздельно возвращает вusage токены обычного ввода, записи в кэш и чтения из кэша:
cache_creation_input_tokens > 0. При повторной отправке того же стабильного префикса должно возвращаться cache_read_input_tokens > 0.
OpenAI-совместимый API
Пример запроса
При использовании кэша через/v1/chat/completions формат cache_control почти не отличается от Claude Messages API:
Кэш на 1 час
OpenAI-совместимый формат также поддерживает кэширование на 1 час. Добавьте в запрос заголовокanthropic-beta и задайте ttl: "1h" в cache_control:
content должен быть массивом
В OpenAI-совместимом формате cache_control должен находиться в конкретном content block. Его нельзя добавить к сообщению, в котором контент задан строкой.
Кэширование content block пользователя или ассистента
cache_control также можно добавить к content block в сообщении user или assistant, чтобы кэшировать длинный документ или префикс многошагового диалога:
cache_control только к стабильному content block.
Поля использования в ответе
В OpenAI-совместимом формате для данных об использовании кэша применяются другие поля:Если
prompt_tokens_details.cache_write_tokens равен 0, также проверьте claude_cache_creation_5_m_tokens и claude_cache_creation_1_h_tokens. При наличии полей с детализацией по TTL объём записи в кэш возвращается в соответствующем поле.В именах
claude_cache_creation_5_m_tokens и claude_cache_creation_1_h_tokens цифры и единицы разделены символами подчёркивания. Используйте имена полей в точности так, как они возвращены в ответе.Условия попадания в кэш
Префикс достигает минимальной длины
Для модели из примеров префикс кэша обычно должен содержать не менее примерно 1024 токенов. Если префикс слишком короткий, маркер кэша может быть проигнорирован без сообщения об ошибке.Префикс полностью совпадает на уровне байтов
Текст, пробелы, переводы строк и порядок content block в префиксе кэша должны совпадать. Не добавляйте в стабильный префикс отметки времени, случайные ID, счётчики запросов или другой динамический контент.Запрос не вызывает отказ модели
Если запрос вызывает отказ модели, в ответе всё равно могут быть указаны токены создания кэша, но при следующем запросе этот кэш не будет прочитан. При диагностике промаха кэша также проверьте, не равен лиstop_reason значению refusal.
Срок действия кэша не истёк
Срок действия кэша составляет 5 минут или 1 час и отсчитывается от последнего обращения. Попадание в кэш обновляет срок действия.Тарифицируемое использование
Использование кэша делится на три категории:
Эти три категории не пересекаются. Запись в кэш обычно стоит дороже обычного ввода, а чтение из кэша — дешевле. Поэтому контекстный кэш лучше всего подходит для стабильных префиксов, которые будут повторно использоваться в течение TTL.
Минимальный воспроизводимый пример
Следующий скрипт создаёт достаточно длинный стабильный префикс и дважды подряд отправляет один и тот же запрос. Во втором ответе должно возвращатьсяcache_read_input_tokens > 0.
Контрольный список для диагностики
Если запрос не попадает в кэш, проверьте по порядку:- равен ли
stop_reasonзначениюrefusal - достигает ли префикс кэша минимального количества токенов, требуемого моделью
- полностью ли совпадает стабильный префикс в двух запросах на уровне байтов
- является ли
contentмассивом в OpenAI-совместимом формате - находится ли
cache_controlв конкретном content block - заданы ли для 1-часового кэша одновременно
ttl: "1h"и соответствующий заголовок запросаanthropic-beta - не истёк ли TTL кэша
- используются ли поля данных о кэше, соответствующие текущему интерфейсу