Tutorial de LangChain: Una guía para crear aplicaciones impulsadas por LLM

Los modelos de lenguaje a gran escala (LLM), como GPT-4 y Llama, han abierto un sinfín de posibilidades en los últimos dos años. Esto ha marcado el inicio de un auge de las herramientas y aplicaciones de IA, y ChatGPT se ha convertido en un nombre muy conocido prácticamente de la noche a la mañana. Pero este auge no sería posible sin las potentes herramientas y marcos de trabajo creados para facilitar esta nueva generación de apps. 

Uno de estos marcos de trabajo es LangChain, que facilita la creación de nuevas apps usando LLM existentes. Fue desarrollado por el experto en machine learning Harrison Chase y lanzado en 2022 como un proyecto de open source. Este marco de trabajo supone un gran avance a la hora de salvar la brecha técnica entre los modelos de lenguaje existentes y el desarrollo de aplicaciones nuevas y variadas.

Explicación de LangChain

En pocas palabras, LangChain es una interfaz estandarizada que simplifica el proceso de creación de apps de IA. Te ofrece una variedad de herramientas que puedes usar para conectar diferentes componentes y crear flujos de trabajo complejos. Esto incluye modelos de lenguaje grande (LLM) y diversos tipos de fuentes de datos. Cuando un usuario interactúa con la app, LangChain usa sus conexiones con un LLM para procesar la solicitud y generar las respuestas adecuadas. También puede usar información y datos de fuentes externas, como un documento o una base de datos, para dar respuestas más precisas y relevantes según el contexto.

Por ejemplo, si un usuario hace una pregunta, LangChain usará el LLM para comprender la pregunta y formular una respuesta. Pero también consultará una o más fuentes de datos externas para mejorar su respuesta. Esto hace que tu aplicación sea mucho más inteligente y capaz de manejar búsquedas complejas y especializadas.

Esencialmente, estás aumentando las habilidades del LLM al brindarle datos que son más relevantes para los problemas que quieres que resuelva.

Disponible tanto en paquete con Python como con TypeScript, cuenta con varias características atractivas:

  • Interacción con el modelo: LangChain permite la interacción con cualquier modelo de lenguaje, gestiona las entradas y extrae información de las salidas.

  • Integración eficiente: Ofrece una integración eficiente con plataformas de IA populares como OpenAI y Hugging Face.

  • Flexibilidad y personalización: LangChain ofrece flexibilidad, opciones de personalización y componentes poderosos para crear una amplia variedad de aplicaciones en diferentes sectores.

  • Componentes núcleo: El marco de trabajo consta de las bibliotecas LangChain, las plantillas LangChain, LangServe y LangSmith, que simplifican todo el ciclo de vida de la aplicación. 

  • Interfaces estandarizadas: Ofrece interfaces estandarizadas, gestión de prompts y capacidades de memoria, lo que permite que los modelos de lenguaje interactúen con fuentes de datos.

Esta combinación de características lo hace flexible, rápido, escalable y fácil de usar, lo que es música para los oídos de cualquier desarrollador que esté tentado a comenzar con la IA. 

¿Cómo funciona LangChain?

LangChain es un marco de trabajo modular que se integra con un LLM. Es una interfaz estandarizada que abstrae las complejidades y dificultades de trabajar con diferentes API de LLM: es el mismo proceso para integrar con GPT-4, LLama o cualquier otro LLM que quieras usar. También tiene una selección dinámica de LLM, lo que significa que los desarrolladores pueden seleccionar el LLM más apropiado para la tarea específica en la que están usando LangChain para realizarla.

El diseño modular también facilita el procesamiento y la transformación de los datos de entrada en salidas procesables. Admite diversos tipos de datos, como texto, código y formatos multimedia, y ofrece herramientas para el preprocesamiento, la limpieza y la normalización de datos. Esto es para garantizar que los datos sean adecuados para consumo de los LLM y puede implicar tokenización, normalización e identificación del lenguaje.

LangChain también procesa la salida del LLM, transformándola en formatos apropiados para los requisitos específicos de la app o la tarea. Esto incluye acciones como formatear texto, generar fragmentos de código y brindar resúmenes de datos complejos.

