Introducción
Si eres un desarrollador que utiliza LLMs en sus aplicaciones, seguramente sabes que las consultas (prompts) que envías son esenciales para obtener respuestas valiosas y adaptadas a tu objetivo. Pero, ¿sabías que hay una forma de optimizar tus peticiones y mejorar la eficiencia general de tu proyecto? Aquí es donde entra en juego el concepto de Prompt Caching (caché de prompts).
El Prompt Caching es una técnica que permite almacenar las respuestas generadas por la API para ciertos prompts y reutilizarlas cuando sea necesario. Esto puede ser un cambio radical en la forma en que optimizas tu aplicación, reduciendo costos y tiempos de espera, y asegurando una experiencia más fluida para los usuarios.
¿Qué es el Prompt Caching?
Imagina que tienes una aplicación que constantemente hace las mismas preguntas a la API, como una IA para responder preguntas frecuentes. En lugar de hacer la misma solicitud una y otra vez (lo que consume recursos y puede generar tiempos de espera innecesarios), el Prompt Caching te permite guardar esas respuestas para reutilizarlas.
Es decir, cuando se detecta que un usuario realiza una consulta repetida, la API puede devolver una respuesta guardada previamente en lugar de generar una nueva. Esto no solo optimiza el tiempo de procesamiento, sino que también ayuda a reducir costos si estás trabajando con límites de uso o un presupuesto ajustado.
¿Por qué deberías usarlo?
Hay varias razones por las que el Prompt Caching es una herramienta valiosa:
- Ahorro de costes: Al no tener que generar una respuesta nueva cada vez que se hace una solicitud repetida, reduces la cantidad de tokens consumidos, lo que se traduce en menos costos.
- Mejora de la velocidad: Al obtener una respuesta almacenada, los tiempos de espera disminuyen notablemente, ya que no necesitas que el LLM procese el prompt de nuevo desde cero.
- Consistencia: Si tu aplicación depende de respuestas consistentes, el Prompt Caching asegura que los usuarios reciban las mismas respuestas a las mismas preguntas, sin variaciones involuntarias.
Implementación de caché con LangChain
Caché en memoria
from langchain_core.globals import set_llm_cache
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
%%time
from langchain_core.caches import InMemoryCache
set_llm_cache(InMemoryCache())
# La primera vez no se usa la cache y será más lento
llm.invoke("¿Quién creó el concepto de Transformer en IA?")
CPU times: total: 31.2 ms
Wall time: 2.39 s
%%time
llm.invoke("¿Quién creó el concepto de Transformer en IA?")
CPU times: total: 0 ns
Wall time: 0 ns
Caché con SQLite cache
# Ahora usaremos SQLite cache
from langchain_community.cache import SQLiteCache
set_llm_cache(SQLiteCache(database_path=".langchain.db"))
%%time
# La primera vez no se usa la cache y será más lento
llm.invoke("¿Quién creó el concepto de Transformer en IA?")
CPU times: total: 15.6 ms
Wall time: 2.92 s
%%time
# La primera vez no se usa la cache y será más lento
llm.invoke("¿Quién creó el concepto de Transformer en IA?")
CPU times: total: 609 ms
Wall time: 609 ms
Usando Prompt Caching de OpenAI
La API de OpenAI implementa el Prompt Caching de manera automática lo que reduce la latencia en un 80% y los costes en un 50% para prompts de más de 1024 tokens.
Prompt Caching está activo en:
- gpt-4o (excluidos gpt-4o-2024-05-13 y chatgpt-4o-latest)
- gpt-4o-mini
- o1-preview
- o1-mini
Estructuración del prompt
Para hacer uso de esta cache, OpenAI analiza si el prefijo del prompt coincide con la caché existente. Esto implica que la parte que no cambie como pueden ser las instrucciones o el system prompt sea siempre idéntico y la información única de cada petición se añada al final.
Así puedes usar la cache de prompts de OpenAI:
- Asegurate de que estás usando un modelo que lo soporte
- La longitud del prompt debe ser mayor de 1024 tokens
- Revisa que tus peticiones estén incluyendo el valor de cached_tokens y que el coste sea reducido
No necesitas nada más, con eso tendrás respuestas de LLMs más rápidas y ahorrando costes.