Tutorial de LangChain: Introducción a la creación de aplicaciones impulsadas por LLM

139686_-_Elastic_-_Headers_-_V1_2.jpg

Los modelos de lenguaje grandes (LLM), como GPT-4 y LLaMA, han creado todo un mundo de posibilidades en los últimos años. Han pregonado un auge de las aplicaciones y herramientas de AI, y ChatGPT se ha vuelto uno más de la casa prácticamente de la noche a la mañana. Pero este auge no sería posible sin las poderosas 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 con los LLM existentes. Lo desarrolló el experto en machine learning, Harrison Chase, y se lanzó en 2022 como un proyecto open source. Este marco de trabajo es un gran paso para saldar la brecha técnica entre los modelos de lenguaje existentes y la creación de aplicaciones nuevas y variadas.

Explicación de LangChain

En términos simples, LangChain es una interfaz estandarizada que simplifica el proceso de crear aplicaciones de AI. Te brinda una variedad de herramientas que puedes usar para conectar diferentes componentes y crear flujos de trabajo complejos. Esto incluye LLM y varios tipos de fuentes de datos. Cuando un usuario interactúa con la app, LangChain usa sus conexiones a un LLM para procesar la solicitud y generar repuestas apropiadas. También puede usar información y datos de fuentes externas, como un documento o una base de datos, a fin de brindar respuestas más precisas y relevantes en relación al contexto.

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

Esencialmente, estás incrementando las capacidades del LLM proporcionándole datos que son más relevantes para los problemas que deseas que resuelva.

Disponible como paquete tanto de Python como de TypeScript, tiene varias características impresionantes:

  • Interacción con modelos: LangChain permite la interacción con cualquier modelo de lenguaje, mediante la gestión de entradas y la extracción de información de las salidas.

  • Integración eficiente: proporciona una integración eficiente a plataformas de AI 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 industrias.

  • Componentes esenciales: el marco de trabajo consiste en bibliotecas de LangChain, plantillas de LangChain, LangServe y LangSmith, lo que simplifica todo el ciclo de vida de las aplicaciones.

  • Interfaces estandarizadas: brinda interfaces estandarizadas, gestión de solicitudes y capacidades de memoria, lo que permite a los modelos de lenguaje interactuar con las fuentes de datos.

Esta combinación de características hace que sea flexible, rápido, escalable y fácil de usar, lo que es música para el oído de cualquier desarrollador que esté tentado de probar la AI.

¿Cómo funciona LangChain?

LangChain es un marco de trabajo modular que se integra a los LLM. Es una interfaz estandarizada que elimina las complejidades y dificultades de trabajar con las distintas API de los LLM; se usa el mismo proceso para la integración a GPT-4, LLaMA y cualquier otro LLM que quieras usar. También posee selección dinámica de LLM, lo que significa que los desarrolladores pueden seleccionar el LLM más apropiado para la tarea específica que desean que LangChain realice.

Este diseño modular también facilita el procesamiento y la transformación de datos de entrada en salidas procesables. Puede ocuparse de varios tipos de datos, incluido texto, código y formato multimedia, y brinda herramientas para el preprocesamiento, la limpieza y la normalización de los datos. Esto permite asegurarse de que los datos sean adecuados para que los LLM los consuman y puede involucrar tokenización, normalización e identificación del lenguaje.

LangChain también procesa la salida del LLM y la transforma a formatos adecuados para la app o los requisitos específicos de la tarea. Esto incluye cuestiones como dar formato al texto, generar fragmentos de código y proporcionar resúmenes de datos complejos.

Conceptos esenciales de LangChain

La arquitectura de LangChain está creada a partir del concepto de componentes y cadenas. Los componentes representan módulos reutilizables que realizan tareas específicas, como el procesamiento de datos de entrada, la generación de formatos de texto, el acceso a información externa o la gestión de flujos de trabajo. Las cadenas son secuencias de componentes que trabajan en conjunto a fin de lograr un objetivo más general, como resumir un documento, generar formatos de texto creativo o brindar recomendaciones personalizadas.

