Перейти к основному содержанию
Если вы используете Claude Code, Cline, Cursor или самостоятельно пишете собственные вызовы Claude API, кэширование промптов — самый важный рычаг для снижения тарификации — кэшированные input tokens тарифицируются всего по 0.1×, со скидкой 90%. Эта страница основана на официальной документации Anthropic (platform.claude.com/docs/en/build-with-claude/prompt-caching) и адаптирована под конфигурацию APIYI с примерами, готовыми для копирования и вставки.

В одном предложении

Пометьте длинный, повторно используемый префикс prompt (системные инструкции / длинный документ / few-shot примеры) с помощью cache_control. Сервер сохраняет его; при следующем запросе с тем же префиксом он пропускает повторную обработку — примерно в 10× дешевле и быстрее. Он истекает после периода неактивности.

Зачем это нужно — обратите внимание на коэффициенты

Относительно базовой цены входного token модели (1×): Точки безубыточности:
  • TTL 5 мин: достаточно всего 2 повторных использований одного и того же префикса, чтобы окупить затраты (1.25 + 0.1 = 1.35, что дешевле 2.0 для двух запросов без кэша).
  • TTL 1 час: 3 повторных использования для выхода на окупаемость (2 + 0.2 = 2.2, что дешевле 3.0).
TTL — это скользящее окно: каждое попадание в кэш сбрасывает таймер истечения срока действия, поэтому активные диалоги не сбросятся в процессе работы. Удаление из кэша происходит только при реальном простое, превышающем TTL.

Когда подходит

  • Один и тот же длинный системный prompt, вызываемый многократно (агенты, чат-боты)
  • Многоэтапные диалоги (каждая предыдущая реплика становится повторно используемым префиксом)
  • Пакетная обработка одного документа (например, 50 вопросов к одному договору)
  • RAG, где неизменные извлеченные фрагменты формируют префикс

Когда не подходит

  • Каждый prompt отличается с самого первого символа
  • Весь объём слишком мал и не достигает минимального порога для модели (см. ниже)
  • Чат-клиенты, которые заново собирают прикрепленные файлы на каждой реплике (см. «Изображения и файлы тоже кэшируются» ниже)

Три обязательных требования

Все три обязательны.

1. Явный маркер cache_control

content не может быть обычной строкой. Это должен быть массив блоков содержимого, а кэшируемый блок должен содержать cache_control:

2. Длина должна превышать минимальное значение для модели

Если содержимое короче минимального значения для модели, оно не будет кэшироваться даже с маркером (ошибки не возникнет — содержимое просто будет молча пропущено). Проверено по официальной документации Anthropic:
Этот порог не уменьшается монотонно с увеличением номера версии — не пытайтесь угадать его. Самые неочевидные пары: Opus 5 требуется всего 512, тогда как более старым Opus 4.6 / 4.5 требуется 4,096 — разница в 8 раз. Для Haiku 4.5 также требуется 4,096, что больше, чем для более старой Haiku 3.5 (2,048). Поэтому не работают ни правило «у более новых моделей пороги ниже», ни правило «у меньших моделей пороги ниже». Проверяйте таблицу при каждой смене модели.
В английском тексте в среднем примерно 0,75 слова на один token. На практике: для Opus 5 кэширование начинается примерно со 380+ слов стабильного содержимого, для Sonnet 5 / Sonnet 4.6 требуется около 770 слов, а для Opus 4.6 / Haiku 4.5 — примерно 3 000 слов, прежде чем кэширование начнёт работать. Всегда сверяйтесь с официальной документацией Anthropic, чтобы узнать актуальные пороги — они могут меняться между версиями моделей.
Измерено в APIYI (2026-07-29). Мы проверили порог записи, постепенно увеличивая размер фиксированного префикса: claude-opus-5 не вызвало записи в кэш при 301 token, но вызвало её при 614, что ограничивает официальный порог 512; claude-sonnet-5 не вызвало записи при 612, но вызвало её при 1 250, что ограничивает официальный порог 1 024. Оба результата соответствуют приведённой выше таблице.

