Кэшей два, и они про разное. Кэш промпта удешевляет повторяющееся начало запроса. Кэш ответа отдаёт готовый результат на точно такой же запрос. Первый почти всегда полезен, второй — редко.
Длинный неизменный кусок в начале запроса — инструкция на две тысячи токенов, выдержка из базы знаний, описание двадцати инструментов — обрабатывается площадкой заново на каждом вызове. Кэш позволяет обработать его один раз и дальше переиспользовать.
| Событие | Цена относительно обычного входа |
|---|---|
| Запись в кэш | ×1.25 — первый запрос дороже обычного |
| Чтение из кэша | ×0.1 — на порядок дешевле |
| Промах | ×1.0 — как обычный вход |
Порог окупаемости — примерно два обращения: если кэшируемая часть читается хотя бы дважды, вы уже в плюсе. Точные множители зависят от площадки и видны в карточке модели.
Часть площадок кэширует сама, без всяких полей: достаточно, чтобы начало запроса совпадало посимвольно. Другим нужна явная отметка границы кэша прямо в сообщении.
{
"role": "system",
"content": [
{
"type": "text",
"text": "…две тысячи токенов инструкции и справочных данных…",
"cache_control": {"type": "ephemeral"}
}
]
}Отметка ставится на последний элемент кэшируемого префикса. Всё, что до неё включительно, попадает в кэш; всё, что после, считается обычным входом. Площадкам, которые кэшируют автоматически, поле cache_control не мешает — мы его просто не передаём.
"usage": {
"prompt_tokens": 2310,
"cache_creation_tokens": 0,
"cache_read_tokens": 2048,
"completion_tokens": 96,
"cost_rub": 0.41
}cache_read_tokens больше нуля — кэш попал. cache_creation_tokens в каждом запросе вместо чтения означает, что префикс каждый раз разный, и кэш вам сейчас не экономит, а стоит дороже обычного вызова. В логе активности доля попаданий выведена отдельной колонкой.
Отдельная вещь: мы можем вернуть готовый ответ на запрос, который уже обслуживали, вообще не обращаясь к площадке. Это бесплатно и мгновенно, но выключено по умолчанию — молча отдавать вчерашний ответ на сегодняшний вопрос нельзя.
{
"model": "openai/gpt-5-mini",
"messages": [{"role": "user", "content": "…"}],
"cache": {"ttl": 3600}
}| Условие | Значение |
|---|---|
| Ключ кэша | модель, все сообщения, все параметры генерации — побайтово |
| Область видимости | ваш аккаунт. Чужие ответы вам не попадут и ваши — никому |
| temperature | выше нуля кэш игнорируется: вы просили разброс, кэш его убивает |
| Стриминг | поддерживается, кэшированный ответ отдаётся теми же кусками |
| Стоимость попадания | ноль, в логе активности такой запрос помечен |
Разумные применения — демостенд, автотесты, повторяющиеся служебные вызовы вроде классификации одних и тех же строк. Для пользовательских диалогов кэш ответа бесполезен: точного совпадения там не бывает.