Construyendo aplicaciones con LLM-Powered utilizando LangChain

'Construyendo aplicaciones con LLM-Powered y LangChain'

Introducción

¡Bienvenido al futuro del procesamiento del lenguaje! En un mundo donde el lenguaje es el puente que conecta a las personas y la tecnología, los avances en Procesamiento del Lenguaje Natural (NLP, por sus siglas en inglés) han abierto increíbles oportunidades. Entre estos avances se encuentra el revolucionario Modelo de Lenguaje, conocido como LLM (Large Language Model), que ha transformado por completo la forma en que interactuamos con los datos basados en texto. Exploraremos las maravillas de LLM y aprenderemos cómo construir aplicaciones impulsadas por LLM utilizando LangChain, una plataforma innovadora que aprovecha todo el potencial de LLM.

Los modelos de lenguaje han adquirido una importancia significativa en varias aplicaciones debido a su capacidad para comprender y generar texto similar al humano. Estos modelos han revolucionado tareas de procesamiento del lenguaje natural, como la traducción automática, el análisis de sentimientos, los chatbots y la generación de contenido. Proporcionan ideas valiosas, mejoran la comunicación y mejoran la experiencia del usuario.

Objetivos de Aprendizaje

  • Comprender los fundamentos de los Modelos de Lenguaje (LLMs) y su importancia en la construcción de aplicaciones inteligentes.
  • Aprender cómo integrar LangChain en los flujos de trabajo del desarrollo de aplicaciones y utilizar sus APIs.
  • Obtener ideas sobre lo que se puede hacer con LangChain.
  • Interactuar con varios LLMs utilizando LangChain.
  • Crear un chatbot conversacional utilizando LLM.
  • Obtener ideas sobre lo que significa Afinar LLM con LangChain.

Este artículo fue publicado como parte del Blogatón de Ciencia de Datos.

¿Qué es LLM?

LLM, o Large Language Model, se refiere a un modelo de lenguaje de última generación que ha sido entrenado con una gran cantidad de datos de texto. Utiliza técnicas de aprendizaje profundo para comprender y generar texto similar al humano, lo que lo convierte en una herramienta poderosa para una amplia gama de aplicaciones, como completar frases, traducción de idiomas, análisis de sentimientos y mucho más. Uno de los ejemplos más famosos de un LLM es el GPT-3 de OpenAI, que ha captado una atención y aclamación significativas por sus capacidades de generación de lenguaje.

Presentando LangChain

Imagina un mundo donde tus aplicaciones puedan comprender y generar texto similar al humano sin esfuerzo. Bienvenido a LangChain, una plataforma innovadora que abre la puerta al fascinante mundo de los Modelos de Lenguaje (LLMs). Con LangChain, puedes integrar sin problemas LLMs en tus proyectos, aprovechando sus extraordinarias capacidades. Embárquese en un emocionante viaje, explorando las características cautivadoras y las posibilidades ilimitadas que LangChain revela.

LangChain es una plataforma avanzada que brinda a los desarrolladores una interfaz intuitiva y sin problemas para aprovechar el poder de LLM en sus aplicaciones. Ofrece una variedad de APIs y herramientas que simplifican la integración de LLM en tus proyectos, lo que te permite desbloquear todo el potencial del procesamiento del lenguaje.

Características y Capacidades de LangChain

LangChain está repleto de una variedad de características y capacidades que te dejarán fascinado. Desde completar frases hasta analizar sentimientos, desde traducir idiomas hasta reconocer entidades nombradas, LangChain te proporciona las herramientas para hacer maravillas con el lenguaje. A medida que explores la documentación de la API, descubrirás los secretos de cómo utilizar estas características de manera efectiva, como un mago dominando sus hechizos.

Integración de LLMs en Tus Proyectos

Armado con el conocimiento de las características y capacidades de LangChain, es hora de tejer la magia en tus propios proyectos. Utilizando el SDK de LangChain, puedes fusionar sin problemas los poderes extraordinarios de los LLMs con tu código existente. Con solo unas pocas líneas de código, podrás invocar las habilidades de procesamiento del lenguaje de los LLMs, transformando tus aplicaciones en seres inteligentes que comprenden y generan texto similar al humano.

