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:Измерено в 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, вы экономите деньги.
Самые распространенные ошибки
Изображения и файлы тоже кэшируются — но в сценариях с вложениями попадания в кэш менее стабильны
Сначала разберём распространённое заблуждение: дело не в том, что кэширование изображений и файлов в Claude «ненадёжно». Anthropic прямо указывает в документации, что текст, изображения и документы могут попадать в кэш промптов на равных условиях. Реальная причина заключается в строгом требовании, описанном выше: кэширование сопоставляет полный префикс запроса, а байты изображения или файла являются частью этого префикса. Любое изменение того, как клиент компонует вложения между репликами, нарушает его. Anthropic также отдельно выделяет один случай: изменение наличия изображения в prompt делает соответствующий кэш недействительным.В чём различия между двумя сценариями
Клиенты для написания кода, такие как Claude Code, Cline и Cursor, относятся к первому столбцу, поэтому частота попадания в кэш у них обычно стабильна. GUI-клиенты, такие как Chatbox и Cherry Studio, столь же стабильны в текстовых диалогах — частота попадания в кэш снижается только тогда, когда диалог содержит загруженные файлы или большие вложенные изображения.
Восстановление частоты попадания в кэш в сценариях с вложениями
- Размещайте вложения первыми и в фиксированном порядке — это самый большой и стабильный контент, поэтому ему самое место в префиксе
- Кодируйте каждое вложение один раз и повторно используйте ту же строку base64; не считывайте и не кодируйте файл заново на каждой реплике (повторное кодирование не гарантирует получение идентичных байтов)
- Не меняйте порядок блоков контента между репликами, особенно избегайте вариантов вроде «на этой реплике изображение первое, на следующей — последнее»
- Размещайте
cache_controlпосле вложений, чтобы они попали внутрь кэшируемого префикса - Избегайте добавления или удаления вложений в середине диалога — добавление или удаление даже одного изображения делает недействительным весь префикс после него
Продвинутое: многоходовые диалоги
Разместитеcache_control на последнем блоке контента последнего сообщения пользователя. Каждый новый ход автоматически расширяет кэшированный диапазон чтения до конца предыдущего хода:
- Не более 4
cache_controlточек разрыва на запрос. - Окно поиска префикса у каждой точки разрыва — не более 20 блоков контента назад; все, что старше, не будет учитываться при попадании в кэш. Иными словами, в очень длинных диалогах отметка только последнего хода не покроет всю предыдущую историю.
Об APIYI и кэшировании
APIYI передает поля кэша сквозным образом.
cache_control, который вы отправляете, без изменений передается во upstream Claude (AWS Claude или Claude Official), а возвращаемые cache_creation_input_tokens / cache_read_input_tokens напрямую возвращаются вам — в вашем коде не требуется никакой специальной адаптации.- При первом запросе,
usage.cache_creation_input_tokens > 0(запись выполнена). - Через несколько секунд отправьте тот же префикс еще раз — вы должны увидеть
usage.cache_read_input_tokens > 0(попадание). - На панели тарификации будут отдельно указаны 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