gemini-3.6-flash. Para saber si otros modelos admiten Context Cache, consulta la descripción del modelo y la página de precios de la plataforma.Casos de uso
Cuando varias solicitudes incluyen repetidamente el mismo bloque grande de contenido, puedes almacenar en caché un prefijo estable, por ejemplo:- Un system prompt muy largo
- Una base de conocimientos fija o documentación de producto
- Mensajes históricos estables de una conversación de varios turnos
- Definiciones e instrucciones de herramientas que se reutilizan
Uso básico
Añadecache_control al bloque de contenido del último mensaje del prefijo estable:
ttl, se usa 5m de forma predeterminada.Estructura de los mensajes
Se recomienda usar la siguiente estructura:cache_control y todos los mensajes anteriores forman el prefijo almacenado en caché. Después debe haber al menos un mensaje en tiempo real.
Ejemplo de solicitud compatible con OpenAI
cache_control define tanto el «límite de la caché» como su «periodo de validez».Ejemplo de solicitud nativa de Gemini
El endpoint nativogenerateContent de Gemini también permite añadir cache_control dentro de contents[].parts[]:
cache_control es un campo de extensión de la plataforma para el formato de solicitud de Gemini. Una vez identificado el límite, la plataforma elimina este campo antes de reenviar la solicitud y crea o reutiliza automáticamente el contenido almacenado en caché (cachedContent).
La interfaz de streaming usa el mismo cuerpo de solicitud; solo debes cambiar la dirección por:
systemInstruction, los contents anteriores al límite, el TTL y las tools; modifica únicamente el contenido en tiempo real posterior al límite.
Flujo de creación y reutilización
La primera vez que envíes una solicitud concache_control:
Reutilizar la caché
En las solicitudes posteriores, mantén sin cambios lo siguiente:- El modelo
- Todos los mensajes anteriores a
cache_control cache_control.ttl- Las definiciones de herramientas (si usas tools)
systemInstructionen las solicitudes nativas de Gemini
- Modificar el texto o el orden de los mensajes del prefijo estable
- Cambiar de modelo
- Cambiar
5mpor1h - Modificar las tools o la definición de sus parámetros
- Usar un usuario o canal de API diferente
Ejemplo en Python
stable_messages y sustituye únicamente el último mensaje del usuario.
Comprobar si se utilizó la caché
Respuesta compatible con OpenAI
Consulta los siguientes campos de la respuesta:cached_tokens, ya que el sistema puede crear la caché y referenciarla en la misma llamada al modelo.
Respuesta nativa de Gemini
ConsultausageMetadata.cachedContentTokenCount en la respuesta:
streamGenerateContent devuelve el mismo usageMetadata en un frame de la respuesta SSE. El cliente debe leer el frame que contiene este campo, no comprobar únicamente el primer fragmento de texto.
Recomendaciones
Preguntas frecuentes
¿El formato de solicitud nativo de Gemini puede crear una caché automáticamente?
¿El formato de solicitud nativo de Gemini puede crear una caché automáticamente?
generateContent y streamGenerateContent usan la misma estructura de cache_control. El límite debe estar dentro de contents[].parts[] y debe quedar al menos un content en tiempo real después del content que contiene el límite.Si la solicitud ya proporciona explícitamente el nombre de un recurso cachedContent nativo, la plataforma da prioridad al recurso indicado por el usuario y no vuelve a crear una caché automáticamente.¿Por qué no se utilizó la caché?
¿Por qué no se utilizó la caché?
- El prefijo estable no coincide exactamente con el de la solicitud anterior
- El TTL ha caducado
- Se ha modificado el modelo o las tools
- El contenido almacenado en caché no alcanza el número mínimo de tokens exigido por el modelo
cache_controlestá en el último mensaje y no queda ninguna pregunta en tiempo real
¿Puedo colocar cache_control en el último mensaje?
¿Puedo colocar cache_control en el último mensaje?
¿Puedo configurar otro TTL?
¿Puedo configurar otro TTL?
5m y 1h. Cualquier otro valor devuelve un error HTTP 400.¿Puedo configurar varios límites de caché?
¿Puedo configurar varios límites de caché?
¿La solicitud fallará si la caché no está disponible?
¿La solicitud fallará si la caché no está disponible?
¿Qué ocurre si el modelo no tiene habilitado Context Cache?
¿Qué ocurre si el modelo no tiene habilitado Context Cache?
¿Por qué cache_write_tokens es 0?
¿Por qué cache_write_tokens es 0?
cache_write_tokens, al estilo de OpenAI o Claude, para indicar cuántos tokens se han escrito en la caché.¿Un valor de cached_tokens superior a 0 significa que se ha creado una caché explícita?
¿Un valor de cached_tokens superior a 0 significa que se ha creado una caché explícita?
¿Cómo se factura la caché?
¿Cómo se factura la caché?