Tutorial sobre cómo crear aplicaciones LLM con LangChain
Las capacidades de los grandes modelos lingüísticos (LLM), como GPT-3 de OpenAI, BERT de Google y LLaMA de Meta, están transformando varios sectores al permitir la generación de diversos tipos de texto, desde contenido de marketing y código de ciencia de datos hasta poesía. Aunque ChatGPT ha acaparado una gran atención por su interfaz de chat de fácil uso, existen numerosas posibilidades sin explotar para aprovechar los LLM integrándolos en distintas aplicaciones de software.
Si te cautivan los poderes transformadores de la IA Generativa y los LLM, este tutorial es perfecto para ti. Aquí, exploramos LangChain - Un framework de código abierto en Python para construir aplicaciones basadas en Grandes Modelos Lingüísticos como GPT.
Obtenga más información sobre la creación de aplicaciones de IA con LangChain en nuestro Building Multimodal AI Applications with LangChain & the OpenAI API AI Code Along, donde descubrirá cómo transcribir contenido de vídeo de YouTube con la IA de voz a texto Whisper y, a continuación, utilizar GPT para hacer preguntas sobre el contenido.
¿Qué son los grandes modelos lingüísticos (LLM)?
Los grandes modelos lingüísticos (LLM) son sistemas avanzados de inteligencia artificial diseñados para comprender y generar textos similares a los humanos. Estos modelos se entrenan con grandes cantidades de datos, lo que les permite captar patrones complejos, comprender los matices del lenguaje y generar respuestas coherentes. Los LLM son capaces de realizar diversas tareas relacionadas con el lenguaje, como traducir idiomas, completar textos, resumirlos e incluso participar en interacciones conversacionales. GPT es un ejemplo de LLM.
LLM es un tipo de IA Generativa. Si quieres saber más sobre la IA Generativa y cómo puede potenciar tu creatividad, consulta nuestros blogs Using Generative AI to Boost Your Creativity y nuestro podcast, Inside the Generative AI Revolution. También puede inscribirse en nuestro próximo curso sobre Conceptos de grandes modelos lingüísticos.
Introducción a LangChain
LangChain es un marco de código abierto diseñado para facilitar el desarrollo de aplicaciones basadas en grandes modelos lingüísticos (LLM). Ofrece un conjunto de herramientas, componentes e interfaces que simplifican la construcción de aplicaciones centradas en LLM. Con LangChain, resulta muy sencillo gestionar las interacciones con los modelos lingüísticos, vincular a la perfección distintos componentes e incorporar recursos como API y bases de datos. Puede leer más sobre LangChain para ingeniería de datos y aplicaciones de datos en otro artículo.
La plataforma LangChain incluye una serie de API que los desarrolladores pueden integrar en sus aplicaciones, lo que les permite incorporar funciones de procesamiento del lenguaje sin tener que crear todo desde cero. Por lo tanto, LangChain simplifica eficazmente el proceso de creación de aplicaciones basadas en LLM, lo que lo hace adecuado para desarrolladores de todo el espectro de conocimientos.
Aplicaciones como los chatbots, los asistentes virtuales, las utilidades de traducción de idiomas y las herramientas de análisis de opiniones son ejemplos de aplicaciones impulsadas por LLM. Los desarrolladores aprovechan LangChain para crear aplicaciones a medida basadas en modelos lingüísticos que respondan a necesidades específicas.
Con los continuos avances y la mayor adopción del procesamiento del lenguaje natural, se espera que las aplicaciones potenciales de esta tecnología sean prácticamente ilimitadas. Estas son algunas características destacables de LangChain:
1. Avisos personalizables para satisfacer sus necesidades específicas
2. Construcción de eslabones de cadena para usos avanzados
3. Integración de modelos para el aumento de datos y acceso a capacidades de modelos lingüísticos de primera categoría, como GPT y HuggingFace Hub.
4. Componentes versátiles que permiten mezclarlos y combinarlos para necesidades específicas
5. Manipular el contexto para establecerlo y guiarlo a fin de mejorar la precisión y la satisfacción del usuario.
Configuración de LangChain en Python
Instalar LangChain en Python es bastante sencillo. Puedes instalarlo con pip o conda.
Instalar con pip
pip install langchain
Instalación mediante conda
install langchain -c conda-forge
Esto establecerá las necesidades básicas de LangChain. Gran parte de la utilidad de LangChain se materializa cuando se integra con diversos proveedores de modelos, almacenes de datos y similares.
Por defecto, las dependencias necesarias para estas integraciones NO se incluyen en la instalación. Para instalar todas las dependencias, puede ejecutar el siguiente comando:
pip install langchain[all]
La última opción es crear la biblioteca a partir del código fuente. En ese caso, puedes clonar el proyecto desde su repositorio de GitHub.
Configuración del entorno
El uso de LangChain suele requerir integraciones con diversos proveedores de modelos, almacenes de datos, API y componentes similares. Como con cualquier integración, debemos proporcionar las claves API adecuadas y relevantes para que LangChain funcione. Hay dos formas de conseguirlo:
1. Configurar la clave como variable de entorno
OPENAI_API_KEY="..."
Si prefieres no establecer una variable de entorno, puedes pasar la clave directamente a través del parámetro con nombre openai_api_key al iniciar la clase OpenAI LLM:
2. Configurar directamente la clave en la clase correspondiente
from langchain.llms import OpenAI
llm = OpenAI(openai_api_key="...")
Componentes clave de LangChain
LangChain destaca por su énfasis en la flexibilidad y la modularidad. Desmonta la cadena de procesamiento del lenguaje natural en componentes independientes, lo que permite a los desarrolladores adaptar los flujos de trabajo a sus necesidades. Esta adaptabilidad hace que LangChain sea ideal para construir aplicaciones de IA en diversos escenarios y sectores.
Componentes y cadenas
En LangChain, los componentes son módulos que realizan funciones específicas en la cadena de procesamiento lingüístico. Estos componentes pueden enlazarse en "cadenas" para crear flujos de trabajo a medida, como una cadena de chatbot de atención al cliente con módulos de análisis de sentimientos, reconocimiento de intenciones y generación de respuestas.
Plantillas
Las plantillas de avisos son avisos predefinidos reutilizables en todas las cadenas. Estas plantillas pueden volverse dinámicas y adaptables insertando "valores" específicos. Por ejemplo, una pregunta sobre el nombre de un usuario podría personalizarse insertando un valor específico. Esta función es beneficiosa para generar avisos basados en recursos dinámicos.
Almacenes vectoriales
Se utilizan para almacenar y buscar información mediante incrustaciones, es decir, analizando representaciones numéricas del significado de los documentos. VectorStore sirve de almacén para estas incrustaciones, lo que permite una búsqueda eficaz basada en la similitud semántica.
Índices y recuperadores
Los índices actúan como bases de datos que almacenan detalles y metadatos sobre los datos de entrenamiento del modelo, mientras que los recuperadores buscan rápidamente en este índice información específica. De este modo se mejoran las respuestas del modelo al proporcionarle contexto e información relacionada.
Analizadores de salida
Los analizadores de salida entran en juego para gestionar y refinar las respuestas generadas por el modelo. Pueden eliminar contenidos no deseados, adaptar el formato de salida o añadir datos adicionales a la respuesta. Así, los analizadores sintácticos de salida ayudan a extraer resultados estructurados, como objetos JSON, de las respuestas del modelo lingüístico.
Ejemplos de selectores
Los selectores de ejemplos en LangChain sirven para identificar instancias apropiadas a partir de los datos de entrenamiento del modelo, mejorando así la precisión y pertinencia de las respuestas generadas. Estos selectores pueden ajustarse para favorecer ciertos tipos de ejemplos o filtrar otros no relacionados, proporcionando una respuesta de IA a medida basada en la entrada del usuario.
Agentes
Los agentes son instancias únicas de LangChain, cada una con indicaciones, memoria y cadena específicas para un caso de uso concreto. Pueden desplegarse en varias plataformas, como web, móvil y chatbots, para atender a un público amplio.
Cómo construir una aplicación de modelo lingüístico en LangChain
LangChain proporciona una clase LLM diseñada para interactuar con varios proveedores de modelos lingüísticos, como OpenAI, Cohere y Hugging Face. La funcionalidad más básica de un LLM es la generación de texto. Es muy sencillo construir una aplicación con LangChain que tome una cadena de texto y devuelva la salida.
API_KEY ="..."
from langchain.llms import OpenAI
llm = OpenAI(model_name="text-ada-001", openai_api_key=API_KEY)
print(llm("Tell me a joke about data scientist"))
Salida:
>>> ¿Qué se obtiene cuando se manipulan datos? Un científico de datos".
En el ejemplo anterior, estamos utilizando el modelo text-ada-001 de OpenAI. Si desea cambiarlo por cualquier modelo de código abierto de HuggingFace, es un cambio sencillo:
API_KEY ="..."
from langchain import HuggingFaceHub
llm = HuggingFaceHub(repo_id = "google/flan-t5-xl", huggingfacehub_api_token = API_KEY)
print(llm("Tell me a joke about data scientist"))
Puedes obtener el identificador del hub de Hugging Face en tu cuenta de HF.
Si tiene varios avisos, puede enviar una lista de avisos a la vez utilizando el método generate
:
llm_response = llm.generate(['Tell me a joke about data scientist',
'Tell me a joke about recruiter',
'Tell me a joke about psychologist'])
Salida:
Esta es la aplicación más sencilla que puedes crear con LangChain. Recibe una pregunta, la envía a un modelo lingüístico de su elección y le devuelve la respuesta. Hay muchos parámetros que puedes controlar, como la `temperatura`. El parámetro de temperatura ajusta la aleatoriedad de la salida, y está fijado en 0,7 por defecto.
Gestión de plantillas para LLM en LangChain
Los LLM tienen API peculiares. Aunque pueda parecer intuitivo introducir las instrucciones en lenguaje natural, en realidad es necesario ajustarlas para obtener el resultado deseado de un LLM. Este proceso de ajuste se conoce como ingeniería rápida. Una vez que tenga un buen aviso, puede utilizarlo como plantilla para otros fines.
Un PromptTemplate
en LangChain le permite utilizar plantillas para generar un aviso. Esto es útil cuando se desea utilizar el mismo esquema de aviso en varios lugares pero con ciertos valores cambiados.
USER_INPUT = 'Paris'
from langchain.llms import OpenAI
from langchain import PromptTemplate
llm = OpenAI(model_name="text-davinci-003", openai_api_key=API_KEY)
template = """ I am travelling to {location}. What are the top 3 things I can do while I am there. Be very specific and respond as three bullet points """
prompt = PromptTemplate(
input_variables=["location"],
template=template,
)
final_prompt = prompt.format(location=USER_INPUT )
print(f"LLM Output: {llm(final_prompt)}")
Salida:
1. Suba a la Torre Eiffel y disfrute de las impresionantes vistas de la ciudad
2. Disfrute de un romántico crucero por el Sena y admire la bella arquitectura de sus orillas
3. Explore el Louvre y admire las obras de arte de renombre mundial expuestas
Si ahora quiere reutilizar este aviso para otra ciudad, sólo tiene que cambiar la variable USER_INPUT
. Ahora lo he cambiado de Paris
a Cancun, Mexico
. Vea cómo se ha modificado la salida:
Salida:
1. Relájese en la playa: Disfrute de las playas de arena blanca y aguas cristalinas del mar Caribe.
2. Explore las ruinas mayas: Visite antiguos yacimientos arqueológicos como Chichén Itzá, Tulum y Cobá para conocer la historia y la cultura de los mayas.
3. Haga un recorrido gastronómico: Pruebe los sabores tradicionales y conozca la cocina local haciendo una ruta gastronómica por Cancún.
Combinación de LLM y avisos en flujos de trabajo de varios pasos
El encadenamiento dentro del contexto LangChain se refiere al acto de integrar LLMs con otros elementos para construir una aplicación. Algunos ejemplos son:
- Combinación secuencial de varios LLM utilizando la salida del primer LLM como entrada para el segundo LLM (consulte esta sección).
- Integración de LLM con plantillas de avisos
- Fusión de LLM con datos externos, por ejemplo para responder preguntas
- Incorporación de LLM con memoria a largo plazo, como el historial de chat
Veamos un ejemplo del primer escenario en el que utilizaremos la salida del primer LLM como entrada para el segundo LLM.
from langchain.llms import OpenAI
from langchain.chains import LLMChain, SimpleSequentialChain
from langchain import PromptTemplate
llm = OpenAI(model_name="text-davinci-003", openai_api_key=API_KEY)
# first step in chain
template = "What is the most popular city in {country} for tourists? Just return the name of the city"
first_prompt = PromptTemplate(
input_variables=["country"],
template=template)
chain_one = LLMChain(llm = llm, prompt = first_prompt)
# second step in chain
second_prompt = PromptTemplate(
input_variables=["city"],
template="What are the top three things to do in this: {city} for tourists. Just return the answer as three bullet points.",)
chain_two = LLMChain(llm=llm, prompt=second_prompt)
# Combine the first and the second chain
overall_chain = SimpleSequentialChain(chains=[chain_one, chain_two], verbose=True)
final_answer = overall_chain.run("Canada")
Salida:
En este ejemplo concreto, creamos una cadena con dos componentes. El primer componente se encarga de identificar la ciudad más popular correspondiente a un determinado país introducido por el usuario. En cambio, el segundo componente se centra en proporcionar información sobre las tres principales actividades o atracciones disponibles para los turistas que visitan esa ciudad concreta.
Si quieres aprender conceptos más avanzados sobre la creación de aplicaciones en LangChain, echa un vistazo a este curso en directo sobre Creación de aplicaciones de IA con LangChain y GPT en DataCamp.
Conclusión y aprendizaje
Hace poco tiempo, todos estábamos muy impresionados por las impresionantes capacidades de ChatGPT. Sin embargo, el panorama ha evolucionado rápidamente y ahora tenemos acceso a nuevas herramientas para desarrolladores como LangChain, que nos permiten crear prototipos igual de notables en nuestros portátiles personales en cuestión de horas.
LangChain, un framework Python de código abierto, permite crear aplicaciones basadas en LLM (modelos de lenguaje). Este marco ofrece una interfaz versátil para numerosos modelos fundacionales, facilitando la gestión de avisos y sirviendo de eje central para otros componentes como plantillas de avisos, LLM adicionales, datos externos y otras herramientas a través de agentes (en el momento de escribir este artículo).
Si estás intentando mantenerte al día de todos los avances en IA Generativa y LLM, echa un vistazo a nuestro webinar Building AI Applications with LangChain and GPT. Aquí aprenderás los fundamentos del uso de LangChain para desarrollar aplicaciones de IA, así como a estructurar una aplicación de IA y a incrustar datos de texto para obtener un alto rendimiento. También puede consultar nuestra hoja de trucos sobre el panorama de las herramientas de IA generativa para explorar las distintas categorías de herramientas de IA generativa, sus aplicaciones y su influencia en diversos sectores.
Preguntas frecuentes
¿Qué es LangChain?
LangChain es un marco de código abierto diseñado para facilitar el desarrollo de aplicaciones basadas en grandes modelos lingüísticos (LLM). Simplifica la construcción de aplicaciones centradas en LLM proporcionando herramientas, componentes e interfaces.
¿Es gratuito el uso de LangChain?
Sí, LangChain es un framework gratuito y de código abierto, pero el uso de determinados LLM puede requerir una suscripción.
¿Puede LangChain trabajar con diferentes proveedores de modelos?
Sí, LangChain es compatible con varios proveedores de modelos lingüísticos como OpenAI, Cohere y Hugging Face, lo que permite flexibilidad en el desarrollo de aplicaciones.
¿Cómo se utiliza LangChain con los modelos de OpenAI?
Después de instalar LangChain, puedes integrarlo con los modelos de OpenAI configurando tu clave API de OpenAI y utilizando las interfaces proporcionadas para la interacción con el modelo.
¿Cómo se gestionan las plantillas de avisos en LangChain?
LangChain utiliza PromptTemplate
para gestionar plantillas de avisos, lo que permite crear avisos dinámicos y reutilizables que pueden adaptarse a casos de uso específicos cambiando las variables de entrada.
¿Qué es el encadenamiento en LangChain?
El encadenamiento se refiere a la integración de LLMs con otros elementos para construir una aplicación, como la combinación secuencial de múltiples LLMs, la integración de LLMs con plantillas de avisos o la incorporación de datos externos.
¿Puede LangChain manejar datos de documentos procedentes de diversas fuentes?
Sí, LangChain soporta cargadores de documentos para múltiples fuentes de datos, incluyendo texto, CSV, archivos PDF, y plataformas como Slack y Figma, para incorporar en aplicaciones LLM.
blog
12 proyectos LLM para todos los niveles
tutorial
Construir agentes LangChain para automatizar tareas en Python
tutorial
RAG Con Llama 3.1 8B, Ollama y Langchain: Tutorial
Ryan Ong
12 min
tutorial
Cómo formar a un LLM con PyTorch
tutorial
Guía introductoria para el ajuste preciso de los LLM
Josep Ferrer
12 min
tutorial