OpenWebinars

Inteligencia Artificial

LangChain y Python: Tutorial para crear una aplicación

La creatividad en el desarrollo de software está a punto de cambiar para siempre. Imagina combinar la simplicidad de Python con el poder de LangChain para crear aplicaciones que antes parecían ciencia ficción. Descubre en este tutorial cómo puedes llevar tus mejores ideas a la realidad con Python y LangChain.

Jorge López Blasco

Jorge López Blasco

Experto en Cloud Computing, Machine Learning y Big Data.

Lectura 11 minutos

Publicado el 2 de abril de 2024

Compartir

Introducción

¿Qué podría ser más emocionante que abrir un mundo de posibilidades para desarrollar aplicaciones inteligentes y conversacionales?

¿Te imaginas integrar cualquier modelo de lenguaje con tu aplicación desarrollada en Python?

LangChain hace posible esto y mucho más. Es un marco de trabajo de código abierto diseñado para impulsar aplicaciones basadas en modelos de lenguaje de gran tamaño (LLM). Estos modelos preentrenados con grandes cantidades de datos pueden generar respuestas a preguntas o crear contenido a partir de solicitudes basadas en texto.

En este artículo exploraremos cómo LangChain proporciona herramientas y abstracciones para mejorar la personalización, precisión y relevancia de la información generada por los modelos lingüísticos, además de facilitar la creación de diversas aplicaciones, como chatbots, generadores de contenido, resumidores de texto, entre otros.

Qué es LangChain

LangChain es un marco de trabajo de código abierto diseñado para crear aplicaciones basadas en modelos de lenguaje de gran tamaño (LLM). Estos LLM son modelos de aprendizaje profundo preentrenados con grandes cantidades de datos que pueden generar respuestas a preguntas o crear contenido a partir de solicitudes basadas en texto.

LangChain proporciona herramientas y abstracciones que mejoran la personalización, precisión y relevancia de la información generada por los modelos lingüísticos. Además, este marco facilita la creación de diversas aplicaciones, como chatbots, generadores de contenido, resumidores de textos, entre otros.

LangChain nos permite conectarnos a cualquier modelo de Hugging Face, lo que amplía significativamente nuestras capacidades para integrar y trabajar con una variedad de modelos avanzados de procesamiento del lenguaje natural.

¿Te imaginas poder conectarte a ChatGPT desde tu aplicación? Con LangChain, puedes acceder a esta funcionalidad de manera sencilla y eficiente, abriendo un mundo de posibilidades para desarrollar aplicaciones inteligentes y conversacionales.

LangChain permite reutilizar los LLM en aplicaciones específicas sin necesidad de volver a capacitarlos y simplifica el desarrollo de inteligencia artificial al abstraer la complejidad de las integraciones.

Aprende a desarrollar algoritmos de Machine Learning
Conviértete en un profesional de Machine Learning. Domina las habilidades y herramientas necesarias para implementar algoritmos de aprendizaje automático y Deep Learning en Python.
Comenzar gratis ahora

Importancia de Python en el desarrollo con LangChain

La importancia de Python en el desarrollo con LangChain radica en su versatilidad y popularidad en el ámbito de la inteligencia artificial y el procesamiento del lenguaje natural. Python es un lenguaje de programación ampliamente utilizado por su sintaxis clara, extensas bibliotecas y facilidad de uso, lo que lo convierte en una opción ideal para trabajar con LangChain.

Al utilizar Python junto con LangChain, los desarrolladores pueden aprovechar las capacidades avanzadas de este marco de trabajo para crear aplicaciones basadas en IA de manera eficiente.

La combinación de Python y LangChain simplifica el proceso de desarrollo, permitiendo a los desarrolladores crear soluciones innovadoras que pueden comprender, razonar y generar respuestas coherentes en entornos complejos. Python como has visto ofrece múltiples ventajas, y se ha convertido en un lenguaje ampliamente utilizado, por ello, si quieres convertirte en todo un experto, te recomendamos los cursos de Python de OpenWebinars.

Primeros pasos con LangChain en Python

Para completar nuestra aplicación, podemos seguir este esquema paso a paso, completándolo generaremos nuestra aplicación con Langchain basada en Python.

Imagen 0 en LangChain y Python: Tutorial para crear una aplicación

