Implemente prompt caching mediante LangChain para crear aplicaciones de LLM eficientes

Autor

Shalini Harkar

Lead AI Advocate

¿Qué es prompt caching?

Prompt caching es una forma de almacenar y luego reutilizar las respuestas generadas a partir de instrucciones ejecutadas cuando se trabaja con modelos de lenguaje, como los modelos IBM® Granite. Si se vuelve a encontrar la misma entrada (instrucción), en lugar de realizar una nueva llamada a la API, la aplicación recuperará la respuesta previamente almacenada en la caché de instrucciones.

Piense en prompt caching como una especie de "memoria" para su aplicación. El sistema conserva los resultados de consultas anteriores para ahorrar tiempo de cálculo al no tener que realizar solicitudes repetidas en la misma entrada.

¿Por qué es importante?

Prompt caching es importante porque evita las llamadas repetidas a la interfaz de programación de aplicaciones (API) al reutilizar las respuestas existentes para instrucciones repetidas idénticas. Esta capacidad da como resultado un tiempo de respuesta más rápido, resultados congruentes y un menor uso de la API, lo que es útil para mantenerse dentro de los límites de velocidad. También ayuda a escalar el flujo y a crear resiliencia durante las interrupciones. Prompt caching es una característica crítica que agrega valor para cualquier aplicación de IA rentable, eficiente y fácil de usar.

Requisitos previos

  1. Necesita una cuenta de IBM® Cloud para crear un proyecto watsonx.ai .

  2. También necesita la versión 3.12.7 de Python

Pasos 

Paso 1: Configurar el entorno

Si bien puede elegir entre varias herramientas, este tutorial lo guiará a través de cómo configurar una cuenta de IBM para usar un Jupyter Notebook.

  1. Inicie sesión en watsonx.ai mediante su cuenta de IBM Cloud.

  2. Cree un proyecto watsonx.ai. Puede obtener su ID de proyecto desde dentro de su proyecto. Haga clic en la pestaña Manage. Luego, copie el ID del proyecto de la sección Details de la página  General. Necesita este ID para este tutorial.

  3. Cree un Jupyter NotebookEste paso abre un entorno de Jupyter Notebook donde puede copiar el código de este tutorial. También puede descargar este notebook en su sistema local y cargarlo en su proyecto watsonx.ai como activo. Para ver más tutoriales de Granite, consulte la Comunidad de IBM® Granite.

Paso 2. Configurar una instancia de watsonx.ai Runtime y una clave de API

  1. Cree una instancia de servicio watsonx.ai Runtime (elija el plan Lite, que es una instancia gratuita).

  2. Genere una clave de API.

  3. Asocie el servicio de watsonx.ai Runtime al proyecto que creó en watsonx.ai.

Paso 3: Instalar los paquetes

Necesitamos bibliotecas para trabajar con la infraestructura langchain y WatsonxLLM. Primero instalemos los paquetes necesarios. Este tutorial se creó con Python 3.12.7

Nota: Si está utilizando una versión anterior de pip, puede usar el comando pip install --upgrade pip para instalar fácilmente los paquetes más recientes que podrían no ser compatibles con versiones anteriores. Pero si ya está utilizando la última versión o ha actualizado recientemente sus paquetes, puede omitir este comando.

!pip install -q langchain langchain-ibm langchain_experimental langchain-text-splitters langchain_chroma transformers bs4 langchain_huggingface sentence-transformers

Paso 4: Importar las bibliotecas necesarias

El módulo os se utiliza para acceder a variables de entorno, como credenciales de proyecto o claves de API.

WatsonxLLM es un módulo de langchain_ibm que integra IBM Watson LLM para generar resultados a partir de modelos de IA generativa.

ChatWatsonx Permite interacciones basadas en chat mediante IBM watsonx a través de LangChain.

SimpleDirectoryReader es para cargar y leer documentos desde un directorio para indexarlos con LlamaIndex.

GenParams contiene claves de metadatos para configurar los parámetros de generación de texto de Watsonx.

SQLiteCache permite configurar una base de datos SQLite local.cache.db para evitar llamadas API redundantes y acelerar el desarrollo y las pruebas.

Necesitamos algunas bibliotecas y módulos para este tutorial. Asegúrese de importar los siguientes y, si no están instalados, una instalación rápida de pip resuelve el problema.

import os
import getpass
import requests
import random
import json
from typing import Dict, List
from langchain_ibm import WatsonxLLM
from ibm_watsonx_ai.metanames import GenTextParamsMetaNames as GenParams
from langchain_ibm import WatsonxLLM
from langchain_ibm import ChatWatsonx
from llama_index.core import SimpleDirectoryReader

Paso 5: Leer los datos de texto

from llama_index.core import SimpleDirectoryReader

documents = SimpleDirectoryReader(
input_files=["~/Artificial Intelligence/Generative_AI/files/FIle2.txt"],
).load_data()

document_text = documents[0].text
print(document_text[:200] + "...")

Paso 6: Configurar las credenciales

Este código configura las credenciales para acceder a la API de IBM Watson Machine Learning (WML) y ayuda a garantizar que el ID del proyecto esté configurado correctamente.

  • Se crea un diccionario de credenciales con la URL del servicio WML y la clave de API. La clave de API se recopila de forma segura mediante getpass.getpass para evitar exponer información confidencial.
  • el código intenta obtener el PROJECT_ID de las variables de entorno mediante os.environ. Si no se encuentra PROJECT_ID, se le solicita al usuario que lo ingrese manualmente a través de la entrada.
