---
title: "Где prompt caching молча промахивается: TTL, порядок префикса и что сбрасывает кеш"
canonical: https://maxtokens.ai/ru/posts/prompt-cache-misses/
date: 2026-06-19
tags: [llm, cost]
description: "Как на самом деле считается экономия от кеша промпта у Anthropic и OpenAI и где кеш молча перестаёт работать: TTL, порядок префикса, инвалидация."
---
Заголовок OpenAI — «входные токены дешевле до 90%». Это правда и при этом самая неверно прочитанная цифра в прайсинге. Скидка реальная, но срабатывает только при попадании в кеш. Промахивается он чаще и тише, чем обещает страница с ценами. Anthropic и OpenAI дают кеширование промптов с похожим обещанием, но разными правилами: разное время жизни, разный способ сопоставить префикс, разные вещи, которые обнуляют кеш, ничего вам не сказав. Этот пост разбирает, как считается экономия и где кеш перестаёт работать.

Все цифры взяты из документации Anthropic и OpenAI. Ничего не додумано.

## 1. Скидка — это набор мультипликаторов, и запись дороже базы

У Anthropic вся экономика — три числа относительно базовой цены ввода: запись в 5-минутный кеш стоит ×1.25 от базовой цены входных токенов, запись в часовой — ×2, а чтение — ×0.1.

Два из них больше 1.0. Запись в кеш стоит на 25% дороже, чем просто отправить те же токены без кеша, а часовой вариант стоит вдвое дороже. Дешёвое тут только чтение: ×0.1 — это минус 90%, и эта скидка всегда только на чтении.

То есть кеш экономит деньги, только если вы прочитаете его достаточно раз, чтобы отбить надбавку за запись. Арифметика для префикса, отправленного один раз и переиспользованного R раз, на 5-минутном уровне:

```
без кеша:        R × 1.0           = R
5-мин кеш:       1.25 + (R−1)×0.1  = 1.15 + 0.1R   → дешевле при R > 1.28
часовой кеш:     2.0  + (R−1)×0.1  = 1.90 + 0.1R   → дешевле при R > 2.11
```

5-минутный уровень выигрывает уже на первом переиспользовании. Часовому нужно два переиспользования, чтобы обойти отправку токенов без кеша: из ямы в ×2 за запись выбираться дольше.

Ловушка — одноразовое использование. Если записали кеш и ни разу не прочитали его до истечения TTL, вы заплатили ×1.25 или ×2 впустую, то есть строго хуже, чем вообще без кеша. Успеете ли вы прочитать его вовремя — это вопрос TTL, и это следующая проблема.

## 2. TTL: кеш холоднее, чем кажется

Кеш Anthropic по умолчанию живёт 5 минут и обновляется без дополнительной платы при каждом использовании содержимого. Эту деталь часто пропускают: время жизни — это скользящее окно, а не фиксированный отсчёт. Префикс, в который попадают каждые несколько минут, остаётся горячим сколько угодно долго и бесплатно; префикс, который трогают раз в час, холодный каждый раз. Для случаев, когда 5 минут мало, есть платный часовой вариант.

У OpenAI время жизни кеша описано иначе: закешированные префиксы обычно остаются активными 5–10 минут простоя и максимум в пределах одного часа. «Обычно» и «максимум» тут ключевые оговорки: время жизни здесь типичное, а не гарантированное.

У обоих провайдеров правило одно: кеш окупается при частых запросах. Высокая частота запросов на общий префикс держит кеш горячим и переиспользуемым. У Anthropic при низком трафике вы снова платите надбавку за запись и редко собираете скидку за чтение, так что экономика из раздела 1 на малых объёмах переворачивается.

## 3. Anthropic сопоставляет иерархию префикса: изменение одного уровня сбрасывает всё ниже

Anthropic строит префиксы кеша в строгом порядке: сначала tools, затем system, затем messages. Этот порядок — иерархия, где каждый уровень надстраивается над предыдущими. Кеш хранит полный префикс — tools, system и messages в этом порядке — вплоть до блока, помеченного `cache_control`, включительно.

Правило инвалидации следует прямо из порядка: изменение на любом уровне инвалидирует этот уровень и все последующие. Поправьте определение инструмента — и вы теряете не только кеш tools, но и system с messages, потому что они стоят ниже tools по иерархии. Anthropic говорит это прямо: изменение определений инструментов (имена, описания, параметры) инвалидирует весь кеш. Tools — вершина иерархии, так что трогать их — самое дорогое изменение из возможных.