Conceptos fundamentales de LangChain

La arquitectura de LangChain se basa en el concepto de componentes y cadenas. Los componentes son módulos reutilizables que realizan tareas específicas, como procesar datos de entrada, generar formatos de texto, acceder a información externa o gestionar flujos de trabajo. Las cadenas son secuencias de componentes que funcionan en conjunto para lograr un objetivo más amplio, como resumir un documento, generar formatos de texto creativos u ofrecer recomendaciones personalizadas.

Componentes y módulos

En LangChain, los términos "componentes" y "módulos" se usan indistintamente algunas veces, pero existe una sutil distinción entre ambos: 

  • Los componentes son los bloques básicos de LangChain, y representan tareas o funcionalidades específicas. Normalmente son pequeños y enfocados, y se pueden reutilizar en diferentes aplicaciones y flujos de trabajo. 

  • Por otro lado, los módulos combinan múltiples componentes para formar funcionalidades más complejas. LangChain incluso ofrece interfaces estándar para algunos de sus módulos principales, incluidos los módulos de memoria (un bloque de construcción reutilizable que almacena y gestiona datos para su uso por grandes modelos de lenguaje) y los agentes (una unidad de control dinámica que orquesta cadenas basadas en la retroalimentación en tiempo real y la interacción del usuario). 

Al igual que los componentes, los módulos son reutilizables y se pueden combinar entre sí para crear flujos de trabajo aún más complejos. A esto se le llama una cadena, en la que se unen secuencias de componentes o módulos para lograr un objetivo específico. Las cadenas son fundamentales para la coordinación de flujos de trabajo en LangChain y son esenciales para crear aplicaciones eficaces que puedan manejar una amplia variedad de tareas.

Integración con LLM

LangChain se integra perfectamente con los LLM al ofrecer una interfaz estandarizada. Pero la integración de LangChain con un LLM va más allá de simplemente brindar un mecanismo de conexión. También ofrece varias características que optimizan el uso de los LLM para desarrollar aplicaciones basadas en lenguajes:

  • Gestión de prompts: LangChain te permite crear prompts efectivos que ayudan a los LLM a entender la tarea y generar una respuesta útil.

  • Selección dinámica de LLM: Esto permite seleccionar el LLM más adecuado para diferentes tareas en función de factores como complejidad, requisitos de precisión y recursos computacionales.

  • Integración de gestión de memoria: LangChain se integra con módulos de memoria, lo que significa que los LLM pueden acceder y procesar información externa.

  • Gestión basada en agentes: Esto permite orquestar flujos de trabajo complejos basados en modelos de lenguaje grandes (LLM) que se adaptan a las circunstancias cambiantes y a las necesidades de los usuarios.

Gestión de flujos de trabajo

En LangChain, la gestión del flujo de trabajo es el proceso de orquestar y controlar la ejecución de cadenas y agentes para resolver un problema específico. Esto implica gestionar el flujo de datos, coordinar la ejecución de los componentes y garantizar que las aplicaciones respondan de manera eficaz a las interacciones de los usuarios y a las circunstancias cambiantes. Estos son algunos de los componentes clave de la gestión de flujos de trabajo:

  • Orquestación de cadenas: LangChain coordina la ejecución de las cadenas para garantizar que las tareas se realicen en el orden correcto y que los datos se pasen correctamente entre componentes.

  • Gestión basada en agentes: El uso de agentes se simplifica gracias a plantillas predefinidas y una interfaz fácil de usar.

  • Gestión de estados: LangChain rastrea automáticamente el estado de la aplicación, y ofrece a los desarrolladores una interfaz unificada para acceder y modificar la información del estado.

  • Administración de concurrencia: LangChain maneja las complejidades de la ejecución concurrente, lo que permite a los desarrolladores centrarse en las tareas e interacciones sin preocuparse por problemas de subprocesos o sincronización.

Configuración de LangChain

Una de las ventajas de LangChain es que se necesitan muy pocos requisitos para empezar. Para esta guía, usaremos Python, así que necesitarás tener Python 3.8 o posterior instalado en tu computadora. ¡Eso es!