La Magia de los LLMs Desatada

Con LangChain, las posibilidades son tan ilimitadas como tu imaginación. Imagina chatbots que interactúan con los usuarios en conversaciones cautivadoras, brindándoles respuestas útiles e ingeniosas. Imagina plataformas de comercio electrónico que recomiendan productos con tanta precisión que los clientes no pueden resistirse a realizar una compra. Imagina aplicaciones de salud que ofrecen información médica personalizada, empoderando a los pacientes para tomar decisiones informadas. El poder para crear estas experiencias increíbles está al alcance de tus manos.

Configuración de LangChain

Para comenzar nuestro viaje con LangChain, necesitamos asegurarnos de tener una instalación y configuración adecuadas. También se le proporcionarán instrucciones sobre cómo importar las bibliotecas y dependencias necesarias para trabajar de manera efectiva con LLMs.

Importación de bibliotecas necesarias

import langchain
import openai
import os
import IPython
from langchain.llms import OpenAI
from dotenv import load_dotenv
from langchain.chat_models import ChatOpenAI
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)
from langchain.embeddings import OpenAIEmbeddings
from langchain.chains import LLMChain
from langchain.chains import RetrievalQA
from langchain import ConversationChain

load_dotenv()
# Configuración de la API
openai.api_key = os.getenv("OPENAI_API_KEY")

Interactuar con LLMs utilizando LangChain

Interactuar con LLMs utilizando LangChain implica una serie de pasos que le permiten aprovechar el poder de los modelos de lenguaje pre-entrenados para la generación y comprensión de texto. Aquí se explica detalladamente cada parte, junto con implementaciones de código.

Inicializando un LLM

Para inicializar un LLM en LangChain, primero necesita importar las bibliotecas y dependencias necesarias. Por ejemplo, si está utilizando el lenguaje de programación Python, puede importar la biblioteca `langchain` y especificar el modelo de lenguaje que desea utilizar. Aquí tiene un ejemplo:

from langchain import LangModel

# Especifique el modelo de lenguaje que desea utilizar
model_name = 'gpt3'

# Inicialice el LLM
llm = LangModel(model_name)

Ingresando indicaciones

Una vez que haya inicializado el LLM, puede ingresar indicaciones para generar texto u obtener respuestas. Las indicaciones sirven como punto de partida para que el modelo de lenguaje genere texto. Puede proporcionar una sola indicación o varias indicaciones, según sus requisitos. Aquí tiene un ejemplo:

# Ingrese una sola indicación
indicacion = "Érase una vez"

# Genere texto basado en la indicación
texto_generado = llm.generate_text(indicacion)

Recuperando texto o respuestas generados

Una vez que haya ingresado las indicaciones, puede recuperar el texto o las respuestas generadas por el LLM. El texto o las respuestas generadas se basarán en el contexto proporcionado por las indicaciones y las capacidades del modelo de lenguaje. Aquí tiene un ejemplo:

# Imprima el texto generado
print(texto_generado)

# Imprima las respuestas
for respuesta in respuestas:
    print(respuesta)

Siguiendo estos pasos e implementando el código correspondiente, puede interactuar sin problemas con LLMs pre-entrenados utilizando LangChain, aprovechando su poder para diversas tareas de generación y comprensión de texto.

¿Qué se puede hacer con Langchain?

LangChain, con su amplio conjunto de características, ofrece a los desarrolladores una amplia gama de posibilidades para explorar y aprovechar en sus aplicaciones. Sumerjámonos en los componentes clave de LangChain: modelos, indicaciones, cadenas, índices y memoria, y descubramos qué se puede lograr con cada uno.

Modelos

Actualmente están surgiendo numerosos nuevos LLMs. LangChain proporciona una interfaz y integraciones simplificadas para varios modelos.

En el núcleo de LangChain se encuentran los poderosos modelos de lenguaje (LLMs) que permiten a las aplicaciones comprender y generar texto similar al humano. Con LangChain, los desarrolladores tienen acceso a una amplia colección de LLMs, cada uno entrenado con grandes cantidades de datos para destacar en diversas tareas relacionadas con el lenguaje. Ya sea comprender consultas de usuario, generar respuestas o realizar tareas de lenguaje complejas, los modelos de LangChain actúan como la base de las capacidades de procesamiento de lenguaje.