credentials = {
"url": "https://us-south.ml.cloud.ibm.com", # Replace with the correct region if needed
"apikey": getpass.getpass("Please enter your WML API key (hit enter): ")
}

# Set up project_id
try:
project_id = os.environ["PROJECT_ID"]
except KeyError:
project_id = input("Please enter your project_id (hit enter): ")

Paso 7: Inicializar el modelo de lenguaje grande

Este código inicializa watsonxLLM IBM para su uso en la aplicación:

  1. Este código crea una instancia de watsonxLLM mediante el modelo ibm/granite-3-8b-instruct (Granite-3.1-8B-Instruct) diseñado para tareas de IA generativa basadas en instrucciones.
  2. Los valores url, apikey y project_id de las credenciales configuradas previamente se pasan para autenticar y conectarse al servicio IBM Watson LLM.
  3. Configura el parámetro max_new_tokens para limitar el número de tokens generados por el modelo en cada respuesta (2000 tokens en este caso).

Para aprender más sobre los parámetros del modelo, como los límites mínimos y máximos de token, consulte la documentación.

llm = WatsonxLLM(
model_id= "ibm/granite-3-8b-instruct",
url=URL,
apikey=WATSONX_APIKEY,
project_id=WATSONX_PROJECT_ID,
params={
GenParams.DECODING_METHOD: "greedy",
GenParams.TEMPERATURE: 0,
GenParams.MIN_NEW_TOKENS: 5,
GenParams.MAX_NEW_TOKENS: 2000,
GenParams.REPETITION_PENALTY:1.2,
GenParams.STOP_SEQUENCES: ["\n\n"]
}
)

Paso 8: Configure la caché de SQLite para obtener respuestas de LLM más rápidas

SQLiteCache es una herramienta de almacenamiento en caché persistente ofrecida por LangChain que almacena las respuestas de las llamadas LLM en un archivo de base de datos SQLite. SQLiteCache reduce de forma inteligente el tiempo de CPU almacenando cálculos costosos, lo que significa que se centra en recuperar datos en lugar de volver a calcularlos. En vez de volver a realizar todo el proceso, simplemente extrae los resultados del disco, lo que lo hace eficiente, confiable y reutilizable.

La figura ilustra con prompt caching cómo los resultados se cargan instantáneamente desde el disco; sin él, cada consulta pierde tiempo en cálculos redundantes.

from langchain.cache import SQLiteCache
from langchain.globals import set_llm_cache
set_llm_cache(SQLiteCache(database_path=".langchain.db"))
%%time
prompt = "System: You are a helpful assistant.\nUser: Why did Paul Graham start YC?\nAssistant:"
resp = llm.invoke(prompt)
print(resp)

En este caso, la CPU solo funcionó durante 22 ms, pero el tiempo real transcurrido fue de 1.43 segundos.

Este ejemplo sugiere que la mayor parte del tiempo se dedicó a esperar, probablemente para operaciones de E/S (por ejemplo, lectura y escritura de disco, acceso a la red o llamada a la API)

Ahora, ejecutemos el modelo por segunda vez con la instrucción y veamos el tiempo de respuesta.

%%time
llm.predict(resp)

Claramente, con SQLiteCache, la CPU se utiliza durante solo 7.26 ms, pero el tiempo de pared fue de 6.15 segundos.

Esto apunta claramente al bloqueo de dependencias externas (como esperar una respuesta de un servidor).

Conclusión

Prompt caching acelera y reduce el costo de las solicitudes de API a modelos de lenguaje grande, como GPT-4o. Solicita contenido en caché, como tokens de entrada, tokens de salida, incorporaciones y mensajes del usuario, una instrucción del sistema o los resultados de una función, que ahora utiliza un contenido almacenado en caché en lugar de solicitudes de red para una nueva revisión. Este método proporciona precios más bajos, latencia de respuesta optimizada e indicadores clave de rendimiento (KPI) mejorados.

Prompt caching puede ser beneficioso para los chatbots, los sistemas de RAG, el ajuste y los asistentes de código. Una estrategia de almacenamiento en caché sólida que incluya funciones como lectura y escritura de caché, mensaje del sistema, control de caché y tiempo de vida (TTL) adecuado mejorará las tasas de aciertos de caché y reducirá las tasas de fallas de caché.

El uso constante de los mismos tokens, prefijo y uso de instrucciones del sistema ayuda a un rendimiento constante de las instrucciones en conversaciones de varios turnos y solicitudes posteriores. Independientemente de usar Python, un SDK o trabajar con OpenAI u otro proveedor, comprender cómo funciona prompt caching le permitirá implementarlo mejor para muchos casos de uso.

Soluciones relacionadas
IBM® watsonx.ai

Entrene, valide, ajuste y despliegue IA generativa, modelos fundacionales y capacidades de machine learning con IBM watsonx.ai, un estudio empresarial de próxima generación para creadores de IA. Diseñe aplicaciones de IA en menos tiempo y con menos datos.

Explore watsonx.ai
Soluciones de inteligencia artificial

Ponga a trabajar la IA en su negocio con la experiencia en IA líder del sector y la cartera de soluciones de IBM a su lado.

Explore las soluciones de IA
Consultoría y servicios de inteligencia artificial (IA)

Los servicios de IA de IBM Consulting ayudan a reinventar la forma en que las empresas trabajan con IA para la transformación.

Explore los servicios de IA
Dé el siguiente paso

Con la IA, IBM Concert muestra insights cruciales sobre operaciones y proporciona recomendaciones de mejora específicas de las aplicaciones. Descubra cómo Concert puede hacer avanzar su negocio.

Explore Concert Explore las soluciones de automatización de procesos de negocio