Instalación y configuración

El primer paso es instalar el marco de trabajo principal de LangChain. La forma más sencilla de hacerlo es con este comando PIP:

pip install langchain

Lo siguiente que necesitas es un LLM con el que LangChain pueda interactuar. Usaremos OpenAI en este ejemplo, pero puedes usar cualquier LLM que quieras para tu app:

pip install openai

Para que OpenAI funcione, también necesitas una clave API para autenticar tus solicitudes. Puedes obtener una creando una cuenta de OpenAI, yendo a la sección de claves API y seleccionando "Crear nueva clave secreta". Una vez que tengas la clave, guárdala en un lugar seguro. La necesitarás en breve.

Por último, crea un archivo de texto llamado data.txt. Esta será la fuente de datos externa que uses para dar contexto al LLM:

In West Philadelphia born and raised
On the playground was where I spent most of my days
Chillin' out, maxin', relaxin', all cool
And all shootin' some b-ball outside of the school

¡Ahora llega la parte divertida!

Desarrollo de aplicaciones con LangChain

Para crear esta app de LangChain, deberás abrir tu editor de texto o IDE preferido y crear un nuevo archivo Python (.py) en la misma ubicación que data.txt. Crearás una app muy básica que envía una solicitud al modelo LLM GPT-3 de OpenAI e imprime la respuesta.

¿Buscas algo un poco más avanzado? Consulta nuestra guía para usar Amazon Bedrock con Elasticsearch y Langchain.

Paso 1: Importar la clase OpenAI desde LangChain

Al principio de tu script de Python, agrega esta instrucción de importación para incorporar la clase OpenAI del módulo LLM de LangChain:

from langchain.llms import OpenAI

Paso 2: Definir una lectura funcional de datos de un archivo de texto:

Define la función, para que la app tome la ruta del archivo como argumento. Esto abrirá el archivo para su lectura y devolverá su contenido:

def read_data_from_file(file_path):
    with open(file_path, 'r') as file:
        return file.read()

Paso 3: Inicializar el modelo OpenAI

Crea una instancia de la clase OpenAI con tu clave API, reemplazando YOUR-OPENAI-KEY por la clave real que obtuviste de OpenAI:

gpt3 = OpenAI(api_key='YOUR-OPENAI-KEY')

Paso 4: Definir una función para solicitar una respuesta de OpenAI

Escribe una función que tome una pregunta como argumento y devuelva la respuesta del modelo GPT-3:

def get_response(prompt):
    return gpt3(prompt)

Paso 5: Leer los datos del archivo de texto

Indica la ruta al archivo de texto y usa la función que definiste antes para leer su contenido. Luego almacenarás los datos en la variable external_data:

file_path = 'data.txt'
external_data = read_data_from_file(file_path)

Paso 6: Crear una solicitud de prueba

Aquí es donde defines el prompt que vas a enviar a GPT-3. En este ejemplo, le vas a pedir que lea el texto y te diga a qué programa de televisión se refiere el archivo de texto:

prompt = f"Based on the following data: {external_data}, what TV show is this about?"

Paso 7: Obtener la respuesta de GPT-3 e imprimirla

Llama a una función que envía el prompt preparado y luego recupera e imprime la respuesta de GPT-3:

print("Response:", get_response(prompt))

Paso 8: Ejecutar la app y comprobar la respuesta

Una vez hecho todo esto, tienes una app en Python que se ve así:

from langchain.llms import OpenAI

# Function to read data from a file
def read_data_from_file(file_path):
    with open(file_path, 'r') as file:
        return file.read()

# Initialize the LLM
gpt3 = OpenAI(api_key='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')

def get_response(prompt):
    return gpt3(prompt)

# Read data from your text file
file_path = 'data.txt'
external_data = read_data_from_file(file_path)

# Prepare your prompt including the external data
prompt = f"Based on the following data: {external_data}, what TV show is this about?"

# Get the response from GPT-3
print("Response:", get_response(prompt))