from langchain.llms import OpenAI
llm = OpenAI(model_name="text-davinci-003")

# El LLM toma una indicación como entrada y produce una finalización
indicacion = "¿Cuántos días hay en un mes?"
completado = llm(indicacion)

Modelo de chat

Esto establece una conversación entre un usuario y un chatbot de IA utilizando la clase ChatOpenAI. El chatbot se inicializa con una temperatura de 0, lo que hace que sus respuestas sean más enfocadas y determinísticas. La conversación comienza con un mensaje del sistema que indica el propósito del bot, seguido de un mensaje humano que expresa una preferencia alimentaria. El chatbot generará una respuesta en función de la entrada proporcionada.

chat = ChatOpenAI(temperature=0)

chat(
    [
        SystemMessage(content="Eres un bot de IA agradable que ayuda a un usuario a descubrir qué comer en una sola oración"),
        HumanMessage(content="Me gustan los tomates, ¿qué debería comer?")
    ]
)

Modelo de incrustación de texto

Los modelos de incrustación de texto reciben la entrada de texto y luego emiten una lista de incrustaciones que representan numéricamente el texto de entrada. Se puede extraer información del texto utilizando incrustaciones. Posteriormente, esta información se puede aplicar, por ejemplo, para determinar cuán similares son dos textos, como resúmenes de películas.

incrustaciones = OpenAIEmbeddings()

texto = "Alice tiene un loro. ¿Qué animal es la mascota de Alice?"
incrustacion_texto = incrustaciones.incrustar_consulta(texto)

Prompts

Aunque agregar prompts a los LLM en lenguaje natural debería sentirse natural, es necesario realizar cambios significativos en el prompt antes de obtener el resultado deseado. A esto se le llama ingeniería de prompts.

Es posible que desees utilizar tu prompt bueno como una plantilla para otras cosas una vez que lo hayas obtenido. Como resultado, LangChain ofrece Plantillas de Prompts, que te permiten construir prompts a partir de varios componentes.

plantilla = "¿Cuál es un buen nombre para una empresa que fabrica {producto}?"

prompt = PlantillaPrompt(
    variables_entrada=["producto"],
    plantilla=plantilla,
)

prompt.formato(producto="calcetines coloridos")

Cadenas

El proceso de combinar LLM con otros componentes para crear una aplicación se denomina encadenamiento en LangChain. Algunos ejemplos son:

  • Combinar plantillas de prompts y LLM
  • Al utilizar la salida del primer LLM como entrada para el segundo, es posible combinar múltiples LLS de manera secuencial.
  • Combinar LLM con datos externos, por ejemplo, para responder preguntas.
  • Combinar LLM con memoria a largo plazo, como el historial de chat.
cadenas = CadenaLLM(llm=llm, 
                  prompt=prompt)

cadenas.ejecutar("calcetines coloridos")

Índices

Una de las desventajas de los LLM es la falta de información contextual, como el acceso a documentos o correos electrónicos específicos. Dar a los LLM acceso a los datos externos particulares te ayudará a evitar esto.

Una vez que los datos externos estén preparados para ser almacenados como documentos, puedes indexarlos en una base de datos vectorial llamada VectorStore utilizando el modelo de incrustación de texto.

Ahora, un VectorStore almacena tu documento como incrustaciones. Con estos datos externos, ahora puedes realizar varias acciones.

Vamos a utilizarlo para una tarea de preguntas y respuestas basada en recuperación de información.

recuperador = db.como_recuperador()

qa = RecuperacionQA.desde_tipo_cadena(
    llm=llm, 
    tipo_cadena="cosas", 
    recuperador=recuperador, 
    devolver_documentos_fuente=True)

consulta = "¿Qué nunca voy a hacer?"
resultado = qa({"consulta": consulta})

print(resultado['resultado'])

Memoria

Es crucial que los programas como chatbots puedan recordar conversaciones anteriores. Sin embargo, a menos que ingreses el historial de chat, los LLM carecen de memoria a largo plazo de manera predeterminada.

