Кэширование промптов: как срезать счёт за агентов вдвое
Prompt caching у OpenAI, Anthropic и Google по-разному режет цену повторяющегося контекста в агентных пайплайнах. Разбираем, где скидка автоматическая, где ручная и сколько реально экономят.

Когда агент делает не один запрос, а цепочку из десятков вызовов, один и тот же системный промпт, описания инструментов и история диалога уезжают в модель снова и снова. За каждый повторный проход вы платите как за новые токены. Кэширование промптов ломает эту логику: провайдер запоминает уже обработанный префикс и при следующем вызове берёт за него меньше или не берёт вовсе. Для длинных агентных сценариев это разница между счётом на десятки долларов в день и на сотни.
OpenAI, Anthropic и Google к 2024–2025 году выкатили механики кэширования, но устроены они по-разному: где-то скидка включается сама и требует только правильного порядка токенов, где-то её нужно объявлять вручную и следить за временем жизни кэша. Ошибка в структуре промпта — и вы платите полную цену, даже думая, что экономите.
Что вообще кэшируется
Кэшируется не ответ модели, а обработанный входной контекст — точнее, его общий префикс. Механизм смотрит на начало запроса: если оно совпадает с тем, что модель уже обрабатывала недавно, повторно считать эту часть не нужно. Отсюда главное правило: всё стабильное должно быть в начале промпта, всё изменчивое — в конце.
В агентных пайплайнах стабильного много: системная инструкция, описания доступных инструментов1, справочные документы, few-shot примеры. Это как раз то, что тянется через всю сессию без изменений. А переменная часть — новое сообщение пользователя или результат вызова инструмента — приписывается в хвост.
Кэш работает по префиксу. Поменяли один символ в начале системного промпта — и весь кэш ниже этой точки сгорает. Порядок токенов важнее их количества.
Три подхода: авто, ручной и гибридный
У крупных провайдеров кэширование включается по-разному, и от этого зависит, сколько кода вам придётся написать.
OpenAI: автоматически по префиксу
У OpenAI prompt caching для длинных промптов включается автоматически на моделях, где он поддерживается, — специальных полей в запросе объявлять не нужно. Система сама находит совпадающий префикс. Кэшированные входные токены тарифицируются со скидкой относительно обычной входной цены. Точные проценты скидки и минимальную длину префикса, с которой кэш вообще срабатывает, сверяйте на актуальной странице цен OpenAI — они менялись.
Anthropic: явные точки останова
У Anthropic (модели Claude) кэширование объявляется вручную: вы помечаете блоки контента атрибутом cache_control и тем самым ставите «точки останова» кэша. Запись в кэш стоит дороже обычного входного токена (наценка за создание кэша), а чтение из кэша — заметно дешевле. Есть время жизни записи; по умолчанию оно короткое, но доступна и продлённая опция за отдельную цену. Конкретные множители и TTL уточняйте в документации Anthropic.
Google Gemini: контекстный кэш как объект
У Google в Gemini API кэширование оформлено как отдельная сущность — context caching: вы создаёте объект кэша с контентом и TTL, получаете идентификатор и ссылаетесь на него в последующих запросах. Оплата складывается из хранения кэша (за время жизни) и сниженной цены за использованные из него токены. Это удобно, когда один большой корпус — документация, кодовая база — переиспользуется многими запросами.
Сравнение механик
| Параметр | OpenAI | Anthropic (Claude) | Google (Gemini) |
|---|---|---|---|
| Как включается | Автоматически по префиксу | Вручную, cache_control | Вручную, объект кэша с ID |
| Наценка за запись | Нет отдельной | Есть (создание кэша дороже) | Плата за хранение по TTL |
| Скидка на чтение | Есть | Есть, существенная | Есть |
| Контроль разработчика | Минимальный | Высокий | Высокий |
| Кому проще стартовать | Тем, кто не хочет возиться | Тем, кто точно знает стабильные блоки | Тем, у кого один большой общий корпус |
Точные проценты скидок, наценок и значения TTL здесь намеренно не приведены: они разные у каждого провайдера и меняются. Перед расчётом бюджета сверьтесь с официальными страницами цен — цифра полугодовой давности легко введёт в заблуждение.
Как перестроить пайплайн под кэш
Кэширование не включается «галочкой» — его нужно заложить в архитектуру промпта. Порядок действий примерно такой:
- Разложите промпт на слои от самого стабильного к самому изменчивому: системная инструкция → описания инструментов → справочные документы → история диалога → текущий ввод.
- Убедитесь, что стабильные слои не меняются между вызовами ни на символ — включая пробелы, метки времени и случайные идентификаторы.
- Для Anthropic расставьте
cache_controlна границах стабильных блоков; для Gemini создайте объект кэша под большой общий корпус; для OpenAI просто держите префикс неизменным. - Уберите из начала промпта всё, что содержит текущее время, счётчики и рандом — эти вставки убивают совпадение префикса.
- Замерьте: провайдеры возвращают в ответе поля с числом кэшированных и некэшированных входных токенов. Если кэшированных нулей — префикс где-то ломается.
Кому это пригодится, а кому нет
Пригодится:
- Агенты с длинным системным промптом и десятками описаний инструментов, которые дёргают модель много раз за сессию.
- Чат-ассистенты поверх большой документации или базы знаний, где один и тот же корпус подставляется в каждый запрос.
- Пайплайны с многошаговым рассуждением, где история диалога растёт, но начало остаётся стабильным.
- Пакетная обработка однотипных запросов с общим большим контекстом — тут особенно выигрывает Gemini с объектом кэша.
Не даст эффекта:
- Редкие одиночные запросы: кэш успевает протухнуть между вызовами, а у Anthropic вы ещё и переплатите за запись, которой никто не воспользуется.
- Короткие промпты ниже минимальной длины срабатывания кэша — экономить попросту не на чем.
- Пайплайны, где начало промпта каждый раз разное (персонализация в первом абзаце, динамические инструкции) — совпадения префикса не будет.
- Сценарии с меткой времени или уникальным ID в шапке запроса, пока вы их оттуда не уберёте.
Подводные камни
Первая ловушка — ложное чувство экономии. Разработчик добавляет кэширование, видит в дашборде меньший счёт по некоторым запросам и успокаивается, не проверив, что кэш реально попадает. Между тем случайный идентификатор в системном промпте может свести hit-rate к нулю. Всегда смотрите на возвращаемые поля с числом кэшированных токенов, а не на общее ощущение.
Вторая — TTL. Кэш живёт недолго. Если между шагами агента проходит больше времени жизни записи (ожидание внешнего API, действие пользователя), кэш истекает, и следующий вызов идёт по полной цене. Для медленных пайплайнов продлённый TTL может окупиться, для быстрых — нет.
Третья — у Anthropic запись в кэш дороже обычного токена. Если блок кэшируется, но переиспользуется всего раз-два, вы уходите в минус по сравнению с отсутствием кэша. Кэшировать имеет смысл то, что прочитают многократно.
1 Описание инструментов (tool definitions) — структурированный список функций, которые агент может вызвать: имя, назначение и схема параметров. Модель читает эти описания в каждом запросе, чтобы решить, какой инструмент дёрнуть, поэтому они и составляют львиную долю стабильного, кэшируемого контекста.
Prompt-инженер: Идеальные запросы для Midjourney, ChatGPT и других моделей.
Спросить за 15 ₽Источники: Anthropic — Prompt caching (документация), OpenAI — Prompt caching (документация)
Частые вопросы
Кэшируется ответ модели или только вход?
Почему кэш не срабатывает, хотя я его настроил?
Кэширование всегда дешевле, чем без него?
На сколько реально падает счёт?
Долго ли живёт кэш?
Нужно ли что-то менять в коде для OpenAI?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.