cache_control
:
cache_control
. Это позволяет повторно использовать этот большой текст в нескольких вызовах API без повторной обработки каждый раз. Изменение только пользовательского сообщения позволяет задавать различные вопросы о книге, используя кешированное содержимое, что приводит к более быстрым ответам и повышенной эффективности.
Как работает кеширование промптов
Когда вы отправляете запрос с включенным кешированием промптов:- Система проверяет, кеширован ли уже префикс промпта до указанной контрольной точки кеша из недавнего запроса.
- Если найден, она использует кешированную версию, сокращая время обработки и затраты.
- В противном случае она обрабатывает полный промпт и кеширует префикс после начала ответа.
- Промптов с множеством примеров
- Больших объемов контекста или справочной информации
- Повторяющихся задач с постоянными инструкциями
- Длинных многоходовых разговоров
tools
, system
и messages
(в таком порядке) до и включая блок, обозначенный cache_control
.Ценообразование
Кеширование промптов вводит новую структуру ценообразования. В таблице ниже показана цена за миллион токенов для каждой поддерживаемой модели:Model | Base Input Tokens | 5m Cache Writes | 1h Cache Writes | Cache Hits & Refreshes | Output Tokens |
---|---|---|---|---|---|
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 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
Claude Sonnet 3.7 | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / MTok |
Claude Sonnet 3.5 (deprecated) | $3 / MTok | $3.75 / MTok | $6 / MTok | $0.30 / MTok | $15 / 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 |
- Токены записи 5-минутного кеша стоят в 1,25 раза больше базовой цены входных токенов
- Токены записи 1-часового кеша стоят в 2 раза больше базовой цены входных токенов
- Токены чтения кеша стоят в 0,1 раза меньше базовой цены входных токенов
Как реализовать кеширование промптов
Поддерживаемые модели
Кеширование промптов в настоящее время поддерживается на:- Claude Opus 4.1
- Claude Opus 4
- Claude Sonnet 4
- Claude Sonnet 3.7
- Claude Sonnet 3.5 (устарел)
- Claude Haiku 3.5
- Claude Haiku 3
- Claude Opus 3 (устарел)
Структурирование вашего промпта
Размещайте статическое содержимое (определения инструментов, системные инструкции, контекст, примеры) в начале вашего промпта. Отметьте конец повторно используемого содержимого для кеширования, используя параметрcache_control
.
Префиксы кеша создаются в следующем порядке: tools
, system
, затем messages
. Этот порядок образует иерархию, где каждый уровень строится на предыдущих.
Как работает автоматическая проверка префиксов
Вы можете использовать только одну контрольную точку кеша в конце вашего статического содержимого, и система автоматически найдет самый длинный совпадающий префикс. Вот как это работает:- Когда вы добавляете контрольную точку
cache_control
, система автоматически проверяет попадания в кеш на всех предыдущих границах блоков содержимого (до примерно 20 блоков перед вашей явной контрольной точкой) - Если любая из этих предыдущих позиций соответствует кешированному содержимому из более ранних запросов, система использует самый длинный совпадающий префикс
- Это означает, что вам не нужны множественные контрольные точки только для включения кеширования — одной в конце достаточно
Когда использовать множественные контрольные точки
Вы можете определить до 4 контрольных точек кеша, если хотите:- Кешировать различные разделы, которые изменяются с разной частотой (например, инструменты редко изменяются, но контекст обновляется ежедневно)
- Иметь больше контроля над тем, что именно кешируется
- Обеспечить кеширование для содержимого более чем на 20 блоков перед вашей финальной контрольной точкой
Ограничения кеша
Минимальная длина кешируемого промпта составляет:- 1024 токена для Claude Opus 4.1, Claude Opus 4, Claude Sonnet 4, Claude Sonnet 3.7, Claude Sonnet 3.5 (устарел) и Claude Opus 3 (устарел)
- 2048 токенов для Claude Haiku 3.5 и Claude Haiku 3
cache_control
. Любые запросы на кеширование менее этого количества токенов будут обработаны без кеширования. Чтобы увидеть, был ли промпт кеширован, см. поля использования ответа.
Для одновременных запросов обратите внимание, что запись кеша становится доступной только после начала первого ответа. Если вам нужны попадания в кеш для параллельных запросов, дождитесь первого ответа перед отправкой последующих запросов.
В настоящее время “ephemeral” является единственным поддерживаемым типом кеша, который по умолчанию имеет время жизни 5 минут.
Понимание затрат на контрольные точки кеша
Контрольные точки кеша сами по себе не добавляют никаких затрат. Вы платите только за:- Записи кеша: Когда новое содержимое записывается в кеш (на 25% больше базовых входных токенов для 5-минутного TTL)
- Чтения кеша: Когда используется кешированное содержимое (10% от базовой цены входных токенов)
- Обычные входные токены: Для любого некешированного содержимого
cache_control
не увеличивает ваши затраты — вы все равно платите ту же сумму на основе того, какое содержимое фактически кешируется и читается. Контрольные точки просто дают вам контроль над тем, какие разделы могут кешироваться независимо.
Что может быть кешировано
Большинство блоков в запросе могут быть обозначены для кеширования с помощьюcache_control
. Это включает:
- Инструменты: Определения инструментов в массиве
tools
- Системные сообщения: Блоки содержимого в массиве
system
- Текстовые сообщения: Блоки содержимого в массиве
messages.content
, как для пользовательских, так и для ассистентских ходов - Изображения и документы: Блоки содержимого в массиве
messages.content
, в пользовательских ходах - Использование инструментов и результаты инструментов: Блоки содержимого в массиве
messages.content
, как в пользовательских, так и в ассистентских ходах
cache_control
для включения кеширования для этой части запроса.
Что не может быть кешировано
Хотя большинство блоков запроса могут быть кешированы, есть некоторые исключения:-
Блоки размышлений не могут быть кешированы напрямую с помощью
cache_control
. Однако блоки размышлений МОГУТ быть кешированы вместе с другим содержимым, когда они появляются в предыдущих ходах ассистента. При кешировании таким образом они СЧИТАЮТСЯ как входные токены при чтении из кеша. - Подблоки содержимого (такие как цитаты) сами по себе не могут быть кешированы напрямую. Вместо этого кешируйте блок верхнего уровня. В случае цитат блоки содержимого документов верхнего уровня, которые служат исходным материалом для цитат, могут быть кешированы. Это позволяет эффективно использовать кеширование промптов с цитатами, кешируя документы, на которые будут ссылаться цитаты.
- Пустые текстовые блоки не могут быть кешированы.
Что аннулирует кеш
Изменения кешированного содержимого могут аннулировать часть или весь кеш. Как описано в Структурировании вашего промпта, кеш следует иерархии:tools
→ system
→ messages
. Изменения на каждом уровне аннулируют этот уровень и все последующие уровни.
Следующая таблица показывает, какие части кеша аннулируются различными типами изменений. ✘ указывает, что кеш аннулируется, а ✓ указывает, что кеш остается действительным.
Что изменяется | Кеш инструментов | Системный кеш | Кеш сообщений | Влияние |
---|---|---|---|---|
Определения инструментов | ✘ | ✘ | ✘ | Изменение определений инструментов (имена, описания, параметры) аннулирует весь кеш |
Переключатель веб-поиска | ✓ | ✘ | ✘ | Включение/отключение веб-поиска изменяет системный промпт |
Переключатель цитат | ✓ | ✘ | ✘ | Включение/отключение цитат изменяет системный промпт |
Выбор инструмента | ✓ | ✓ | ✘ | Изменения параметра tool_choice влияют только на блоки сообщений |
Изображения | ✓ | ✓ | ✘ | Добавление/удаление изображений где-либо в промпте влияет на блоки сообщений |
Параметры размышлений | ✓ | ✓ | ✘ | Изменения настроек расширенного размышления (включить/отключить, бюджет) влияют на блоки сообщений |
Результаты не-инструментов, переданные в запросы расширенного размышления | ✓ | ✓ | ✘ | Когда результаты не-инструментов передаются в запросы при включенном расширенном размышлении, все ранее кешированные блоки размышлений удаляются из контекста, и любые сообщения в контексте, которые следуют за этими блоками размышлений, удаляются из кеша. Для получения дополнительной информации см. Кеширование с блоками размышлений. |
Отслеживание производительности кеша
Отслеживайте производительность кеша, используя эти поля ответа API вusage
в ответе (или событии message_start
при потоковой передаче):
cache_creation_input_tokens
: Количество токенов, записанных в кеш при создании новой записи.cache_read_input_tokens
: Количество токенов, извлеченных из кеша для этого запроса.input_tokens
: Количество входных токенов, которые не были прочитаны из кеша или использованы для создания кеша.
Лучшие практики для эффективного кеширования
Для оптимизации производительности кеширования промптов:- Кешируйте стабильное, повторно используемое содержимое, такое как системные инструкции, справочная информация, большие контексты или частые определения инструментов.
- Размещайте кешированное содержимое в начале промпта для лучшей производительности.
- Используйте контрольные точки кеша стратегически для разделения различных кешируемых разделов префиксов.
- Регулярно анализируйте коэффициенты попаданий в кеш и корректируйте свою стратегию по мере необходимости.
Оптимизация для различных случаев использования
Адаптируйте свою стратегию кеширования промптов к вашему сценарию:- Разговорные агенты: Снижайте затраты и задержки для расширенных разговоров, особенно тех, которые содержат длинные инструкции или загруженные документы.
- Помощники по программированию: Улучшайте автодополнение и Q&A по кодовой базе, сохраняя соответствующие разделы или сводную версию кодовой базы в промпте.
- Обработка больших документов: Включайте полные длинные материалы, включая изображения, в ваш промпт без увеличения задержки ответа.
- Подробные наборы инструкций: Делитесь обширными списками инструкций, процедур и примеров для тонкой настройки ответов Claude. Разработчики часто включают пример или два в промпт, но с кешированием промптов вы можете получить еще лучшую производительность, включив 20+ разнообразных примеров высококачественных ответов.
- Агентное использование инструментов: Повышайте производительность для сценариев, включающих множественные вызовы инструментов и итеративные изменения кода, где каждый шаг обычно требует нового вызова API.
- Разговор с книгами, статьями, документацией, транскриптами подкастов и другим длинным содержимым: Оживите любую базу знаний, встроив весь документ(ы) в промпт и позволив пользователям задавать ему вопросы.
Устранение распространенных проблем
При возникновении неожиданного поведения:- Убедитесь, что кешированные разделы идентичны и отмечены cache_control в одних и тех же местах во всех вызовах
- Проверьте, что вызовы выполняются в пределах времени жизни кеша (по умолчанию 5 минут)
- Убедитесь, что
tool_choice
и использование изображений остаются постоянными между вызовами - Проверьте, что вы кешируете как минимум минимальное количество токенов
- Система автоматически проверяет попадания в кеш на предыдущих границах блоков содержимого (до ~20 блоков перед вашей контрольной точкой). Для промптов с более чем 20 блоками содержимого вам может потребоваться дополнительные параметры
cache_control
раньше в промпте, чтобы обеспечить кеширование всего содержимого
tool_choice
или наличие/отсутствие изображений где-либо в промпте аннулируют кеш, требуя создания новой записи кеша. Для получения дополнительной информации об аннулировании кеша см. Что аннулирует кеш.Кеширование с блоками размышлений
При использовании расширенного размышления с кешированием промптов блоки размышлений имеют особое поведение: Автоматическое кеширование вместе с другим содержимым: Хотя блоки размышлений не могут быть явно отмеченыcache_control
, они кешируются как часть содержимого запроса, когда вы делаете последующие вызовы API с результатами инструментов. Это обычно происходит во время использования инструментов, когда вы передаете блоки размышлений обратно для продолжения разговора.
Подсчет входных токенов: Когда блоки размышлений читаются из кеша, они считаются как входные токены в ваших метриках использования. Это важно для расчета затрат и бюджетирования токенов.
Паттерны аннулирования кеша:
- Кеш остается действительным, когда предоставляются только результаты инструментов как пользовательские сообщения
- Кеш аннулируется, когда добавляется содержимое пользователя, не являющееся результатом инструмента, что приводит к удалению всех предыдущих блоков размышлений
- Это поведение кеширования происходит даже без явных маркеров
cache_control
Хранение и совместное использование кеша
- Изоляция организации: Кеши изолированы между организациями. Разные организации никогда не делят кеши, даже если они используют идентичные промпты.
- Точное совпадение: Попадания в кеш требуют 100% идентичных сегментов промпта, включая весь текст и изображения до и включая блок, отмеченный контролем кеша.
- Генерация выходных токенов: Кеширование промптов не влияет на генерацию выходных токенов. Ответ, который вы получите, будет идентичен тому, что вы получили бы, если бы кеширование промптов не использовалось.
Продолжительность кеша 1 час
Если вы считаете, что 5 минут слишком мало, Anthropic также предлагает продолжительность кеша 1 час. Чтобы использовать расширенный кеш, включитеttl
в определение cache_control
следующим образом:
cache_creation_input_tokens
равно сумме значений в объекте cache_creation
.
Когда использовать 1-часовой кеш
Если у вас есть промпты, которые используются с регулярной частотой (т.е. системные промпты, которые используются чаще, чем каждые 5 минут), продолжайте использовать 5-минутный кеш, поскольку он будет продолжать обновляться без дополнительной платы. 1-часовой кеш лучше всего использовать в следующих сценариях:- Когда у вас есть промпты, которые, вероятно, используются реже, чем каждые 5 минут, но чаще, чем каждый час. Например, когда агентный побочный агент займет больше 5 минут, или при хранении длинного разговора с пользователем, и вы обычно ожидаете, что этот пользователь может не ответить в следующие 5 минут.
- Когда задержка важна, и ваши последующие промпты могут быть отправлены через 5 минут.
- Когда вы хотите улучшить использование вашего лимита скорости, поскольку попадания в кеш не вычитаются из вашего лимита скорости.
Смешивание различных TTL
Вы можете использовать как 1-часовые, так и 5-минутные контроли кеша в одном запросе, но с важным ограничением: Записи кеша с более длинным TTL должны появляться перед более короткими TTL (т.е. 1-часовая запись кеша должна появляться перед любыми 5-минутными записями кеша). При смешивании TTL мы определяем три места выставления счетов в вашем промпте:- Позиция
A
: Количество токенов при самом высоком попадании в кеш (или 0, если попаданий нет). - Позиция
B
: Количество токенов при самом высоком 1-часовом блокеcache_control
послеA
(или равноA
, если таких нет). - Позиция
C
: Количество токенов при последнем блокеcache_control
.
B
и/или C
больше A
, они обязательно будут промахами кеша, потому что A
— это самое высокое попадание в кеш.- Токены чтения кеша для
A
. - Токены записи 1-часового кеша для
(B - A)
. - Токены записи 5-минутного кеша для
(C - B)
.
Примеры кеширования промптов
Чтобы помочь вам начать работу с кешированием промптов, мы подготовили кулинарную книгу кеширования промптов с подробными примерами и лучшими практиками. Ниже мы включили несколько фрагментов кода, которые демонстрируют различные паттерны кеширования промптов. Эти примеры показывают, как реализовать кеширование в различных сценариях, помогая вам понять практические применения этой функции:Пример кеширования большого контекста
Пример кеширования большого контекста
input_tokens
: Количество токенов только в пользовательском сообщенииcache_creation_input_tokens
: Количество токенов во всем системном сообщении, включая юридический документcache_read_input_tokens
: 0 (нет попадания в кеш при первом запросе)
input_tokens
: Количество токенов только в пользовательском сообщенииcache_creation_input_tokens
: 0 (нет создания нового кеша)cache_read_input_tokens
: Количество токенов во всем кешированном системном сообщении
Кеширование определений инструментов
Кеширование определений инструментов
cache_control
размещается на финальном инструменте (get_time
) для обозначения всех инструментов как части статического префикса.Это означает, что все определения инструментов, включая get_weather
и любые другие инструменты, определенные перед get_time
, будут кешированы как единый префикс.Этот подход полезен, когда у вас есть постоянный набор инструментов, которые вы хотите повторно использовать в нескольких запросах без повторной обработки каждый раз.Для первого запроса:input_tokens
: Количество токенов в пользовательском сообщенииcache_creation_input_tokens
: Количество токенов во всех определениях инструментов и системном промптеcache_read_input_tokens
: 0 (нет попадания в кеш при первом запросе)
input_tokens
: Количество токенов в пользовательском сообщенииcache_creation_input_tokens
: 0 (нет создания нового кеша)cache_read_input_tokens
: Количество токенов во всех кешированных определениях инструментов и системном промпте
Продолжение многоходового разговора
Продолжение многоходового разговора
cache_control
, чтобы разговор мог инкрементально кешироваться. Система автоматически найдет и использует самый длинный ранее кешированный префикс для последующих сообщений. То есть блоки, которые ранее были отмечены блоком cache_control
, позже не отмечаются этим, но они все равно будут считаться попаданием в кеш (а также обновлением кеша!), если они попадают в течение 5 минут.Кроме того, обратите внимание, что параметр cache_control
размещается в системном сообщении. Это для обеспечения того, что если это будет исключено из кеша (после неиспользования более 5 минут), оно будет добавлено обратно в кеш при следующем запросе.Этот подход полезен для поддержания контекста в продолжающихся разговорах без повторной обработки той же информации.Когда это настроено правильно, вы должны увидеть следующее в ответе использования каждого запроса:input_tokens
: Количество токенов в новом пользовательском сообщении (будет минимальным)cache_creation_input_tokens
: Количество токенов в новых ходах ассистента и пользователяcache_read_input_tokens
: Количество токенов в разговоре до предыдущего хода
Объединение всего: Множественные контрольные точки кеша
Объединение всего: Множественные контрольные точки кеша
-
Кеш инструментов (контрольная точка кеша 1): Параметр
cache_control
на последнем определении инструмента кеширует все определения инструментов. - Кеш повторно используемых инструкций (контрольная точка кеша 2): Статические инструкции в системном промпте кешируются отдельно. Эти инструкции редко изменяются между запросами.
- Кеш RAG контекста (контрольная точка кеша 3): Документы базы знаний кешируются независимо, позволяя обновлять RAG документы без аннулирования кеша инструментов или инструкций.
-
Кеш истории разговора (контрольная точка кеша 4): Ответ ассистента отмечен
cache_control
для включения инкрементального кеширования разговора по мере его развития.
- Если вы обновляете только финальное пользовательское сообщение, все четыре сегмента кеша повторно используются
- Если вы обновляете RAG документы, но сохраняете те же инструменты и инструкции, первые два сегмента кеша повторно используются
- Если вы изменяете разговор, но сохраняете те же инструменты, инструкции и документы, первые три сегмента повторно используются
- Каждая контрольная точка кеша может быть аннулирована независимо в зависимости от того, что изменяется в вашем приложении
input_tokens
: Токены в финальном пользовательском сообщенииcache_creation_input_tokens
: Токены во всех кешированных сегментах (инструменты + инструкции + RAG документы + история разговора)cache_read_input_tokens
: 0 (нет попаданий в кеш)
input_tokens
: Токены только в новом пользовательском сообщенииcache_creation_input_tokens
: Любые новые токены, добавленные в историю разговораcache_read_input_tokens
: Все ранее кешированные токены (инструменты + инструкции + RAG документы + предыдущий разговор)
- RAG приложений с большими контекстами документов
- Агентных систем, которые используют множественные инструменты
- Длительных разговоров, которые нужно поддерживать в контексте
- Приложений, которые нужно оптимизировать различные части промпта независимо
FAQ
Нужны ли мне множественные контрольные точки кеша или достаточно одной в конце?
Нужны ли мне множественные контрольные точки кеша или достаточно одной в конце?
- У вас более 20 блоков содержимого перед желаемой точкой кеша
- Вы хотите кешировать разделы, которые обновляются с разной частотой, независимо
- Вам нужен явный контроль над тем, что кешируется для оптимизации затрат
Добавляют ли контрольные точки кеша дополнительные затраты?
Добавляют ли контрольные точки кеша дополнительные затраты?
- Запись содержимого в кеш (на 25% больше базовых входных токенов для 5-минутного TTL)
- Чтение из кеша (10% от базовой цены входных токенов)
- Обычные входные токены для некешированного содержимого
Каково время жизни кеша?
Каково время жизни кеша?
Сколько контрольных точек кеша я могу использовать?
Сколько контрольных точек кеша я могу использовать?
cache_control
) в вашем промпте.Доступно ли кеширование промптов для всех моделей?
Доступно ли кеширование промптов для всех моделей?
Как работает кеширование промптов с расширенным размышлением?
Как работает кеширование промптов с расширенным размышлением?
Как включить кеширование промптов?
Как включить кеширование промптов?
cache_control
в ваш API запрос.Могу ли я использовать кеширование промптов с другими функциями API?
Могу ли я использовать кеширование промптов с другими функциями API?
Как кеширование промптов влияет на ценообразование?
Как кеширование промптов влияет на ценообразование?
Могу ли я вручную очистить кеш?
Могу ли я вручную очистить кеш?
Как я могу отследить эффективность моей стратегии кеширования?
Как я могу отследить эффективность моей стратегии кеширования?
cache_creation_input_tokens
и cache_read_input_tokens
в ответе API.Что может нарушить кеш?
Что может нарушить кеш?
Как кеширование промптов обрабатывает конфиденциальность и разделение данных?
Как кеширование промптов обрабатывает конфиденциальность и разделение данных?
- Ключи кеша генерируются с использованием криптографического хеша промптов до точки контроля кеша. Это означает, что только запросы с идентичными промптами могут получить доступ к конкретному кешу.
- Кеши специфичны для организации. Пользователи в рамках одной организации могут получить доступ к одному кешу, если они используют идентичные промпты, но кеши не делятся между разными организациями, даже для идентичных промптов.
- Механизм кеширования разработан для поддержания целостности и конфиденциальности каждого уникального разговора или контекста.
-
Безопасно использовать
cache_control
где угодно в ваших промптах. Для экономической эффективности лучше исключать высоко вариативные части (например, произвольный ввод пользователя) из кеширования.
Могу ли я использовать кеширование промптов с Batches API?
Могу ли я использовать кеширование промптов с Batches API?
- Соберите набор запросов сообщений, которые имеют общий префикс.
- Отправьте пакетный запрос только с одним запросом, который имеет этот общий префикс и 1-часовой блок кеша. Это будет записано в 1-часовой кеш.
- Как только это завершится, отправьте остальные запросы. Вам придется отслеживать задание, чтобы знать, когда оно завершится.
Почему я вижу ошибку `AttributeError: 'Beta' object has no attribute 'prompt_caching'` в Python?
Почему я вижу ошибку `AttributeError: 'Beta' object has no attribute 'prompt_caching'` в Python?
Почему я вижу 'TypeError: Cannot read properties of undefined (reading 'messages')'?
Почему я вижу 'TypeError: Cannot read properties of undefined (reading 'messages')'?