Ofreciendo varias opciones para manejar el historial de chat, LangChain aborda este problema al mantener todo el diálogo, mantenerse al día con las K conversaciones más recientes y resumir lo que se dijo.

conversacion = CadenaConversacional(llm=llm, verbose=True)
conversacion.predecir(entrada="Alice tiene un loro.")
conversacion.predecir(entrada="Bob tiene dos gatos.")
conversacion.predecir(entrada="¿Cuántas mascotas tienen Alice y Bob?")

Creación de chatbots conversacionales

Los chatbots conversacionales se han convertido en una parte integral de muchas aplicaciones, ofreciendo interacciones fluidas y experiencias personalizadas para los usuarios. La clave para desarrollar un chatbot exitoso radica en su capacidad para comprender y generar respuestas similares a las de los humanos. Con las avanzadas capacidades de procesamiento de lenguaje de LangChain, puedes crear chatbots inteligentes que superen a los sistemas tradicionales basados en reglas.

Importar bibliotecas necesarias

from langchain.llms import OpenAI
from langchain import LLMChain
from langchain.prompts.prompt import PromptTemplate

# Componentes específicos para el chat
from langchain.memory import ConversationBufferMemory

Usando una plantilla de prompt

Esto crea una plantilla de chatbot que genera chistes tomando la entrada del usuario y incorporándola en un formato de chiste predefinido. Utiliza PromptTemplate y ConversationBufferMemory para almacenar y recuperar el historial de chat, lo que permite que el chatbot genere chistes relevantes contextualmente.

template = """
Eres un chatbot servicial.
Tu objetivo es ayudar al usuario a hacer chistes.
Toma lo que el usuario está diciendo y conviértelo en un chiste

{chat_history}
Humano: {human_input}
Chatbot:"""

prompt = PromptTemplate(
    input_variables=["chat_history", "human_input"], 
    template=template
)
memory = ConversationBufferMemory(memory_key="chat_history")

Chatbot

Esto configura una instancia de la clase LLMChain, que utiliza el modelo de lenguaje OpenAI para generar respuestas. Luego se utiliza el método ‘llm_chain.predict()’ para generar una respuesta basada en la entrada proporcionada por el usuario.

llm_chain = LLMChain(
    llm=OpenAI(temperature=0), 
    prompt=prompt, 
    verbose=True, 
    memory=memory
)
llm_chain.predict(human_input="¿Es una pera una fruta o una verdura?")

Afinamiento de un LLM con LangChain

El afinamiento es un proceso en el que se entrena aún más un LLM preentrenado existente en conjuntos de datos específicos para adaptarlo a una tarea o dominio particular. Al exponer el modelo a datos específicos de la tarea, aprende a comprender mejor los matices, el contexto y las complejidades del dominio objetivo. Este proceso permite a los desarrolladores refinar el rendimiento del modelo, mejorar la precisión y hacerlo más relevante para aplicaciones del mundo real.

Presentación de las capacidades de afinamiento de LangChain

LangChain lleva el afinamiento a nuevos niveles al proporcionar a los desarrolladores un marco integral para entrenar LLM en conjuntos de datos personalizados. Ofrece una interfaz fácil de usar y un conjunto de herramientas que simplifican el proceso de afinamiento. LangChain admite varias arquitecturas populares de LLM, como GPT-3, lo que permite a los desarrolladores trabajar con modelos de última generación para sus aplicaciones. Con LangChain, el poder de personalizar y optimizar LLM está al alcance de tus dedos.

El flujo de trabajo de afinamiento con LangChain

Preparación del conjunto de datos

Para afinar un LLM, adapta tu conjunto de datos a tu tarea o dominio específico. Comienza recolectando o curando un conjunto de datos etiquetado que se alinee con tu aplicación objetivo. Este conjunto de datos debe incluir pares de entrada-salida o un formato adecuado para el proceso de afinamiento.

Configuración de parámetros

En la interfaz de LangChain, los desarrolladores especifican la arquitectura de LLM deseada, como el número de capas, el tamaño del modelo y otros parámetros relevantes. Estas configuraciones definen la arquitectura y capacidad del modelo a entrenar, lo que permite a los desarrolladores encontrar el equilibrio adecuado entre rendimiento y recursos computacionales.

Proceso de entrenamiento

