Semantic Caching
La caché semántica devuelve una respuesta de LLM almacenada cuando una nueva consulta significa lo mismo que otra anterior; compara incrustaciones para omitir llamadas al modelo y reducir costes.
La caché semántica almacena las respuestas de un modelo de lenguaje grande (LLM) u otro modelo generativo y las reutiliza para solicitudes nuevas que significan lo mismo que una anterior, aunque la redacción sea distinta. La caché convierte cada prompt en una representación vectorial, encuentra el prompt almacenado más parecido y devuelve su respuesta guardada cuando la similitud supera un umbral. Un acierto evita por completo la llamada al modelo, de modo que la latencia baja a milisegundos y la solicitud no consume tokens. Como la coincidencia se basa en el significado, «He olvidado mi contraseña» y «¿Cómo puedo restablecer mi contraseña?» comparten una respuesta almacenada, que una caché de coincidencia exacta basada en el texto del prompt tendría que guardar dos veces. Zilliz publicó en 2023 la biblioteca de código abierto GPTCache para este patrón, y ahora las bases de datos vectoriales y las pasarelas de API lo ofrecen como función integrada.
Cómo funciona una caché semántica#
Un modelo de representación vectorial de oraciones codifica el prompt entrante y una búsqueda vectorial lo compara con las representaciones vectoriales de los prompts respondidos anteriormente, normalmente mediante la similitud del coseno. Las cachés pequeñas caben en memoria, y las grandes residen en una base de datos vectorial con un índice aproximado de vecinos más cercanos. Si no hay coincidencia, el modelo genera una respuesta nueva y almacena juntos la representación vectorial del nuevo prompt y la respuesta, normalmente con una fecha de caducidad.
La clave de la caché debe abarcar todo lo demás que pueda cambiar la respuesta correcta. Las respuestas generadas con un prompt de sistema, una versión del modelo, un nivel de permisos de usuario o un conjunto de documentos recuperados diferentes se almacenan en ámbitos separados, para que la respuesta en caché de un cliente nunca se entregue a otro. La vigencia exige el mismo cuidado: cuando cambian un precio, una política o un documento fuente, las entradas basadas en la versión anterior siguen coincidiendo con los nuevos prompts. Por eso, cada entrada tiene un tiempo de vida y se vacía el ámbito afectado cuando cambian sus datos de origen.
Cómo elegir el umbral de similitud#
El umbral determina cuánto pueden diferir dos prompts para compartir una respuesta. Este ejemplo usa el modelo all-MiniLM-L6-v2 de Sentence Transformers como codificador de una caché de tres entradas:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("all-MiniLM-L6-v2")
# Earlier prompts whose answers are already stored in the cache
cached = ["How do I reset my password?", "What are your opening hours?", "How do I cancel my subscription?"]
cached_embeddings = model.encode(cached)
# Each new prompt reuses the closest cached answer if it clears the threshold
queries = ["I forgot my password, how can I change it?", "When does the store open?", "How do I cancel my order?"]
for query in queries:
query_embedding = model.encode(query)
scores = model.similarity(query_embedding, cached_embeddings)[0]
best = scores.argmax().item()
status = "hit" if scores[best] >= 0.7 else "miss"
print(f"{query} -> {cached[best]} ({scores[best]:.2f}, {status})")La paráfrasis sobre la contraseña obtiene una puntuación de 0,89 y acierta. La paráfrasis sobre el horario de apertura solo obtiene 0,61 y no coincide. «¿Cómo cancelo mi pedido?» obtiene 0,71 frente a «¿Cómo cancelo mi suscripción?» y devolvería instrucciones incorrectas. La similitud entre representaciones vectoriales mide las palabras y los temas compartidos, así que ningún umbral único distingue estos tres casos. Las cachés de producción reducen el problema mediante el ajuste fino del codificador con pares de paráfrasis del tráfico propio, la configuración de umbrales por categoría o el envío de cada posible coincidencia a un reordenador que puntúa los dos prompts juntos antes de servir la respuesta almacenada.
Dónde encaja la caché semántica#
La caché semántica resulta útil cuando muchos usuarios hacen las mismas preguntas y las respuestas cambian despacio: chatbots de soporte, mesas de ayuda internas y asistentes de generación aumentada por recuperación (RAG) sobre documentación estable. Aporta poco en solicitudes personalizadas, sujetas a cambios frecuentes o creativas, porque una respuesta reutilizada sería incorrecta o repetitiva.
Otras dos cachés en el servicio de LLM funcionan en capas distintas:
- Caché de prompts: El servidor del modelo almacena los estados calculados de un prefijo de prompt repetido exactamente, lo que acorta la fase de prefill, y el modelo sigue generando una respuesta nueva.
- Caché KV: Las claves y los valores de los tokens anteriores se conservan durante una generación, de modo que cada token nuevo evita volver a calcularlos.
La búsqueda semántica utiliza la misma consulta de representaciones vectoriales para recuperar documentos, mientras que una caché semántica la usa para recuperar respuestas ya generadas, a menudo dentro de una pasarela de IA situada entre las aplicaciones y los proveedores de modelos.
Las imágenes pueden servir como claves de caché del mismo modo. embed() de Ultralytics YOLO devuelve un vector de características para cada imagen, así que un modelo YOLO26 entrenado para la clasificación de imágenes puede proporcionar la clave de búsqueda que permite que fotogramas de cámara casi duplicados reutilicen la descripción anterior de un modelo de visión y lenguaje.










