gemini-3.6-flash. Сведения о поддержке Context Cache другими моделями см. в описании моделей и на странице цен платформы.Сценарии использования
Если в нескольких запросах многократно передаётся один и тот же большой фрагмент контента, можно кэшировать его стабильный префикс, например:- очень длинный системный промпт
- неизменяемую базу знаний или документацию продукта
- стабильную историю сообщений в многошаговом диалоге
- многократно используемые определения и описания инструментов
Основное использование
Добавьтеcache_control в content block последнего сообщения стабильного префикса:
ttl не указан, по умолчанию используется 5m.Структура сообщений
Рекомендуется следующая структура:cache_control и все предшествующие ему сообщения образуют префикс кэша. После него должно оставаться как минимум одно актуальное сообщение.
Пример OpenAI-совместимого запроса
cache_control одновременно задаёт «границу кэша» и «срок действия кэша».Пример нативного запроса Gemini
Нативный интерфейс GeminigenerateContent также позволяет добавлять cache_control в contents[].parts[]:
cache_control — это поле, которым платформа расширяет формат запросов Gemini. Распознав границу, платформа удаляет это поле перед переадресацией и автоматически создаёт либо повторно использует кэшированный контент (cachedContent).
Для потокового интерфейса используется то же тело запроса; достаточно изменить URL:
systemInstruction, contents перед границей, TTL и tools; изменяйте только актуальный контент после границы.
Процесс создания и повторного использования
При первой отправке запроса сcache_control:
Повторное использование кэша
При повторном запросе не изменяйте:- модель
- все сообщения перед
cache_control cache_control.ttl- определения инструментов (если используются tools)
systemInstructionв нативном запросе Gemini
- изменение текста или порядка сообщений в стабильном префиксе
- смена модели
- изменение
5mна1h - изменение tools или определений параметров инструментов
- использование другого пользователя API или канала
Пример на Python
stable_messages, заменяя только последнее сообщение user.
Проверка попадания в кэш
OpenAI-совместимый ответ
Проверьте следующие поля ответа:cached_tokens может быть большим, поскольку система может сначала создать кэш, а затем сослаться на него в рамках того же вызова модели.
Нативный ответ Gemini
ПроверьтеusageMetadata.cachedContentTokenCount в ответе:
streamGenerateContent возвращает те же данные usageMetadata в кадре SSE-ответа. Клиент должен прочитать кадр ответа, содержащий это поле, а не проверять только первый текстовый фрагмент.
Рекомендации
Часто задаваемые вопросы
Можно ли автоматически создать кэш в нативном формате запросов Gemini?
Можно ли автоматически создать кэш в нативном формате запросов Gemini?
generateContent и streamGenerateContent используют одну и ту же структуру cache_control. Граница должна находиться в contents[].parts[], а после content с границей должен оставаться как минимум один актуальный content.Если в запросе явно указано имя нативного ресурса cachedContent, платформа отдаёт приоритет предоставленному пользователем ресурсу и не выполняет автоматическое создание кэша.Почему запрос не попал в кэш?
Почему запрос не попал в кэш?
- стабильный префикс не полностью совпадает с предыдущим запросом
- срок действия TTL истёк
- модель или tools были изменены
- объём кэшируемого контента не достиг минимального количества токенов, требуемого моделью
cache_controlнаходится в последнем сообщении, поэтому актуального вопроса после него нет
Можно ли поместить cache_control в последнее сообщение?
Можно ли поместить cache_control в последнее сообщение?
Можно ли задать другое значение TTL?
Можно ли задать другое значение TTL?
5m и 1h. Другие значения приводят к ответу HTTP 400.Можно ли задать несколько границ кэша?
Можно ли задать несколько границ кэша?
Приведёт ли недоступность кэша к ошибке запроса?
Приведёт ли недоступность кэша к ошибке запроса?
Что произойдёт, если для модели не включён Context Cache?
Что произойдёт, если для модели не включён Context Cache?
Почему cache_write_tokens равен 0?
Почему cache_write_tokens равен 0?
cache_write_tokens в стиле OpenAI/Claude.Означает ли cached_tokens больше 0, что явный кэш точно был создан?
Означает ли cached_tokens больше 0, что явный кэш точно был создан?
Как тарифицируется кэш?
Как тарифицируется кэш?