LangChain aprovecha los recursos de cómputo distribuido para entrenar eficientemente el LLM. Los desarrolladores inician el proceso de entrenamiento y LangChain optimiza el flujo de trabajo de entrenamiento, asegurando una utilización eficiente de los recursos y una convergencia más rápida. Durante el entrenamiento, el modelo aprende del conjunto de datos proporcionado, ajustando sus parámetros para capturar los matices y patrones específicos de la tarea o dominio objetivo.

Una vez que tengas el conjunto de datos preparado, puedes comenzar el proceso de afinamiento con LangChain. Primero, importa las bibliotecas y dependencias necesarias. Luego, inicializa el LLM preentrenado y ajústalo a tu conjunto de datos personalizado. Aquí tienes un ejemplo:

from langchain import LangModel

# Inicializa el LLM preentrenado
modelo_preentrenado = LangModel('gpt3')

# Carga y preprocesa tu conjunto de datos
conjunto_datos = cargar_conjunto_datos('tu_conjunto_datos.txt')
conjunto_datos_preprocesado = preprocesar(conjunto_datos)

# Ajusta el LLM a tu conjunto de datos
modelo_ajustado = modelo_preentrenado.afinar(conjunto_datos_preprocesado, 
  num_epochs=5, batch_size=16)

En este ejemplo, cargamos el conjunto de datos, lo preprocesamos al formato requerido y luego usamos el método ‘fine_tune’ de LangModel para entrenar el LLM con el conjunto de datos preprocesado. Puedes ajustar parámetros como el número de épocas de entrenamiento y el tamaño del lote según tus requisitos específicos.

Evaluación

Después de ajustar finamente el LLM, es crucial evaluar su rendimiento. Este paso te ayuda a evaluar cuán bien el modelo se ha adaptado a tu tarea específica. Puedes evaluar el modelo ajustado finamente utilizando métricas apropiadas y un conjunto de datos de prueba separado. Aquí tienes un ejemplo:

# Prepara el conjunto de datos de prueba
test_dataset = load_dataset('tu_conjunto_de_datos_de_prueba.txt')
conjunto_de_datos_de_prueba_preprocesado = preprocesar(test_dataset)

# Evalúa el LLM ajustado finamente
resultados_de_evaluación = modelo_ajustado_fino.evaluar(conjunto_de_datos_de_prueba_preprocesado)

Los resultados de la evaluación ofrecen información sobre la eficacia de tu LLM ajustado finamente. Puedes medir métricas como precisión, exhaustividad, o métricas específicas del dominio para evaluar el rendimiento del modelo.

Al seguir estos pasos e implementar los ejemplos de código proporcionados, puedes ajustar finamente de manera efectiva un LLM pre-entrenado utilizando LangChain. Este proceso te permite adaptar el comportamiento del modelo de lenguaje, haciéndolo más adecuado y relevante para tus requerimientos de aplicación específicos.

Beneficios de Usar LangChain

  • El ajuste fino de LLMs con LangChain mejora la precisión y relevancia contextual del modelo para tareas o dominios específicos, resultando en salidas de mayor calidad.
  • LangChain permite a los desarrolladores personalizar LLMs para manejar tareas únicas, jerga específica de la industria y contextos específicos del dominio, atendiendo a necesidades específicas de los usuarios.
  • Los LLMs ajustados finamente permiten el desarrollo de aplicaciones poderosas con una comprensión más profunda del lenguaje específico del dominio, lo que lleva a respuestas más precisas y contextualmente conscientes.
  • El ajuste fino con LangChain reduce la necesidad de datos de entrenamiento extensos y recursos computacionales, ahorrando tiempo y esfuerzo al mismo tiempo que se logran mejoras significativas en el rendimiento.

Casos de Uso del Mundo Real e Historias de Éxito

Profundizaremos en ejemplos del mundo real e historias de éxito de aplicaciones impulsadas por LLMs para mostrar la amplia gama de industrias en las que los LLMs y LangChain han tenido un impacto significativo. Exploraremos cómo estas aplicaciones han transformado el soporte al cliente, el comercio electrónico, la atención médica y la generación de contenido, lo que ha llevado a una mejor experiencia del usuario y mejores resultados comerciales.