3. Префикс должен побайтно совпадать

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

Минимальный запускаемый пример

Отправьте два запроса, используя один и тот же длинный документ, но разные вопросы. Первый записывает, второй попадает в кэш:
Ожидаемый вывод:
У второго вызова read ≈ у первого вызова write — тот же префикс используется повторно.

Как определить попадание в кэш — три поля usage

В каждом ответе usage сообщает: Общее количество входных tokens = сумма всех трех. Пока cache_read_input_tokens > 0, вы экономите деньги.
Очень полезная самопроверка: при реальном попадании в кэш cache_read_input_tokens текущего шага в точности равно cache_creation_input_tokens предыдущего шага — все, что поступило на предыдущем шаге, возвращается единым блоком, и только новый контент текущего шага учитывается при записи на этом шаге.Таким образом: read ≈ предыдущее write означает, что в кэш попал весь префикс; read заметно меньше предыдущего write означает, что в кэш попала только более ранняя часть — что-то между ними изменилось, и эта разница подскажет, где искать.

Самые распространенные ошибки

Fallback безопасности в семействе Fable сбрасывает кэш. claude-fable-5 / claude-fable-5-1 поставляются со встроенными классификаторами безопасности. Когда запрос затрагивает контент с высоким уровнем риска, модель либо отклоняет его (HTTP 200 с stop_reason: "refusal"), либо выполняет откат (fallback) к семейству Opus, при этом поле model верхнего уровня в ответе точно отражает модель, которая фактически ответила. Это нормальное поведение на стороне модели, а не проблема шлюза.Влияние на кэширование: fallback переключает модель и, следовательно, ключ кэша, поэтому текущая реплика не может прочитать данные, записанные предыдущими; попадания в кэш возобновляются, как только следующая реплика снова возвращается к Fable. Отклоненная реплика все еще может возвращать cache_creation_input_tokens, но эта запись позже никогда не считывается. В многошаговых сессиях агента это проявляется как отдельные реплики, где read падает до 0, а write снова подскакивает.Что делать: проверяйте model и stop_reason в ответе перед тем, как делать вывод о промахе только по usage; скорректируйте отклоненный ввод перед повторной отправкой, а не повторяйте его без изменений; именно поддержание содержимого диалога в рамках правил минимизирует такие промахи. Подробная информация об отказах, fallback и тарификации приведена в заметках о выпуске Fable 5.1.
Кэширование промптов (Prompt Cache) работает только в нативном формате Anthropic (/v1/messages). При вызове Claude через OpenAI-совместимый формат (/v1/chat/completions) поля кэша возвращаться не будут независимо от отправленных данных. Для Claude Code, Cline, Cursor и аналогичных клиентов с высокой частотой запросов нативный формат обязателен, если для вас важна итоговая тарификация.

Изображения и файлы тоже кэшируются — но в сценариях с вложениями попадания в кэш менее стабильны

Сначала разберём распространённое заблуждение: дело не в том, что кэширование изображений и файлов в Claude «ненадёжно». Anthropic прямо указывает в документации, что текст, изображения и документы могут попадать в кэш промптов на равных условиях. Реальная причина заключается в строгом требовании, описанном выше: кэширование сопоставляет полный префикс запроса, а байты изображения или файла являются частью этого префикса. Любое изменение того, как клиент компонует вложения между репликами, нарушает его. Anthropic также отдельно выделяет один случай: изменение наличия изображения в prompt делает соответствующий кэш недействительным.

В чём различия между двумя сценариями

Клиенты для написания кода, такие как Claude Code, Cline и Cursor, относятся к первому столбцу, поэтому частота попадания в кэш у них обычно стабильна. GUI-клиенты, такие как Chatbox и Cherry Studio, столь же стабильны в текстовых диалогах — частота попадания в кэш снижается только тогда, когда диалог содержит загруженные файлы или большие вложенные изображения.

