gemini-3.6-flash. Consultez la documentation des modèles et la page des tarifs de la plateforme pour savoir si d’autres modèles prennent en charge Context Cache.Cas d’utilisation
Lorsque plusieurs requêtes contiennent de façon répétée le même contenu volumineux, vous pouvez mettre en cache le préfixe stable. Par exemple :- Un prompt système très long
- Une base de connaissances ou une documentation produit fixe
- Un historique de messages stable dans une conversation à plusieurs tours
- Des définitions et instructions de tools réutilisées
Utilisation principale
Ajoutezcache_control au bloc de contenu du dernier message du préfixe stable :
ttl est omis, la valeur par défaut est 5m.Structure des messages
Nous recommandons la structure suivante :cache_control et tous les messages qui le précèdent constituent le préfixe mis en cache. Ils doivent être suivis d’au moins un message en temps réel.
Exemple de requête compatible OpenAI
cache_control définit à la fois la limite du cache et sa durée de validité.Exemple de requête Gemini native
L’endpoint Gemini natifgenerateContent permet également d’ajouter cache_control dans contents[].parts[] :
cache_control est une extension de la plateforme appliquée au format de requête Gemini. Une fois la limite détectée, la plateforme supprime ce champ avant de transmettre la requête, puis crée ou réutilise automatiquement le contenu mis en cache (cachedContent).
L’endpoint de streaming utilise le même corps de requête. Il suffit de remplacer l’URL par :
systemInstruction, les contents situés avant la limite, le TTL et les tools sans modification. Modifiez uniquement le contenu en temps réel situé après la limite.
Processus de création et de réutilisation
Lorsque vous envoyez pour la première fois une requête contenantcache_control :
Réutiliser un cache
Pour les requêtes suivantes, conservez les éléments ci-dessous sans modification :- Le modèle
- Tous les messages précédant
cache_control cache_control.ttl- Les définitions de tools (si vous utilisez des tools)
systemInstructiondans les requêtes Gemini natives
- Modifier le texte ou l’ordre des messages dans le préfixe stable
- Changer de modèle
- Remplacer
5mpar1h - Modifier les tools ou les définitions de leurs paramètres
- Utiliser un autre utilisateur ou canal API
Exemple Python
stable_messages et remplacez uniquement le dernier message utilisateur.
Vérifier si le cache a été utilisé
Réponse compatible OpenAI
Consultez les champs suivants dans la réponse :cached_tokens élevée, car le système peut créer un cache et le référencer lors du même appel au modèle.
Réponse Gemini native
ConsultezusageMetadata.cachedContentTokenCount dans la réponse :
streamGenerateContent renvoie les mêmes usageMetadata dans une trame de réponse SSE. Le client doit lire la trame contenant ce champ au lieu de consulter uniquement la première trame de texte.
Recommandations
Questions fréquentes
Le format de requête Gemini natif peut-il créer automatiquement un cache ?
Le format de requête Gemini natif peut-il créer automatiquement un cache ?
generateContent et streamGenerateContent utilisent la même structure cache_control. La limite doit être placée dans contents[].parts[], et au moins un élément de contenu en temps réel doit rester après celui qui porte cette limite.Si la requête fournit explicitement le nom d’une ressource cachedContent native, la plateforme utilise en priorité la ressource fournie par l’utilisateur et ne crée pas automatiquement de cache.Pourquoi le cache n'a-t-il pas été utilisé ?
Pourquoi le cache n'a-t-il pas été utilisé ?
- Le préfixe stable ne correspond pas exactement à celui de la requête précédente
- Le TTL a expiré
- Le modèle ou les tools ont été modifiés
- Le contenu mis en cache n’atteint pas le nombre minimal de tokens requis par le modèle
cache_controla été placé sur le dernier message, sans laisser de question en temps réel après celui-ci
cache_control peut-il être placé sur le dernier message ?
cache_control peut-il être placé sur le dernier message ?
Puis-je définir un autre TTL ?
Puis-je définir un autre TTL ?
5m et 1h sont actuellement prises en charge. Toute autre valeur renvoie une erreur HTTP 400.Puis-je définir plusieurs limites de cache ?
Puis-je définir plusieurs limites de cache ?
La requête échoue-t-elle si le cache est indisponible ?
La requête échoue-t-elle si le cache est indisponible ?
Que se passe-t-il si Context Cache n'est pas activé pour le modèle ?
Que se passe-t-il si Context Cache n'est pas activé pour le modèle ?
Pourquoi cache_write_tokens vaut-il 0 ?
Pourquoi cache_write_tokens vaut-il 0 ?
cache_write_tokens n’est pas utilisé pour indiquer le volume écrit dans le cache.Une valeur cached_tokens supérieure à 0 signifie-t-elle toujours qu'un cache explicite a été créé ?
Une valeur cached_tokens supérieure à 0 signifie-t-elle toujours qu'un cache explicite a été créé ?
Comment la mise en cache est-elle facturée ?
Comment la mise en cache est-elle facturée ?