Componentes y módulos

En LangChain, los términos "componentes" y "módulos" a veces se usan de forma indistinta, pero hay una pequeña diferencia entre ambos:

  • Los componentes son los elementos esenciales de LangChain, que representan tareas o funcionalidades específicas. Suelen ser pequeños y enfocados, y pueden reutilizarse en distintas aplicaciones y flujos de trabajo.

  • Los módulos, por otra parte, combinan varios componentes para formar funcionalidades más complejas. LangChain incluso proporciona interfaces estándares para algunos de sus módulos principales, lo que incluye módulos de memoria (un bloque esencial reutilizable que almacena y gestiona datos para que los usen los modelos de lenguaje grandes) y agentes (una unidad de control dinámica que orquesta cadenas según la interacción de los usuarios y los comentarios en tiempo real).

Al igual que los componentes, los módulos son reutilizables y pueden combinarse para crear flujos de trabajo incluso más complejos. Esto se denomina cadena, en la que secuencias de componentes o módulos se juntan a fin de lograr un objetivo específico. Las cadenas son fundamentales para la orquestación de los flujos de trabajo en LangChain y son esenciales para crear aplicaciones efectivas que puedan ocuparse de una gran variedad de tareas.

Integración a los LLM

LangChain se integra sin problemas a los LLM gracias a que proporciona una interfaz estandarizada. Pero la integración de LangChain a los LLM va más allá de simplemente proporcionar un mecanismo de conexión. También ofrece varias características que optimizan el uso de los LLM para crear aplicaciones basadas en el lenguaje:

  • Gestión de solicitudes: LangChain te permite elaborar solicitudes efectivas que ayuden a los LLM a comprender la tarea y generar una respuesta útil.

  • Selección dinámica de LLM: esto te permite seleccionar el LLM más adecuado para distintas tareas conforme a factores como la complejidad, los requisitos de precisión y los recursos informáticos.

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

  • Gestión basada en agentes: esto te permite orquestar flujos de trabajo basados en LLM complejos que se adapten a las cambiantes circunstancias y necesidades de los usuarios.

Gestión del flujo 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 involucra gestionar el flujo de datos, coordinar la ejecución de los componentes y asegurar que las aplicaciones respondan de manera efectiva a las interacciones de los usuarios y las circunstancias cambiantes. Estos son algunos de los componentes clave de la gestión del flujo de trabajo:

  • Orquestación de cadenas: LangChain coordina la ejecución de cadenas para asegurar que las tareas se realizan en el orden adecuado y que los datos se pasen de forma correcta entre los componentes.

  • Gestión basada en agentes: El uso de agentes se simplifica con plantillas predefinidas y una interfaz fácil de usar para el usuario.

  • Gestión de estado: LangChain hace un seguimiento automático del estado de la aplicación, lo que brinda a los desarrolladores una interfaz unificada para acceder a la información sobre el estado y modificarla.

  • Gestión de concurrencia: LangChain se ocupa de las complejidades de la ejecución concurrente, lo que permite a los desarrolladores enfocarse en las tareas e interacciones sin tener que preocuparse por problemas de sincronización y subprocesos.

Configuración de LangChain

Una de las ventajas de LangChain es que tiene muy pocos requisitos para dar los primeros pasos. En esta guía, usaremos Python, por lo que necesitarás tener Python 3.8 o posterior instalado en tu equipo. Eso es todo.

Instalación y configuración

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

pip install langchain

Lo siguiente que necesitas es un LLM con el que LangChain interactuará. En este ejemplo, usaremos OpenAI, pero puedes usar cualquier LLM que desees para tu app:

pip install openai

