Aprovechando el almacenamiento en caché de contexto para optimizar el uso de LLM de larga duración

Descubre cómo aprovechar la función de almacenamiento en caché de contexto de Google en la API de Gemini para optimizar el uso de LLM de larga duración, reducir el tiempo de procesamiento y los costos. Aprende los detalles de implementación y los beneficios potenciales para los desarrolladores que construyen sobre la API de Gemini.

20 de febrero de 2025

party-gif

Desbloquea el poder de los LLM de contexto largo con la API Gemini de Google y su nueva función de almacenamiento en caché de contexto. Descubre cómo esta solución innovadora puede reducir significativamente el tiempo de procesamiento, la latencia y los costos, facilitando el uso de grandes conjuntos de datos en tus aplicaciones de IA. Explora los detalles de implementación práctica y aprende a aprovechar eficazmente esta tecnología revolucionaria.

Comprender el almacenamiento en caché y sus beneficios

La reciente adición de Google de almacenamiento en caché de contexto a su API Gemini tiene como objetivo abordar algunas de las principales limitaciones de los modelos de lenguaje de contexto largo (LLM). Si bien los LLM pueden mantener una cantidad significativa de información, sufren de varios problemas:

  • Aumento del tiempo de procesamiento: Con cada consulta, se debe enviar todo el contexto al LLM, lo que resulta en procesar una gran cantidad de datos, lo que aumenta el tiempo de procesamiento.
  • Alta latencia: Las grandes transferencias de datos requeridas para cada consulta conducen a una alta latencia.
  • Mayores costos: Dado que los proveedores de API cobran en función del número de tokens, el aumento de la transferencia de datos conduce a mayores costos.

La función de almacenamiento en caché de contexto de Google intenta mitigar estos problemas. Así es como funciona:

  1. Inicializar la caché: Proporciona una instrucción del sistema o un contexto grande (por ejemplo, documentos, archivos de video, archivos de audio) que desea almacenar en caché.
  2. Identificación de la caché: Cada caché tiene un identificador único, que se puede considerar como el nombre de la caché, y un parámetro de "tiempo de vida" para determinar el vencimiento de la caché.
  3. Recuperación de la caché: Cuando la API Gemini recibe una consulta de usuario, analiza los conjuntos de datos de caché disponibles, recupera la caché apropiada y la combina con la consulta del usuario para su procesamiento.

Este enfoque ofrece varios beneficios:

  • Reducción del tiempo de procesamiento: Al reutilizar los datos almacenados en caché, el sistema solo necesita procesar la consulta del usuario, reduciendo el tiempo de procesamiento general.
  • Menor latencia: Enviar solo la consulta del usuario, en lugar de todo el contexto, da como resultado una latencia más baja.
  • Ahorro de costos: Reducir el número de tokens enviados con cada consulta conduce a menores costos.

Google afirma que el uso del almacenamiento en caché para hasta 2,128,000 tokens puede resultar en casi cuatro veces menos costo en comparación con enviar todo el contexto con cada consulta.

Es importante tener en cuenta que existen algunas limitaciones y consideraciones al usar el almacenamiento en caché de contexto:

  • Recuento mínimo de tokens de entrada: El recuento mínimo de tokens de entrada para el almacenamiento en caché de contexto se establece actualmente en 32,000 tokens.
  • Recuento máximo de tokens: El número máximo de tokens que se pueden almacenar en caché está limitado por la ventana de contexto máxima del modelo, que es de aproximadamente 2 millones de tokens tanto para los modelos Gemini Pro como Flash.
  • Costo de almacenamiento: Existe un costo de almacenamiento asociado con el contenido almacenado en caché, que es de $1 por millón de tokens por hora.

Explorar el proceso de almacenamiento en caché

La reciente adición de Google del almacenamiento en caché de contexto a la API Gemini tiene como objetivo abordar las limitaciones de los modelos de lenguaje de contexto largo. Al almacenar en caché el contexto, el sistema puede reducir el tiempo de procesamiento, la latencia y el costo asociados con enviar todo el contexto con cada consulta.