<img src="/posts/prompt-cache-misses/cache-hierarchy-ru.svg" alt="Иерархия префикса кеша Anthropic tools, system, messages; правка на одном уровне сбрасывает этот уровень и все нижележащие" width="760" height="470" loading="lazy" decoding="async" />

Упорядочивайте промпт по частоте изменений. Всё, что меняется часто, — в хвост, в messages, ближе к концу, чтобы правка сбрасывала как можно меньшую часть префикса. Всё стабильное (схемы инструментов, ядро system) — вперёд, и менять его пореже. Одно переписанное описание инструмента на каждом запросе означает, что вы не кешируете ничего.

## 4. OpenAI сопоставляет только точный префикс

Кеширование OpenAI включается автоматически для промптов от 1024 токенов, и скидка применяется к общим префиксам без каких-либо изменений в вашей интеграции с API. Помечать нечего, параметр выставлять не нужно.

Попадание в кеш возможно только при точном совпадении префикса внутри промпта. API кеширует самый длинный ранее вычисленный префикс, начиная с 1024 токенов и далее с шагом в 128 токенов. То есть сопоставление жадное с начала и квантованное — оно находит самый длинный кусок от самого старта промпта, который уже встречался, округляя вниз до границы в 128 токенов.

Поэтому всё решает *начало* промпта. Один изменённый токен ближе к верху ломает точное совпадение префикса в этой точке: временная метка, идентификатор пользователя или UUID сессии, случайно положенный в system. Всё после него идёт без кеша, как бы байт-в-байт оно ни совпадало с прошлым разом. Лечится той же дисциплиной, что и иерархия Anthropic: статика вперёд, всё, что зависит от запроса, в хвост.

## 5. Тихий отказ: слишком коротко, чтобы кешировать, и без ошибки

У обоих провайдеров есть нижний порог, и порог Anthropic кусает молча. Короткие промпты не кешируются, даже помеченные `cache_control`; любой запрос на кеширование меньше минимального числа токенов обрабатывается без кеша, и ошибка не возвращается. Вы ставите `cache_control`, получаете нормальный ответ и платите полную цену — ничто не сообщает, что кеш не сработал.

Порог зависит от модели: 1024 токена для Claude Opus 4.8, Claude Sonnet 4.6 и Claude Sonnet 4.5. OpenAI проводит ту же черту с другой стороны: кеширование просто не включается ниже 1024 токенов.

Кешировать маленький блок system бессмысленно по двум причинам: он ниже порога, так что может не закешироваться вовсе, а если бы и закешировался, раздел 1 говорит, что запись с числом переиспользований ниже точки окупаемости теряет деньги. Кешируйте крупные стабильные префиксы, а не мелкие.

## Чеклист

- Чтение из кеша стоит ×0.1 базового ввода (минус 90%); 5-минутная запись стоит ×1.25, часовая — ×2. Запись дороже, чем не кешировать.
- 5-минутный уровень окупается на первом переиспользовании; часовому нужно два. Кеш, записанный и ни разу не прочитанный до истечения, строго хуже, чем без кеша.
- TTL у Anthropic — 5 минут, бесплатно обновляется при каждом попадании, скользящее окно. Есть платный часовой вариант.
- TTL у OpenAI — 5–10 минут простоя, максимум час.
- Anthropic кеширует иерархию tools → system → messages; изменение на одном уровне сбрасывает его и всё нижележащее. Правка определения инструмента сбрасывает весь кеш.
- OpenAI сопоставляет самый длинный точный префикс с начала, порог 1024 токена, шаг 128. Один изменённый токен у верха ломает остальное.
- Упорядочивайте оба промпта по частоте изменений: стабильное вперёд, а зависящее от запроса — в хвост.
- Ниже ~1024 токенов не кешируется ничего, и Anthropic не возвращает ошибку — вы просто платите полную цену.

«До 90%» — реальная цифра. Это свойство чтения, а не вашей интеграции: вы собираете её, только когда префикс достаточно длинный, стабильный и часто переиспользуемый, чтобы оставаться горячим. Если эти условия не выполнены, скидка молча не появляется. А у Anthropic вы вдобавок впустую платите надбавку за запись.

## Источники

- Anthropic — Prompt caching: [platform.claude.com/docs/en/build-with-claude/prompt-caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)
- OpenAI — Prompt caching guide: [developers.openai.com/api/docs/guides/prompt-caching](https://developers.openai.com/api/docs/guides/prompt-caching)
- OpenAI — Prompt Caching in the API: [openai.com/index/api-prompt-caching](https://openai.com/index/api-prompt-caching/)