docs.claude.com/en/docs/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:3. Префикс должен совпадать побайтно
Кэширование основано на префиксе: от начала запроса до маркераcache_control поток байтов должен быть идентичным предыдущему запросу. Любое изменение одного символа — пробельные символы, порядок ключей JSON, временная метка — считается новым префиксом и создает новую запись вместо попадания в кэш.
Практическое правило: стабильные данные — в начале, изменчивые — в конце.
Минимальный рабочий пример
Отправьте два запроса, используя один и тот же длинный документ, но разные вопросы. Первый записывает, второй попадает в кэш:read ≈ в первом вызове write — тот же префикс используется повторно.
Как определить, было ли попадание в кэш — три поля usage
В каждом ответе,usage сообщает:
Итого входные tokens = сумма всех трех. Пока
cache_read_input_tokens > 0, вы экономите деньги.
Самые распространенные подводные камни
Продвинутое: многоходовые диалоги
Разместите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. Достаточно длинно
Sonnet 4.6 ≥ 2,048 tokens; Opus 4.x / Haiku 4.5 ≥ 4,096 tokens, иначе пропускается без предупреждения.
3. Стабильный префикс
Стабильное в начале, изменчивое в конце; один символ расхождения убивает попадание в кэш.
4. Проверьте использование
Только
cache_read_input_tokens > 0 доказывает, что вы действительно сэкономили.Связанные ссылки
- Родительская страница: Основы Claude API
- Руководства по настройке клиента: Интеграция Claude Code · Интеграция Cherry Studio
- Получение / управление token:
https://api.apiyi.com/token - Официальная документация Anthropic:
docs.claude.com/en/docs/build-with-claude/prompt-caching