(FUENTE https://python.langchain.com/docs/use_cases/question_answering/)

Configuración del entorno de desarrollo Python

Antes que nada, necesitas tener Python instalado en tu sistema. Puedes descargarlo desde el sitio web oficial de Python e instalar la última versión estable.

Además, necesitaras un IDE, yo en lo personal recomiendo VS Code, puedes descargarlo desde su web oficial de Visual Studio Code.

Instalación de LangChain y dependencias necesarias

Ya con el entorno preparado, para comenzar con el proceso, lo primero que necesitamos son las dependencias.

En nuestro caso, optaremos por utilizar el modelo GPT de OpenAI. Sin embargo, como hemos comentado anteriormente, existen tantas opciones como proveedores, podríamos optar Hugging Face Hub, Cohere, o incluso un endpoint de API proporcionado por Amazon API Gateway.

pip install langchain openai

Creación de un proyecto básico de LangChain

Una vez que hemos completado la instalación de LangChain y configurado nuestro entorno, estamos listos para comenzar a desarrollar nuestra aplicación de modelo de lenguaje.

¿Cómo podemos entonces interactuar con ChatGPT para generar texto? Una funcionalidad esencial para muchas aplicaciones valiosas, como JasperAI y CopyAI, que basan su negocio en esta capacidad.

Primero, necesitamos importar el módulo envolvente de LLM.

from langchain. llms import OpenAI

Luego, podemos inicializarlo con los parámetros deseados. En este caso, es probable que queramos que las salidas sean estándar, así que lo inicializaremos con una temperatura media/baja.

llm = OpenAI(temperature=0.3)

Finalmente, podemos llamar al modelo con algún input específico.

text = “¿Cuál sería un buen nombre de empresa para una compañía que desarrolla aplicaciones alimentadas por LLMs?”

print(llm(text))

Con estos pasos, podemos comenzar a utilizar LangChain para generar texto utilizando un modelo de lenguaje pre-entrenado.

Explicación de la estructura del proyecto y archivos clave

Esto está muy bien, pero por lo general no queremos llamar al LLM una sola vez, lo que hace necesaria una estructura por parte de la aplicación y la definición de algunos archivos clave. A continuación, vamos a ver la estructura típica de un proyecto en LangChain.

  • Directorio principal: Aquí se encuentran los archivos y carpetas fundamentales para el funcionamiento de la aplicación basada en LangChain.
  • Carpeta de configuración: Aquí se almacenan los archivos de configuración que definen cómo interactúa la aplicación con los modelos de lenguaje y otras configuraciones específicas.
  • Carpeta de modelos: Contiene los modelos de lenguaje pre-entrenados o personalizados que serán utilizados por la aplicación para generar respuestas o realizar tareas específicas.
  • Carpeta de recursos: En esta carpeta se guardan recursos adicionales como archivos de vocabulario, datos auxiliares o cualquier otro elemento necesario para el funcionamiento correcto de la aplicación.
  • Carpeta de scripts: Aquí se encuentran los scripts y archivos de código fuente que implementan la lógica de la aplicación, como la interacción con los modelos, el procesamiento de texto y la generación de respuestas.

Entre los archivos clave podemos destacar:

  • config.json: Este archivo contiene la configuración principal de la aplicación, incluyendo detalles sobre los modelos a utilizar, parámetros de procesamiento y otras opciones importantes.
  • model.py: Es el archivo que define la estructura y funcionalidades del modelo de lenguaje dentro de la aplicación. Aquí se gestionan las interacciones con el modelo y las operaciones relacionadas.
  • utils.py: En este archivo se suelen incluir funciones auxiliares y utilidades que son utilizadas en diferentes partes del proyecto para tareas como preprocesamiento de texto, manejo de datos, entre otros.
  • app.py: Puede ser el archivo principal que inicia la aplicación y gestiona las interacciones con el usuario, recopilando entradas, enviándolas al modelo y mostrando las respuestas generadas.

Al comprender esta estructura básica del proyecto en LangChain y los roles clave que desempeñan cada archivo, los desarrolladores pueden comenzar a construir aplicaciones inteligentes basadas en modelos lingüísticos avanzados con mayor claridad y eficacia.

Definición de funcionalidades de nuestra aplicación

LangChain ofrece una serie de capacidades específicas que podemos incluir en nuestra aplicación. Algunas de ellas incluyen:

  • Interacción conversacional: Permite a los usuarios interactuar con la aplicación de manera conversacional, realizando preguntas y recibiendo respuestas coherentes y relevantes.
  • Generación de contenido: Capacidad para generar contenido basado en solicitudes de los usuarios, como respuestas a preguntas, resúmenes de texto o creación de texto creativo.
  • Personalización del modelo: Posibilidad de personalizar el modelo de lenguaje utilizado por la aplicación para adaptarse a un dominio específico o mejorar la precisión de las respuestas.
  • Integración con fuentes de datos externas: Conectar la aplicación a fuentes de datos externas para enriquecer las respuestas generadas y mejorar la relevancia de la información proporcionada.
  • Gestión del contexto y memoria: Mantener el contexto de la conversación y la memoria a lo largo de interacciones multi-turno para mejorar la coherencia y relevancia de las respuestas.

Integrando LangChain con Python

En esta sección nos ocuparemos de los tres primeros pasos del esquema que hemos mostrado previamente. Aunque LangChain ofrece una amplia gama de herramientas para abarcar la mayor cantidad de casos posibles, es posible comenzar a trabajar con muy pocas líneas de código.

Cuando nos referimos a documentos en LangChain, nos referimos a los datos que proporcionarán contexto a la aplicación de lenguaje. Por lo tanto, lo primero que debemos hacer es cargarlos en la memoria.

Por ejemplo, podemos cargar una página web y, gracias a la funcionalidad integrada de LangChain con BeautifulSoup4, no necesitamos realizar la limpieza y recopilación del texto manualmente. Para este ejemplo, hemos seleccionado la página web recomendada del día de la Wikipedia, sobre la cual construiremos nuestro sistema de preguntas y respuestas.

from langchain. document_loaders import WebBaseLoader.

loader = WebBaseLoader(“https://es.wikipedia.org/wiki/Empire_State_of_Mind“)

Código de muestra para integrar LangChain en tu aplicación Python

Una vez que los documentos están en memoria, podemos utilizar uno de los splitters proporcionados por LangChain para dividir el texto en fragmentos.

Cuando trabajamos con documentos extensos, lo óptimo es dividirlos en fragmentos más pequeños para facilitar su almacenamiento y búsqueda. Idealmente, deseamos que todo lo relacionado semánticamente esté contenido en un mismo fragmento.

from langchain.text_splitter import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter (chunk_size=1000, chunk_overlap=100)
all_splits = text_splitter. split_documents (loader. load ())

Finalmente, solo queda guardar la información codificada en embeddings. Para esta aplicación, utilizaremos ChromaDB.

from langchain. vectorstores import Chroma
from langchain. embeddings import OpenAIEmbeddings

vectorstore = Chroma.from_documents (documents=all_splits, embedding=OpenAIEmbeddings ())

Tras esto buscaremos en la base de datos que acabamos de crear la información que necesitamos de manera conversacional. Es decir, utilizaremos un algoritmo de búsqueda en la base de datos y, simultáneamente, emplearemos un modelo de lenguaje (en este caso, GPT) para obtener la información en forma de respuesta.

from langchain. chains import RetrievalQA.
from langchain. chat_models import ChatOpenAI.

llm = ChatOpenAI (model_name="gpt-3.5-turbo", temperature=0)
qa_chain = RetrievalQA.from_chain_type (llm, retriever=vectorstore.as_retriever ())
question = "¿De qué trata la canción?"
qa_chain ({"query": question})

Obtenemos la siguiente respuesta:

{‘query’: ‘¿De qué trata la canción?’, ‘result’: ‘La canción trata sobre la esencia de la ciudad de Nueva York y hace referencia a elementos característicos de la cultura estadounidense, como el equipo de béisbol New York Yankees. También contiene referencias a drogas, lugares de Nueva York y a sus residentes famosos.’}

Esta respuesta se basa en el artículo proporcionado.

Podemos personalizar los prompts según nuestro gusto para darle carácter a la aplicación o incluso modificar su propósito. Para ello, creamos un prompt que cumpla nuestro objetivo y se integre fácilmente con las respuestas de la parte conversacional.

Por ejemplo, si nos gustan los emojis, podemos solicitar que la respuesta los incluya:

from langchain. prompts import PromptTemplate

template = """Responde introduciendo emojis en cada frase y al final con un emoji de un abrazo.
{context}
Pregunta: {question}
Respuesta:"""
QA_CHAIN_PROMPT = PromptTemplate (input_variables= ["context", "question"], template=template)
qa_chain = RetrievalQA.from_chain_type (llm, retriever=vectorstore.as_retriever (), chain_type_kwargs= {"prompt": QA_CHAIN_PROMPT})
question = "¿De qué trata la canción?"
qa_chain ({"query": question})

La respuesta que obtenemos es la siguiente:

{'query': '¿De qué trata la canción?', 'result': 'La canción trata sobre la esencia de la ciudad de Nueva York y contiene referencias a elementos característicos de la cultura estadounidense, como el equipo de béisbol New York Yankees. 🎶🗽🎹🎤🌃🏙️🎵 ¡Un abrazo! 🤗'}

Esta es solo una pequeña demo, si quieres ver cómo crear aplicaciones más potentes e interesantes te recomendamos el curso de Desarrollo de aplicaciones impulsadas por LangChain en Python.

Explicación paso a paso del proceso de integración

Como habéis podido observar, una vez que los documentos están cargados en memoria, se utiliza la clase RecursiveCharacterTextSplitter de LangChain para dividir el texto en fragmentos más pequeños. Esta división se realiza con el objetivo de facilitar el almacenamiento y la búsqueda de información, asegurando que los fragmentos contengan semánticamente contenido relacionado.

Luego, estos fragmentos se almacenan en embeddings utilizando la clase Chroma de LangChain, junto con los embeddings proporcionados por OpenAI, lo que nos permite representar la información de manera codificada y eficiente.

Tras esto, se busca y se responde de manera conversacional utilizando una combinación de búsqueda en la base de datos y modelado del lenguaje.

Se emplea un algoritmo de búsqueda en la base de datos recién creada, y simultáneamente se utiliza un modelo de lenguaje GPT proporcionado por OpenAI para generar respuestas contextualmente relevantes. Además, se puede personalizar la interacción utilizando prompts específicos, como solicitar respuestas con emojis, lo que añade un toque interactivo y amigable a la conversación.

Pruebas y depuración de nuestra aplicación

El testing es fundamental en el desarrollo de cualquier producto de software, y Langchain en ese sentido no iba a ser menos, vamos a ver consejos sobre cómo implementar el testing en nuestra aplicación y herramientas interesantes.

Consejos para probar tu aplicación LangChain

Todos los paquetes de Langchain tienen pruebas unitarias y pruebas de integración, normalmente se recomienda anteponer las pruebas unitarias sobre las pruebas de integración ya que estas son más ligeras y baratas.

Las pruebas unitarias se ejecutan en cada solicitud de extracción (pull request), por lo que deben ser rápidas y confiables. Por otro lado, las pruebas de integración se ejecutan una vez al día y requieren más configuración, por lo que deben reservarse para confirmar los puntos de interfaz con servicios externos.

Las pruebas unitarias cubren la lógica modular que no requiere llamadas a APIs externas. Si añades nueva lógica, por favor añade una prueba unitaria. Por otro lado, las pruebas de integración cubren la lógica que requiere hacer llamadas a APIs externas (a menudo la integración con otros servicios).

Casi ninguna prueba debería ser de integración. Las pruebas que requieren hacer conexiones de red dificultan que otros desarrolladores prueben el código, por ello en su lugar, prefieren usar la biblioteca responses y/o mock. patch para simular las solicitudes utilizando pequeños fixtures.

Herramientas y técnicas de depuración recomendadas

La gente de LangChain está creando actualmente una plataforma de desarrollo completa llamada LangSmith que ofrecerá una visión profunda y en tiempo real del producto con una visibilidad completa de la cadena.

Ahora mismo, los desarrolladores tienen que probar manualmente cualquier cosa que no funcione correctamente. Pronto, este conjunto completo de herramientas de depuración para probar, evaluar y supervisar hará que el desarrollo con LangChain sea mucho más fluido.

Despliegue de la aplicación

El despliegue de una aplicación es un paso crucial en el ciclo de desarrollo de software, donde se lleva el código de una aplicación desde un entorno de desarrollo a un entorno de producción para que los usuarios finales puedan acceder a ella.

Este proceso implica preparar la aplicación, configurar el entorno, empaquetar el código y finalmente ponerlo en funcionamiento en un servidor o plataforma de hosting.

Guía para preparar tu aplicación para el despliegue

Para preparar tu aplicación LangChain para el despliegue primero asegúrate de que tu código esté limpio, bien estructurado y optimizado para el rendimiento. Tras esto verifica que todas las dependencias de tu aplicación estén actualizadas y correctamente especificadas en el archivo de configuración.

Empaqueta tu aplicación LangChain en un formato adecuado para el despliegue, como un contenedor Docker o un archivo ZIP. Selecciona el servicio de hosting adecuado para tu aplicación LangChain, como Lang Serve o Ro Cloud.

Es muy recomendable que establezcas también un sistema de monitoreo para supervisar el rendimiento de tu aplicación y realiza mantenimiento regularmente.

Opciones de hosting y recomendaciones

Para alojar aplicaciones LangChain de manera más detallada podemos considerar diversas opciones. Lang Serve es una plataforma que facilita el despliegue de aplicaciones LangChain.

Ofrece características como la conversión automática de aplicaciones en endpoints, generación de documentación Swagger para la API, un playground para probar la interacción con la API y una forma sencilla de implementar en la nube. Además, su interfaz de línea de comandos (CLI) simplifica la construcción y despliegue de aplicaciones LangChain al abstraer las complejidades del backend.

Por otro lado, Ro Cloud es otra alternativa para hospedar aplicaciones LangChain. Este servicio proporciona un entorno seguro y escalable para ejecutar tus aplicaciones. Con Ro Cloud, puedes desplegar tus aplicaciones LangChain en servidores externos con facilidad, garantizando un rendimiento óptimo y una alta disponibilidad.

Próximos pasos con LangChain

Tras esto te recomendamos familiarizarte con la creación y concatenación de cadenas básicas, así como el uso de herramientas para enriquecer los resultados

Además, puede serte muy interesante explorar la construcción de agentes LangChain con herramientas como ReAct para planificar y actuar en entornos interactivos. Y profundizar en los elementos clave de LangChain, como modelos, prompts, índices, cadenas y agentes para comprender mejor su funcionamiento

Conclusiones

LangChain emerge como una herramienta versátil y poderosa para el desarrollo de aplicaciones basadas en modelos de lenguaje de gran tamaño. Su capacidad para mejorar la personalización, precisión y relevancia de la información generada por los modelos lingüísticos promete abrir nuevas oportunidades en el campo de la inteligencia artificial y el procesamiento del lenguaje natural.

La integración de LangChain con Python facilita aún más su adopción, aprovechando la popularidad y la robustez de este lenguaje de programación. Con su estructura clara de proyecto y sus herramientas específicas, LangChain permite a los desarrolladores crear soluciones innovadoras de manera eficiente.

Además, la capacidad de LangChain para conectarse con una variedad de modelos avanzados de procesamiento del lenguaje natural amplía el espectro de aplicaciones posibles, desde chatbots hasta generadores de contenido y más allá.

En resumen, LangChain representa un avance significativo en el desarrollo de aplicaciones inteligentes y conversacionales, abriendo un vasto panorama de posibilidades para la innovación en el campo del procesamiento del lenguaje natural. ¿Quién no se sentiría entusiasmado por explorar estas nuevas posibilidades en el mundo de la inteligencia artificial?

Bombilla

Lo que deberías recordar de LangChain y Python

  • Diseñado para crear aplicaciones basadas en modelos de lenguaje de gran tamaño (LLM), LangChain ofrece un entorno flexible y accesible para desarrolladores.
  • Los LLM son modelos de aprendizaje profundo preentrenados con grandes cantidades de datos, capaces de generar respuestas a preguntas o crear contenido a partir de solicitudes basadas en texto.
  • LangChain proporciona herramientas y abstracciones que mejoran la personalización, precisión y relevancia de la información generada por los modelos lingüísticos.
  • Desde chatbots hasta generadores de contenido y resumidores de textos, LangChain facilita la creación de una amplia gama de aplicaciones inteligentes basadas en modelos de lenguaje.
  • LangChain permite conectarse a cualquier modelo de Hugging Face, ampliando las capacidades de integración y trabajo con una variedad de modelos avanzados de procesamiento del lenguaje natural.
  • Python desempeña un papel crucial en el desarrollo con LangChain debido a su versatilidad y popularidad en el ámbito de la inteligencia artificial y el procesamiento del lenguaje natural.
  • LangChain proporciona una estructura clara de proyecto, con directorios específicos para configuración, modelos, recursos y scripts, facilitando el desarrollo y la comprensión del proyecto.
  • LangChain abre un mundo de posibilidades para el desarrollo de aplicaciones inteligentes y conversacionales, impulsando la innovación en el campo del procesamiento del lenguaje natural.
Compartir este post

También te puede interesar

Icono de la tecnología
Curso

Python 3 desde cero

Intermedio
6 h. y 8 min.

Descubre el fascinante mundo del lenguaje de programación que funciona como una auténtica navaja suiza cuando se trata...

José Domingo Muñoz
4.4