Para que OpenAI funcione, también necesitas una clave de API para que autentique tus solicitudes. Puedes obtener una creando una cuenta de OpenAI, desde la sección de claves de API, donde puedes seleccionar "Create new secret key" (Crear nueva clave secreta". Una vez que tengas la clave, mantenla en un lugar seguro. La necesitarás en breve.

Por último, crea un archivo de texto llamado data.txt. Este será la fuente de datos externa que usarás para brindarle 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, tendrás que abrir el editor de texto o IDE de tu preferencia y crear un nuevo archivo de Python (.py) en la misma ubicación en la que se encuentra data.txt. Crearás una app muy básica que envíe una solicitud al LLM GPT-3 de OpenAI e imprima la respuesta.

¿Buscas algo más avanzado? Echa un vistazo a nuestra guía para usar Amazon Bedrock con Elasticsearch y LangChain.

Paso 1: Importar la clase de OpenAI desde LangChain

En la parte superior de tu script de Python, agrega esta instrucción de importación para incorporar la clase de OpenAI desde el módulo del LLM de LangChain:

from langchain.llms import OpenAI

Paso 2: Definir un dato de lectura funcional desde un archivo de texto

Define la función para que la app tome la ruta del archivo como argumento. Esto abrirá el archivo para 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 de OpenAI

Crea una instancia de la clase OpenAI con tu clave de API, reemplaza YOUR-OPENAI-KEY con 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 solicitud como su argumento y devuelva la respuesta del modelo GPT-3:

def get_response(prompt):
    return gpt3(prompt)

Paso 5: Leer datos del archivo de texto

Especifica 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 definirás la solicitud que enviarás a GPT-3. En este ejemplo, le pedirás que lea el texto y que te indique de qué programa de TV habla 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 una función que envíe la solicitud preparada y luego recupere e imprima la respuesta de GPT-3:

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

Paso 8: Ejecutar la app y comprobar la respuesta

Una vez que hayas hecho todo esto, tendrás una app de Python que se verá 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))

Ahora, todo lo que resta hacer es ejecutar tu app de Python para asegurarte de que funcione. Guarda el archivo y ejecuta la app con este comando en la terminal:

python YOUR-APP-NAME.py

Si todo salió acorde a lo planeado, obtendrás una respuesta similar a esta:

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 demostración muy simplificada, pero la flexibilidad de LangChain significa que existen incontables posibilidades para crear nuevas apps de AI. Sería imposible enumerarlas a todas aquí, pero veremos algunos casos de estudio para destacar las diversas opciones que puedes crear:

Crear apps impulsadas por LLM con LangChain

A esta altura, debería estar claro que, mediante la combinación del poder de los LLM con el contexto y la información adicional en fuentes de datos internas, LangChain brinda posibilidades ilimitadas. También es notablemente fácil de comenzar a usar, como se muestra en este tutorial de LangChain. Esta facilidad de uso sumada a la flexibilidad y el poder de LangChain hacen que sea una plataforma ideal para desarrollar una amplia gama de aplicaciones de AI. Ya sea que estés creando un chatbot, una app de preguntas y respuestas o un motor de búsqueda, LangChain puede ayudarte a crear soluciones innovadores y efectivas.

Lo que 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 AI generativa en la empresa.

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

El lanzamiento y el plazo de cualquier característica o funcionalidad descrita en este blog quedan a la entera discreción de Elastic. Puede que alguna característica o funcionalidad que no esté disponible actualmente no se proporcione a tiempo o no se proporcione en absoluto.

En esta publicación de blog, es posible que hayamos usado o mencionado herramientas de AI generativa de terceros, que son propiedad de sus respectivos propietarios y operadas por estos. Elastic no tiene ningún control sobre las herramientas de terceros, y no somos responsables de su contenido, funcionamiento o uso, ni de ninguna pérdida o daño que pueda resultar del uso de dichas herramientas. Ten cautela al usar herramientas de AI con información personal, sensible o confidencial. Cualquier dato que envíes puede ser utilizado para el entrenamiento de AI u otros fines. No existe garantía alguna de que la información que proporciones se mantenga protegida o confidencial. Es conveniente que te familiarices con las prácticas de privacidad y los términos de uso de cualquier herramienta de AI 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 los 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 propietarios.