El proceso de almacenamiento en caché funciona de la siguiente manera:

  1. Inicializar la caché: Proporciona una instrucción del sistema o un contexto grande (por ejemplo, documentos, archivos de video, archivos de audio) que desea almacenar en caché. Cada caché tiene un identificador único y un parámetro de "tiempo de vida" para determinar el vencimiento de la caché.

  2. Almacenamiento en caché: El sistema de almacenamiento interno de la API Gemini, optimizado para una rápida recuperación, almacena los datos en caché.

  3. Procesamiento de consultas: Cuando la API Gemini recibe una consulta de usuario, analiza los conjuntos de datos de caché disponibles, identifica la caché apropiada en función del identificador único y verifica la validez de la caché revisando el parámetro de "tiempo de vida". Luego, la API combina los datos en caché y la consulta del usuario como entrada para su procesamiento.

  4. Reducción de costos y latencia: Al usar datos en caché, el sistema reduce el número de tokens enviados con cada consulta, lo que conduce a un menor tiempo de procesamiento y costo. Google estima que el uso del almacenamiento en caché para hasta 2,128,000 tokens puede resultar en casi cuatro veces menos costo en comparación con enviar todo el contexto con cada consulta.

  5. Costo de almacenamiento: El costo de almacenamiento para el contenido en caché es de $1 por millón de tokens por hora. El costo total depende de factores como el recuento de tokens en caché y el parámetro de "tiempo de vida".

  6. Modelos compatibles: El almacenamiento en caché de contexto es compatible actualmente con los modelos Gemini Pro y Gemini Flash.

  7. Tokens mínimos y máximos: El recuento mínimo de tokens de entrada para el almacenamiento en caché de contexto es de 32,000 tokens, y el máximo es la ventana de contexto máxima del modelo, que es de aproximadamente 2 millones de tokens tanto para Gemini Pro como para Gemini Flash.

Comprender los límites y costos de los tokens

Al usar la función de almacenamiento en caché de contexto en la API Gemini, hay algunas consideraciones importantes sobre los límites de tokens y los costos:

  1. Recuento mínimo de tokens de entrada: El recuento mínimo de tokens de entrada para el almacenamiento en caché de contexto es de 32,000 tokens. Esto significa que deberá almacenar en caché al menos 32,000 tokens para que la función funcione.

  2. Recuento máximo de tokens: El número máximo de tokens que puede almacenar en caché es la ventana de contexto máxima del modelo dado. Para los modelos Gemini Pro y Flash, esto es de aproximadamente 2 millones de tokens.

  3. Costo de almacenamiento: El costo de almacenamiento para el contenido en caché es de $1 por millón de tokens por hora. Este costo se suma a los cargos regulares de uso de la API.

  4. Tiempo de vida (TTL): Al crear una caché, puede especificar un parámetro de "tiempo de vida" para determinar cuánto tiempo se debe mantener la caché. Si no proporciona un valor, el valor predeterminado es de 1 hora. El TTL mínimo es de 60 segundos.

  5. Recuentos de tokens: Al usar el contenido en caché, el recuento total de tokens incluye tanto los tokens en caché como los nuevos tokens de entrada de la consulta del usuario. Este recuento de tokens combinado es el que se usa para fines de facturación.

  6. Disponibilidad del almacenamiento en caché: El almacenamiento en caché de contexto es compatible actualmente con los modelos Gemini Pro y Flash.

Implementar el almacenamiento en caché con ejemplos de código

Para implementar el almacenamiento en caché con la API Gemini, deberemos seguir estos pasos:

  1. Instalar los paquetes requeridos:

    !pip install google-generative-ai-client pdfplumber
    
  2. Importar los módulos necesarios:

    from google.generative.v1 import GenerativeAIClient
    from google.generative.v1.types import CachedContent
    import markdown
    import pdfplumber
    
  3. Configurar el cliente de la API Gemini con tu clave de API de Google:

    api_key = "your_google_api_key"
    client = GenerativeAIClient(credentials=api_key)
    
  4. Cargar el contenido del PDF y convertirlo a una sola cadena:

    with pdfplumber.open("path/to/your/pdf/file.pdf") as pdf:
        pages = [page.extract_text() for page in pdf.pages]
        content = "\n".join(pages)
    print(f"Total pages: {len(pages)}")
    print(f"Total words: {len(content.split())}")
    print(f"Total tokens: {len(content.split())}")
    
  5. Crear un objeto de contenido en caché y almacenarlo:

    cached_content = CachedContent(
        model_name="gemini-1.5-flash",
        system_instruction="You are an expert on rack systems. Answer questions based on the provided text.",
        content=content,
        time_to_live_seconds=7200  # 2 hours
    )
    model = client.from_cached_content(cached_content, name="my-rack-system-cache")
    
  6. Usar el modelo en caché para responder preguntas:

    queries = [
        "What is rack? What are the main components?",
        "How to use HuggingFace in LangChain? Provide code examples.",
        "How does routing work in LangChain?"
    ]
    
    for query in queries:
        response = model.generate_text(prompt=query)
        print(markdown.markdown(response.generated_text))
        print(f"Total tokens used: {response.total_tokens}")
    
  7. Administrar la caché:

    # Actualizar el tiempo de vida de la caché
    model.update_cached_content(time_to_live_seconds=14400)  # 4 hours
    
    # Listar todo el contenido en caché
    cached_contents = client.list_cached_contents()
    for cached_content in cached_contents:
        print(f"Name: {cached_content.name}")
        print(f"Created: {cached_content.created_timestamp}")
        print(f"Expires: {cached_content.expires_timestamp}")
    
    # Eliminar un contenido en caché
    client.delete_cached_content(name="my-rack-system-cache")
    

