Заголовок 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 — вершина иерархии, так что трогать их — самое дорогое изменение из возможных.
Упорядочивайте промпт по частоте изменений. Всё, что меняется часто, — в хвост, в 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
- OpenAI — Prompt caching guide: developers.openai.com/api/docs/guides/prompt-caching
- OpenAI — Prompt Caching in the API: openai.com/index/api-prompt-caching