Así que ahora todo lo que queda por hacer es ejecutar tu app Python para asegurarte de que funcione. Guarda el archivo y ejecuta tu app con este comando en la terminal:

python YOUR-APP-NAME.py

Si todo ha salido según lo planeado, obtienes una respuesta que se parece a esto:

Response: 
This is the opening theme song for the popular 1990s TV show "The Fresh Prince of Bel-Air".

Casos de uso

Este ejemplo es una demo simplificada, pero la flexibilidad de LangChain significa que hay posibilidades infinitas para crear nuevas aplicaciones de IA. No podríamos intentar enumerarlos todos aquí, pero analizaremos algunos estudios de caso para resaltar las diversas aplicaciones que podrías crear:

  • Chatbot: Crea tu propio chatbot en el que puedas hacer preguntas en lenguaje natural y mantener el historial de conversaciones.

  • App de Q&A: Crea una app en la que puedas pedir la información que buscas y que encuentre la respuesta en los documentos almacenados.

  • Búsqueda de texto (BM25): Crea tu propia app de búsqueda de texto para buscar grandes cantidades de datos.

  • Búsqueda vectorial: Crea una app que busque similitudes en los datos y filtre los metadatos.

  • Búsqueda híbrida (texto y vector): Desarrollar una IA que coincida con documentos similares usando tanto texto como filtrado vectorial.

  • LangChain con tu propio LLM: Usa LangChain para crear una app de IA que use tu propio LLM con fuentes de datos externas.

Crea aplicaciones basadas en LLM con LangChain

A estas alturas ya debería estar claro que, al combinar el poder de los LLM con el contexto y la información adicional en fuentes de datos externas, LangChain te ofrece posibilidades ilimitadas. También es muy fácil comenzar, como se muestra en este tutorial de LangChain. Esta facilidad de uso, combinada con la flexibilidad y el poder de LangChain, lo convierte en una plataforma ideal para desarrollar una amplia gama de aplicaciones de IA. Ya sea que estés creando un chatbot, una app de preguntas frecuentes o un motor de búsqueda, LangChain puede ayudarte a crear soluciones innovadoras y efectivas.

¿Qué deberías hacer a continuación?

Cuando estés listo, estas son cuatro formas en las que podemos ayudarte a aprovechar la información de los datos de tu empresa:

  1. Comienza una prueba gratuita y ve cómo Elastic puede ayudar a tu empresa.

  2. Haz un recorrido por nuestras soluciones para ver cómo funciona Elasticsearch Platform y cómo las soluciones se ajustarán a tus necesidades.

  3. Descubre cómo incorporar la IA generativa en la empresa.

  4. Comparte este artículo con alguien que sepas que disfrutaría leerlo. Compártelo por email, LinkedIn, X o Facebook.

El momento del lanzamiento de cualquiera de las características o funcionalidades descritas en esta publicación queda a exclusivo criterio de Elastic. Es posible que algunas características o funcionalidades que no estén disponibles en este momento no se lancen a tiempo o no se lancen en absoluto.

En esta publicación del blog, es posible que hayamos usado o nos hayamos referido a herramientas de AI generativa de terceros, que son propiedad de sus respectivos propietarios y están gestionadas por ellos. Elastic no tiene ningún control sobre las herramientas de terceros y no tenemos ninguna responsabilidad por su contenido, operación o uso, ni por ninguna pérdida o daño que pueda surgir de tu uso de dichas herramientas. Ten cuidado al usar herramientas de AI con información personal, sensible o confidencial. Cualquier dato que envíes puede usarse para el entrenamiento de la AI u otros fines. No se garantiza que la información que proporciones se mantenga segura o confidencial. Debes familiarizarte con las prácticas de privacidad y los términos de uso de cualquier herramienta de IA generativa antes de usarla. 

Elastic, Elasticsearch, ESRE, Elasticsearch Relevance Engine y las marcas asociadas son marcas comerciales, logotipos o marcas comerciales registradas de Elasticsearch N.V. en Estados Unidos y otros países. Todos los demás nombres de empresas y productos son marcas comerciales, logotipos o marcas comerciales registradas de sus respectivos dueños.