Este código demuestra cómo implementar el almacenamiento en caché con la API Gemini, incluyendo la carga de contenido de un archivo PDF, la creación de un objeto de contenido en caché, el uso del modelo en caché para responder preguntas y la administración de la caché (actualización del tiempo de vida y eliminación de contenido en caché).

Administrar las actualizaciones y el vencimiento de la caché

Para administrar las actualizaciones y el vencimiento de la caché, se cubren los siguientes puntos clave:

  1. Actualizar el tiempo de vida (TTL) de la caché: Puede actualizar el TTL de una caché llamando a la función update() en el objeto de caché y proporcionando un nuevo valor de TTL. Esto le permite extender el tiempo de vencimiento del contenido almacenado en caché.

  2. Ver los metadatos de la caché: Si bien no puede recuperar o ver directamente el contenido almacenado en caché, puede acceder a los metadatos de la caché, como el número total de tokens utilizados, el número de tokens de la consulta y el número de tokens candidatos generados por el modelo.

  3. Listar el contenido en caché: Puede listar todo el contenido en caché que ha creado accediendo al atributo cache_contents del cliente Gemini. Esto le mostrará los nombres, las horas de creación y los tiempos de vencimiento de cada caché.

  4. Eliminar cachés: Si desea eliminar una caché antes de su tiempo de vencimiento, puede llamar a la función delete() en el objeto de caché. Esto eliminará el contenido almacenado en caché del sistema.

Al administrar las actualizaciones y el vencimiento de la caché, puede optimizar el uso de la función de almacenamiento en caché para reducir los costos y mejorar el rendimiento al trabajar con la API Gemini.

Conclusión

La introducción del almacenamiento en caché de contexto en la API Gemini de Google es un desarrollo significativo que aborda algunas de las principales limitaciones de los modelos de lenguaje de contexto largo. Al permitir a los usuarios almacenar en caché grandes cantidades de datos de contexto, la API puede reducir el tiempo de procesamiento, disminuir la latencia y reducir los costos asociados con la facturación basada en tokens.

El sistema de almacenamiento en caché funciona permitiendo a los usuarios inicializar una caché con un gran conjunto de datos, como documentos, archivos de video o archivos de audio. Cada caché tiene un identificador único y un parámetro de tiempo de vida, que determina cuánto tiempo se almacenará la caché. Cuando se recibe una consulta de usuario, la API analiza las cachés disponibles, combina los datos en caché con la consulta del usuario y procesa la entrada para generar una respuesta.

Los beneficios de este enfoque son dobles. En primer lugar, al enviar solo la consulta del usuario en lugar de todo el contexto, la cantidad de datos transferidos se reduce significativamente, lo que conduce a una menor latencia. En segundo lugar, los ahorros de costos pueden ser sustanciales, ya que la API cobra por token, y el almacenamiento en caché puede reducir el número de tokens requeridos para cada consulta en hasta cuatro veces.

Si bien la implementación actual del almacenamiento en caché de contexto en la API Gemini tiene algunas limitaciones, como un recuento mínimo de tokens de entrada de 32,000, es un paso prometedor hacia adelante. A medida que la tecnología madure, podemos esperar ver más mejoras, como requisitos de tokens mínimos más bajos e incluso una latencia potencialmente más baja.

En general, la introducción del almacenamiento en caché de contexto en la API Gemini es un desarrollo bienvenido que puede beneficiar enormemente a los desarrolladores que trabajan con modelos de lenguaje a gran escala. Al abordar algunos de los desafíos clave, esta función tiene el potencial de desbloquear nuevos casos de uso e impulsar una mayor innovación en el campo del procesamiento del lenguaje natural.

Preguntas más frecuentes