Implemente el almacenamiento en caché de instrucciones utilizando LangChain para crear aplicaciones LLM eficientes

Autor

Shalini Harkar

Lead AI Advocate

¿Qué es el almacenamiento en caché de instrucciones?

El almacenamiento en caché de instrucciones 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 el almacenamiento en caché de instrucciones 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 contra la misma entrada.

¿Por qué es importante?

El almacenamiento en caché de instrucciones es importante porque evita las llamadas repetidas a la interfaz de programación de aplicaciones (API) reutilizando las respuestas existentes para prompts repetidos idénticos. Esta capacidad se traduce en un tiempo de respuesta más rápido, un resultado coherente 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 crear resiliencia durante las interrupciones. El almacenamiento en caché de instrucciones es una característica crítica que añade valor a cualquier aplicación de IA eficiente, rentable 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 su entorno

Aunque puede elegir entre varias herramientas, este tutorial le muestra cómo configurar una cuenta de IBM para utilizar un Jupyter Notebook.

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

  2. Cree un proyecto watsonx.ai. Puede obtener el ID de su proyecto desde su proyecto. Haga clic en la pestaña Administrar. A continuación, copie el ID del proyecto de la sección Detalles 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 cuaderno 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 tiempo de ejecución de watsonx.ai 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 la instancia del servicio watsonx.ai Runtime al proyecto que ha creado en watsonx.ai.

Paso 3: Instalar los paquetes

Necesitamos bibliotecas para trabajar con Langchain marco y WatsonxLLM. Primero instalemos los paquetes necesarios. Este tutorial se ha creado 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 últimos paquetes 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

os module se utiliza para acceder a variables de entorno, como credenciales de proyecto o claves API.

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

ChatWatsonx permite interacciones basadas en chat utilizando IBM watsonx a través de LangChain.

SimpleDirectoryReader sirve para cargar y leer documentos de 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 unas pocas 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® watsonx Machine Learning (WML) y ayuda a garantizar que el ID del proyecto esté configurado correctamente.

  • Se crean credenciales de diccionario 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 sensible.
  • el código intenta obtener el PROJECT_ID de las variables de entorno utilizando os.environ. Si no se encuentra el PROJECT_ID, se instruye al usuario para que lo introduzca 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 de gran tamaño

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

  1. Este código crea una instancia de watsonxLLM utilizando 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 watsonx 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 obtener más información sobre los parámetros del modelo, como los límites mínimo y máximo de tokens, 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: Configurar la caché de SQLite para obtener respuestas 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 recalcularlos. En lugar de volver a realizar todo el proceso, simplemente extrae los resultados del disco, lo que lo hace eficiente, fiable y reutilizable.

Flujo de trabajo de almacenamiento en caché de instrucciones

La figura ilustra con el almacenamiento en caché de instrucciones, 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 transcurrido real 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 real fue de 6,15 segundos.

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

Conclusión

El almacenamiento en caché de instrucciones acelera y reduce el coste de las solicitudes de API a modelos de lenguaje de gran tamaño, como GPT-4o. Solicita contenido en caché, como tokens de entrada, tokens de salida, embeddings y mensajes del usuario, un prompt del sistema o la salida 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, una mejor latencia de respuesta y mejores indicadores clave de rendimiento (KPI).

El almacenamiento en caché de instrucciones puede ser beneficioso para chatbots, sistemas RAG, fine-tuning y asistentes de código. Una estrategia de almacenamiento en caché sólida que incluya funciones como lectura de caché, escritura de caché, mensaje del sistema, control de caché y tiempo de vida adecuado (TTL) mejorará las tasas de aciertos de caché y reducirá las tasas de errores de caché.

El uso consistente de los mismos tokens de instrucción, prefijo de instrucción y uso de instrucciones del sistema ayuda con el rendimiento consistente de la instrucción en conversaciones multiturno y solicitudes posteriores. Independientemente de utilizar Python, un SDK o trabajar con OpenAI u otro proveedor, comprender cómo funciona el almacenamiento en caché de instrucciones le permitirá implementar mejor el almacenamiento en caché de instrucciones para su uso en muchos casos de uso.

Soluciones relacionadas
IBM watsonx.ai

Entrene, valide, ajuste e implemente IA generativa, modelos fundacionales y capacidades de machine learning con IBM watsonx.ai, un estudio empresarial de nueva generación para desarrolladores de IA. Cree aplicaciones de IA en menos tiempo y con menos datos.

Explore watsonx.ai
Soluciones de inteligencia artificial

Ponga la IA al servicio de su negocio con la experiencia líder del sector y el portfolio de soluciones de IA de IBM.

Explore las soluciones de IA
Servicios y consultoría de inteligencia artificial (IA)

Los servicios de IA de IBM Consulting ayudan a reinventar la forma de trabajar de las empresas usando IA para la transformación.

Explore los servicios de IA
Dé el siguiente paso

Gracias a la IA, IBM Concert descubre información crucial sobre sus operaciones y ofrece recomendaciones de mejora personalizadas para cada aplicación. Descubra cómo Concert puede hacer avanzar su negocio.

Explorar el concierto Explore las soluciones de automatización de procesos empresariales