Восстановление частоты попадания в кэш в сценариях с вложениями

  1. Размещайте вложения первыми и в фиксированном порядке — это самый большой и стабильный контент, поэтому ему самое место в префиксе
  2. Кодируйте каждое вложение один раз и повторно используйте ту же строку base64; не считывайте и не кодируйте файл заново на каждой реплике (повторное кодирование не гарантирует получение идентичных байтов)
  3. Не меняйте порядок блоков контента между репликами, особенно избегайте вариантов вроде «на этой реплике изображение первое, на следующей — последнее»
  4. Размещайте cache_control после вложений, чтобы они попали внутрь кэшируемого префикса
  5. Избегайте добавления или удаления вложений в середине диалога — добавление или удаление даже одного изображения делает недействительным весь префикс после него
Если нужно объяснить это нетехническому коллеге или клиенту:Кэширование Claude одинаково поддерживает текст, изображения и файлы. Однако в таких клиентах, как Chatbox, когда диалог содержит загруженные файлы или большие вложенные изображения, способ организации этих вложений и окружающего контекста клиентом может меняться от реплики к реплике, поэтому реальная частота попадания в кэш оказывается сравнительно нестабильной. В сценариях Coding, где преобладают обычный текст и контекст кода, контекст запроса обычно стабилен, поэтому попадания в кэш происходят штатно и достаточно стабильно.Польза такой формулировки: она указывает на причину в том, как клиент формирует запрос, а не оставляет впечатление, будто «в официальном кэшировании изображений и файлов Claude есть ошибка».

Продвинутое: многоходовые диалоги

Разместите cache_control на последнем блоке контента последнего сообщения пользователя. Каждый новый ход автоматически расширяет кэшированный диапазон чтения до конца предыдущего хода:
Два жёстких ограничения, о которых следует помнить:
  • Не более 4 cache_control точек разрыва на запрос.
  • Окно поиска префикса у каждой точки разрыва — не более 20 блоков контента назад; все, что старше, не будет учитываться при попадании в кэш. Иными словами, в очень длинных диалогах отметка только последнего хода не покроет всю предыдущую историю.
Распространенный шаблон: размещайте по одной точке разрыва на определениях инструментов, system prompt, длинных документах и последнем ходе диалога — используя все 4 слота, чтобы разделы, изменяющиеся с разной скоростью, не делали кэш друг друга недействительным.

Об APIYI и кэшировании

APIYI передает поля кэша сквозным образом. cache_control, который вы отправляете, без изменений передается во upstream Claude (AWS Claude или Claude Official), а возвращаемые cache_creation_input_tokens / cache_read_input_tokens напрямую возвращаются вам — в вашем коде не требуется никакой специальной адаптации.
Как проверить самостоятельно:
  1. При первом запросе, usage.cache_creation_input_tokens > 0 (запись выполнена).
  2. Через несколько секунд отправьте тот же префикс еще раз — вы должны увидеть usage.cache_read_input_tokens > 0 (попадание).
  3. На панели тарификации будут отдельно указаны cache writes и cache reads с теми же официальными коэффициентами (1.25× / 2× / 0.1×).

Итоги

1. Помечайте

cache_control: {"type": "ephemeral"} в блоке контента — обычная строка content никогда не кэшируется.

2. Достаточная длина

Opus 5 ≥ 512; Sonnet 5 / Sonnet 4.6 ≥ 1,024; Opus 4.7 ≥ 2,048; Opus 4.6 / Haiku 4.5 ≥ 4,096 tokens, иначе они пропускаются без уведомления.

3. Стабильный префикс

Стабильное — в начале, изменяемое — в конце; сдвиг даже на один символ сводит попадание в кэш на нет.

4. Проверяйте использование

Только cache_read_input_tokens > 0 подтверждает, что вы действительно сэкономили; это значение должно быть примерно равно cache_creation_input_tokens предыдущего шага.

5. Фиксируйте вложения

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

Связанные ссылки

  • Родительская страница: Claude API Basics
  • Руководства по настройке клиента: Claude Code integration · Cherry Studio integration
  • Получение / управление token: https://api.apiyi.com/token
  • Официальная документация Anthropic: platform.claude.com/docs/en/build-with-claude/prompt-caching