Caché explícito de Gemini (cachedContents)
Gemini ofrece dos tipos de caché:
- Caché implícito (automático) — el modelo detecta y reutiliza automáticamente los prefijos de prompt repetidos, sin necesidad de configuración. Este es el comportamiento por defecto que se trata en Caché de prompts; los aciertos son «best-effort» (de mejor esfuerzo), y cualquier pequeño cambio en el prefijo puede provocar un fallo de acierto.
- Caché explícito (esta página) — usted crea de forma activa un gran fragmento de contexto como un objeto de caché, recibe un identificador
cachedContents/{id}y lo referencia en solicitudesgenerateContentposteriores. Los aciertos son deterministas: mientras el caché no haya expirado, una referencia siempre acierta.
Use el caché explícito cuando tenga un contexto grande y estable que se reutiliza repetidamente (documentos largos, bases de código, bases de conocimiento, instrucciones de sistema fijas) y quiera tasas de acierto controlables y facturación predecible.
OfoxAI soporta la creación / referencia / consulta / eliminación de cachedContents nativos de Gemini, compatible con el Google GenAI SDK. Para la referencia a nivel de endpoint, consulte la cachedContents API.
Cuándo usar el caché explícito
| Escenario | Recomendación |
|---|---|
| Preguntas y respuestas repetidas sobre un gran contexto fijo (QA de documentos, asistente de código) | ✅ Caché explícito |
| Necesita aciertos garantizados y no puede tolerar fallos ocasionales | ✅ Caché explícito |
| Solicitudes cortas, poco frecuentes y con prefijos variables | ❌ El caché implícito es suficiente; no hay objeto de caché que administrar |
| El contexto cambia cada vez | ❌ El caché no aporta valor |
El caché explícito requiere que el contenido cacheado alcance un umbral mínimo de tokens (aproximadamente 2.048–4.096 tokens, según el modelo). El contenido demasiado pequeño fallará al crearse o no aportará beneficio.
Endpoints
OfoxAI ofrece los endpoints completos de cachedContents bajo el protocolo nativo de Gemini:
POST https://api.ofox.ai/gemini/v1beta/cachedContents # Crear
GET https://api.ofox.ai/gemini/v1beta/cachedContents/{id} # Consultar
DELETE https://api.ofox.ai/gemini/v1beta/cachedContents/{id} # EliminarPara referenciar un caché en la generación de contenido, use el endpoint estándar generateContent y agregue cachedContent al cuerpo de la solicitud:
POST https://api.ofox.ai/gemini/v1beta/models/{model}:generateContentAutenticación
Al igual que los demás endpoints de Gemini, use el header x-goog-api-key:
x-goog-api-key: <su OFOXAI_API_KEY>Flujo completo
A continuación se muestra un flujo completo: crear caché → referenciar el caché para generar → eliminar el caché.
1. Crear un caché
Coloque en contents el gran contexto que desea reutilizar y especifique model y ttl (tiempo de vida):
Python
from google import genai
from google.genai import types
client = genai.Client(
api_key="<su OFOXAI_API_KEY>",
http_options={"api_version": "v1beta", "base_url": "https://api.ofox.ai/gemini"},
)
# Un documento grande reutilizado repetidamente (debe alcanzar el umbral mínimo de tokens)
LONG_DOCUMENT = open("knowledge_base.txt").read()
cache = client.caches.create(
model="google/gemini-3.1-pro-preview",
config=types.CreateCachedContentConfig(
contents=[LONG_DOCUMENT],
ttl="600s", # el caché vive 10 minutos
),
)
print(cache.name) # cachedContents/xxxxxxxx —— el identificador para referencias posterioresEl name devuelto (con la forma cachedContents/xxxxxxxx) es el identificador del caché. Guárdelo para las referencias y la administración posteriores.
2. Referenciar el caché para generar
Referencie el identificador del caché mediante cachedContent en una solicitud generateContent; contents solo necesita la nueva pregunta de este turno:
Python
response = client.models.generate_content(
model="google/gemini-3.1-pro-preview",
contents="Basándote en el documento anterior, resume tres puntos clave",
config=types.GenerateContentConfig(
cached_content=cache.name, # referencia el caché
),
)
print(response.text)
# Acierto de caché: la parte cacheada se cobra a la tarifa de «lectura» más baja
print(response.usage_metadata.cached_content_token_count)En un acierto, el usageMetadata.cachedContentTokenCount de la respuesta muestra cuántos tokens provienen del caché. El mismo caché puede referenciarse cualquier número de veces, cada una con un acierto determinista, hasta que expire.
3. Consultar y eliminar
Consulte los metadatos del caché, o elimínelo de forma proactiva cuando ya no lo necesite (sin esperar a que el TTL expire):
Python
# Consultar
info = client.caches.get(name=cache.name)
print(info.expire_time)
# Eliminar
client.caches.delete(name=cache.name)Consultar / eliminar no requieren volver a pasar model. OfoxAI localiza el caché únicamente con el identificador.
Ciclo de vida y TTL
Especifique el tiempo de vida mediante ttl al crear, como una cadena de segundos terminada en s (p. ej. "600s").
| Parámetro | Valor |
|---|---|
| TTL mínimo / por defecto | 600s (10 minutos) |
| TTL máximo | 3600s (1 hora) |
- Dentro del TTL, el caché puede referenciarse repetidamente con aciertos deterministas.
- Tras expirar el TTL, el caché se invalida automáticamente y referenciarlo dará error (el caché ya no existe).
- Puede
deleteen cualquier momento para liberarlo anticipadamente.
Referenciar un caché expirado o eliminado falla. Maneje el caso de «caché invalidado» en el lado del cliente (capture el error y vuelva a crear el caché, o recurra a una solicitud normal).
Facturación
El caché explícito se factura de forma transparente por token, en tres partes:
| Etapa | Fórmula | Notas |
|---|---|---|
| Crear caché | totalTokenCount × tarifa cache_write | Se cobra a la tarifa de «escritura en caché»; totalTokenCount proviene del usageMetadata de la respuesta de creación, es decir, el número de tokens cacheados |
| Acierto por referencia | cachedContentTokenCount × tarifa cache_read | La parte cacheada se cobra a la tarifa de «lectura de caché», aproximadamente 0.10x del precio estándar de entrada, mucho más barato que reenviar todo |
| Nuevo contenido por referencia | El nuevo prompt / salida de cada turno se cobra a tarifas estándar | Es decir, cada nueva pregunta que hace y la nueva respuesta del modelo |
El modelo económico: paga una tarifa de «escritura» en la creación, y luego cada referencia cobra el contenido cacheado a la tarifa de «lectura» más baja, ahorrando el costo de «reenviar todo el contexto a precio completo». Cuantas más referencias, más ahorra. Los precios unitarios cache_write / cache_read de cada modelo son los del catálogo de modelos y las estadísticas de uso de su consola.
Mejora en OfoxAI: enrutamiento determinista
OfoxAI balancea la carga entre múltiples regiones de GCP / proyectos de Vertex. Los cachés explícitos son region-scoped (vinculados a la región): un caché creado en un proyecto de GCP debe referenciarse en ese mismo proyecto, de lo contrario dará 404.
OfoxAI gestiona esto automáticamente: al crear el caché, registra la instancia upstream a la que está vinculado, y luego busca esa instancia por el identificador del caché y fija de forma rígida las referencias de vuelta al mismo upstream. Independientemente de si su solicitud de referencia lleva un identificador de usuario o de cómo se programe la carga, las referencias se enrutan con precisión al proyecto que creó el caché, con cero deriva. No necesita preocuparse por la distribución de regiones subyacente.
La propiedad del caché está protegida: un identificador de caché solo puede ser referenciado / consultado / eliminado por la API Key (y el mismo propietario) que lo creó; el acceso entre cuentas se rechaza (403).
Caché explícito vs. caché implícito
| Dimensión | Caché implícito (automático) | Caché explícito (cachedContents) |
|---|---|---|
| Activación | Detecta automáticamente prefijos repetidos | Crea de forma activa un objeto de caché y lo referencia |
| Determinismo del acierto | De mejor esfuerzo; un pequeño cambio de prefijo puede fallar | Determinista; siempre acierta mientras no haya expirado |
| Administración | Ninguna | Crear / referenciar / eliminar un identificador |
| Ideal para | Contenido corto con prefijos repetidos ocasionalmente | Contexto grande, estable y reutilizado repetidamente |
| Facturación | Descuento de tarifa de lectura en el acierto | Tarifa de escritura al crear + descuento de tarifa de lectura al referenciar |
Ambos pueden combinarse. Para las solicitudes cotidianas, deje que el caché implícito se active automáticamente; para el contexto que seguramente reutilizará repetidamente, use el caché explícito para asegurar los aciertos. Consulte Caché de prompts para los detalles del caché implícito.