Soporte al Cliente

Los chatbots impulsados por LLMs han revolucionado el soporte al cliente al proporcionar asistencia instantánea y personalizada a los usuarios. Las empresas están aprovechando LangChain para construir chatbots que comprendan las consultas de los clientes, brinden información relevante e incluso manejen transacciones complejas. Estos chatbots pueden manejar un gran volumen de consultas, asegurando un soporte las 24 horas del día, los 7 días de la semana, al tiempo que reducen los tiempos de espera y mejoran la satisfacción del cliente.

Comercio Electrónico

Utiliza LLMs para mejorar la experiencia de compra en la industria del comercio electrónico. LangChain permite a los desarrolladores construir aplicaciones que puedan entender descripciones de productos, preferencias de usuario y patrones de compra. Al aprovechar las capacidades de LLM, las plataformas de comercio electrónico pueden proporcionar recomendaciones personalizadas de productos, responder consultas de los clientes e incluso generar descripciones de productos creativas, lo que lleva a un aumento en las ventas y la participación de los clientes.

Atención Médica

Las aplicaciones impulsadas por LLM están transformando la industria de la atención médica al mejorar la atención al paciente, los procesos de diagnóstico y tratamiento. LangChain permite el desarrollo de asistentes virtuales inteligentes que pueden entender consultas médicas, proporcionar información precisa e incluso ayudar en la clasificación de pacientes según los síntomas. Estas aplicaciones facilitan un acceso más rápido a la información de salud, reducen la carga sobre los proveedores de atención médica y empoderan a los pacientes para tomar decisiones informadas sobre su salud.

Generación de Contenido

Los LLMs se han demostrado ser herramientas valiosas en la generación y creación de contenido. LangChain permite a los desarrolladores construir aplicaciones que pueden generar contenido creativo y contextualmente relevante, como artículos de blog, descripciones de productos y publicaciones en redes sociales. Estas aplicaciones ayudan a los creadores de contenido a generar ideas, mejorar la eficiencia de la escritura y mantener la consistencia en el tono y estilo.

Estos casos de uso del mundo real demuestran la versatilidad e impacto de las aplicaciones impulsadas por LLMs en diversas industrias. Al aprovechar las capacidades de LangChain, los desarrolladores pueden crear soluciones innovadoras que optimizan los procesos, mejoran la experiencia del usuario y impulsan el crecimiento empresarial.

Las historias de éxito de las empresas que han implementado aplicaciones impulsadas por LLMs muestran los beneficios tangibles y los resultados alcanzados. Por ejemplo, un chatbot de soporte al cliente implementado por una gran plataforma de comercio electrónico llevó a una reducción significativa en el tiempo de resolución de tickets de soporte y mejoró las puntuaciones de satisfacción del cliente. De manera similar, una aplicación de atención médica que utiliza las capacidades de LLM mejoró la precisión de la clasificación y redujo los tiempos de espera en las salas de emergencia, lo que en última instancia salvó vidas.

Conclusión

LangChain abre un mundo de posibilidades cuando se trata de construir aplicaciones impulsadas por LLM. Si tu interés radica en el completado de texto, la traducción de idiomas, el análisis de sentimientos, la resumen de texto o el reconocimiento de entidades nombradas, LangChain proporciona una plataforma intuitiva y potentes APIs para dar vida a tus ideas. Al aprovechar las capacidades de LLM, puedes crear aplicaciones inteligentes que comprendan y generen texto similar al humano, revolucionando la forma en que interactuamos con el lenguaje.

Aspectos clave

  • LangChain permite el desarrollo de aplicaciones que aprovechan las notables capacidades de los Modelos de Lenguaje (LLMs) para entender y generar texto similar al humano.
  • Con la plataforma intuitiva de LangChain, los desarrolladores pueden integrar fácilmente LLMs en sus proyectos instalando el SDK de LangChain y autenticándose con credenciales de API.
  • Al incorporar LLMs a través de LangChain, los desarrolladores pueden crear aplicaciones que ofrecen interacciones más naturales y conscientes del contexto con los usuarios, lo que resulta en experiencias de usuario mejoradas y un mayor compromiso.

Preguntas frecuentes

Los medios mostrados en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.