Creando un Chatbot con FalconAI, LangChain y Chainlit

Creando chatbot con FalconAI, LangChain y Chainlit

Introducción

La Inteligencia Artificial Generativa, especialmente los Modelos de Lenguaje Generativo a Gran Escala, han conquistado el mundo desde su nacimiento. Esto solo fue posible porque pudieron integrarse con diferentes aplicaciones, desde generar códigos programables funcionales hasta crear sistemas de soporte de chat totalmente gestionados por IA Generativa. Pero la mayoría de los Modelos de Lenguaje a Gran Escala en el espacio de la IA Generativa han estado cerrados al público; la mayoría no fue de código abierto. Si bien existen algunos modelos de código abierto, no se acercan ni de lejos a los Modelos de Lenguaje a Gran Escala de código cerrado. Pero recientemente, se lanzó FalconAI, un Modelo de Lenguaje a Gran Escala, que encabezó la tabla de clasificación de OpenLLM y se hizo de código abierto. Con este modelo en esta guía, crearemos una aplicación de chat con Falcon AI, LangChain y Chainlit.

Objetivos de Aprendizaje

  • Aprovechar el Modelo Falcon en Aplicaciones de IA Generativa
  • Construir una interfaz de usuario para Modelos de Lenguaje a Gran Escala con Chainlit
  • Trabajar con la API de Inferencia para acceder a modelos pre-entrenados en Hugging Face
  • Encadenar Modelos de Lenguaje a Gran Escala y Plantillas de Pregunta con LangChain
  • Integrar Cadenas de LangChain con Chainlit para construir Aplicaciones de Interfaz de Usuario

Este artículo se publicó como parte del Blogatón de Ciencia de Datos.

¿Qué es Falcon AI?

En el campo de la IA Generativa, Falcon AI es uno de los Modelos de Lenguaje a Gran Escala recientemente introducidos, conocido por ocupar el primer lugar en el Tablero de Líderes de OpenLLM. Falcon AI fue introducido por el Instituto de Innovación Tecnológica de los Emiratos Árabes Unidos (TII). La arquitectura de Falcon AI está diseñada de manera optimizada para la Inferencia. Cuando se presentó por primera vez, Falcon AI superó a modelos de última generación como Llama, Anthropic, DeepMind, etc., en el Tablero de Líderes de OpenLLM. El modelo fue entrenado en AWS Cloud con 384 GPUs conectadas de forma continua durante dos meses.

Actualmente, consta de dos modelos, Falcon 40B (40 mil millones de parámetros) y Falcon 7B (7 mil millones de parámetros). Lo más importante es que los creadores de Falcon AI han mencionado que el modelo será de código abierto, lo que permite a los desarrolladores trabajar con él para uso comercial sin restricciones. Falcon AI incluso proporciona los modelos Instruct, el Falcon-7B-Instruct y el Falcon-40B-Instruct, con los que podemos comenzar rápidamente a construir aplicaciones de chat. En esta guía, trabajaremos con el modelo Falcon-7B-Instruct.

¿Qué es Chainlit?

La biblioteca Chainlit es similar a la biblioteca Streamlit de Python. Pero el propósito previsto de esta biblioteca Chainlit es construir aplicaciones de chat con Modelos de Lenguaje a Gran Escala rápidamente, es decir, crear una interfaz similar a ChatGPT. Es posible desarrollar aplicaciones de chat conversacionales en minutos con el paquete Chainlit. Esta biblioteca está integrada de manera transparente con LangFlow y LangChain (la biblioteca para construir aplicaciones con Modelos de Lenguaje a Gran Escala), que haremos más adelante en esta guía.

Chainlit incluso permite visualizar el razonamiento de múltiples pasos; nos permite ver los resultados intermedios para saber cómo el Modelo de Lenguaje a Gran Escala llegó a la respuesta a una pregunta. Así que puedes ver claramente la cadena de pensamientos del modelo a través de la interfaz de usuario para comprender cómo concluyó el LLM la pregunta dada. Chainlit se limita a una conversación de texto y permite enviar y recibir imágenes a y desde los respectivos modelos de IA Generativa. Incluso nos permite actualizar la Plantilla de Pregunta en la interfaz de usuario en lugar de tener que volver al código y cambiarlo.

Generando la API de Inferencia de HuggingFace

Existen dos formas de trabajar con el modelo Falcon-7B-Instruct. Una es la forma tradicional, donde descargamos el modelo en la máquina local y luego lo usamos directamente. Pero debido a que este es un Modelo de Lenguaje a Gran Escala, necesitará una alta memoria de GPU para que funcione. Por lo tanto, optamos por la otra opción, llamar al modelo directamente a través de la API de Inferencia. La API de Inferencia es un token de API de HuggingFace con el que podemos acceder a todos los modelos transformadores en HuggingFace.

Para acceder a este token, necesitamos crear una cuenta en HuggingFace, lo cual podemos hacer yendo al sitio web oficial de HuggingFace. Después de iniciar sesión o registrarte con tus datos, ve a tu perfil y haz clic en la sección de Configuración. El proceso a partir de ahí será

Entonces, en Configuración, ve a Access Tokens. Crearás un nuevo token, con el que trabajaremos en el modelo Falcon-7B-Instruct. Haz clic en New Token para crear el nuevo token. Ingresa un nombre para el token y selecciona la opción de Rol como Write. Ahora haz clic en Generate para generar nuestro nuevo Token. Con este token, podemos acceder al modelo Falcon-7B-Instruct y construir aplicaciones.

Preparando el Entorno

Antes de adentrarnos en nuestra aplicación, crearemos un entorno ideal para que el código funcione. Para ello, necesitamos instalar las bibliotecas de Python necesarias. En primer lugar, comenzaremos instalando las bibliotecas que admiten el modelo. Para ello, haremos una instalación de pip de las siguientes bibliotecas.

$ pip install huggingface_hub 
$ pip install transformers

Estos comandos instalarán las bibliotecas HuggingFace Hub y Transformers. Estas bibliotecas llaman al modelo Falcon-7B-Instruct, que se encuentra en HuggingFace. A continuación, instalaremos la biblioteca LangChain para Python.

$ pip install langchain

Esto instalará el paquete LangChain para Python, con el que trabajaremos para crear nuestra aplicación de chat con el modelo de lenguaje Falcon Large. Por último, sin la interfaz de usuario, la aplicación conversacional no está completa. Por lo tanto, descargaremos la biblioteca chainlit.

$ pip install chainlit

Esto instalará la biblioteca Chainlit para Python. Con la ayuda de esta biblioteca, construiremos la interfaz de usuario para nuestra aplicación de chat conversacional. Después de instalar chainlit, necesitamos probar el paquete. Para ello, utiliza el siguiente comando en la terminal.

chainlit hello

Después de ingresar este comando, aparecerá una nueva ventana con la dirección localhost y el puerto 8000. La interfaz de usuario será visible. Esto indica que la biblioteca chainlit se ha instalado correctamente y está lista para funcionar con otras bibliotecas en Python.

Creando la Aplicación de Chat

En esta sección, comenzaremos a construir nuestra aplicación. Tenemos todas las bibliotecas necesarias para avanzar y construir nuestra propia aplicación de chat conversacional. Lo primero que haremos será importar las bibliotecas y almacenar la API de Inferencia de HuggingFace en un objeto ambiental.

import os
import chainlit as cl
from langchain import HuggingFaceHub, PromptTemplate, LLMChain

os.environ['API_KEY'] = 'Tu clave de API'
  • Comenzamos importando las bibliotecas os, chainlit y langchain.
  • De langchain, hemos importado HuggingFaceHub. Este HuggingFaceHub nos permitirá llamar al modelo Falcon-7B-Instruct a través de la API de Inferencia y recibir las respuestas generadas por el modelo.
  • El PromptTemplate es uno de los elementos de LangChain, necesario para construir aplicaciones basadas en el modelo de lenguaje grande. Define cómo el modelo debe interpretar las preguntas del usuario y en qué contexto debe responderlas.
  • Finalmente, incluso importamos LLMChain de LangChain. LLMChain es el módulo que encadena diferentes componentes de LangChain juntos. Aquí encadenaremos nuestro modelo de lenguaje grande Falcon-7B-Instruct con el PromptTemplate.
  • Luego almacenamos nuestra API de Inferencia de HuggingFace en una variable de entorno, es decir, os.environ[‘API_KEY’]

Instruir al Modelo Falcon

Ahora inferiremos el modelo Falcon Instruct a través del módulo HuggingFaceHub. Para ello, primero debemos proporcionar la ruta al modelo en Hugging Face. El código para esto será

model_id = 'tiiuae/falcon-7b-instruct'

falcon_llm = HuggingFaceHub(huggingfacehub_api_token=os.environ['API_KEY'],
                            repo_id=model_id,
                            model_kwargs={"temperature":0.8,"max_new_tokens":2000})
  • En primer lugar, debemos dar el id del modelo con el que trabajaremos. Para nosotros, será el modelo Falcon-7B-Instruct. El id de este modelo se puede encontrar directamente en el sitio web de HuggingFace, que será ‘tiiuae/falcon-7b-instruct’.
  • Ahora llamamos al módulo HuggingFaceHub, donde pasamos el token de la API, asignado a una variable de entorno, e incluso el repo_id, es decir, el id del modelo con el que trabajaremos.
  • También proporcionamos los parámetros del modelo, como la temperatura y el número máximo de nuevos tokens. La temperatura es cuánto debe ser creativo el modelo, donde 1 significa más creatividad y 0 no significa creatividad.

Ahora hemos definido claramente con qué modelo vamos a trabajar. Y la API de HuggingFace nos permitirá conectarnos a este modelo y ejecutar nuestras consultas para comenzar a construir nuestra aplicación.

Plantilla de indicación

Después de seleccionar el modelo, lo siguiente es definir la Plantilla de Indicación. La Plantilla de Indicación indica cómo debería comportarse el modelo. Indica cómo debería interpretar la pregunta proporcionada por el usuario. Incluso indica cómo debería concluir para dar la salida a la consulta del usuario. El código para definir nuestra Plantilla de Indicación sería

template = """

Eres un asistente de inteligencia artificial que proporciona respuestas útiles a las consultas de los usuarios.

{question}

"""
prompt = PromptTemplate(template=template, input_variables=['question'])

La variable de plantilla anterior define y establece el contexto de la Plantilla de Indicación para el modelo Falcon. El contexto aquí es simple, la IA debe proporcionar respuestas útiles a las consultas de los usuarios, seguido de la variable de entrada {question}. Luego, esta plantilla, junto con las variables definidas en ella, se proporciona a la función PromptTemplate, que luego se asigna a una variable. Esta variable es ahora la Plantilla de Indicación, que más tarde se encadenará junto con el modelo.

Encadenar ambos modelos

Ahora tenemos tanto el Falcon LLM como la Plantilla de Indicación listos. La parte final será encadenar ambos modelos juntos. Trabajaremos con el objeto LLMChain de la biblioteca LangChain para esto. El código para esto será

falcon_chain = LLMChain(llm=falcon_llm,
                        prompt=prompt,
                        verbose=True)

Con la ayuda de LLMChain, hemos encadenado el modelo Falcon-7B-Instruct con nuestra propia Plantilla de Indicación que hemos creado. Incluso hemos establecido el verbose = True, que es útil para saber qué sucede cuando se ejecuta el código. Ahora probemos el modelo dándole una consulta

print(falcon_chain.run("¿Cuáles son los colores del arco iris?"))

Aquí, hemos preguntado al modelo cuáles son los colores del arco iris. El arco iris contiene los colores VIBGYOR (Violeta, Índigo, Azul, Verde, Amarillo, Naranja y Rojo). La salida generada por el modelo Falcon 7B Instruct es exactamente la respuesta a la pregunta formulada. Establecer la opción verbose nos permite ver la Indicación después de darle formato y nos indica dónde comienza y termina la cadena. Finalmente, estamos listos para crear una interfaz de usuario para nuestra aplicación de chat conversacional.

Chainlit: Interfaz de usuario para modelos de lenguaje grandes

En esta sección, trabajaremos con la biblioteca Chainlit para crear la interfaz de usuario de nuestra aplicación. Chainlit es una biblioteca de Python que nos permite crear interfaces de chat para modelos de lenguaje grandes en minutos. Está integrada con LangFlow e incluso LangChain, la biblioteca en la que trabajamos anteriormente. Crear la interfaz de chat con Chainlit es simple. Tenemos que escribir el siguiente código:

@cl.langchain_factory(use_async=False)

def factory():

    prompt = PromptTemplate(template=template, input_variables=['question'])
    falcon_chain = LLMChain(llm=falcon_llm,
                        prompt=prompt,
                        verbose=True)

    return falcon_chain

Pasos

  • Primero, comenzamos con los decoradores de Chainlit para LangChain, el @cl.langchain_factory.
  • Luego definimos una función de fábrica que contiene el código de LangChain. El código que necesitamos aquí es la Plantilla de Indicación y el módulo LLMChain de LangChain, que construye y encadena nuestro Falcon LLM.
  • Finalmente, la variable de retorno debe ser una instancia de LangChain. Aquí, devolvemos la cadena final creada, es decir, la instancia de LLMChain, la falcon_chain.
  • El use_async = False indica que el código no debe utilizar la implementación asíncrona para el agente LangChain.

¡Vamos a ejecutar el código!

Eso es todo. Ahora, cuando ejecutemos el código, se mostrará una interfaz de chat. Pero, ¿cómo es esto posible? La cosa es que Chainlit se encarga de todo. Detrás de escena, administra las conexiones webhook, es responsable de crear una instancia separada de LangChain (Cadena, Agente, etc.) para cada usuario que visita el sitio. Para ejecutar nuestra aplicación, escribimos lo siguiente en la terminal.

$ chainlit run app.py -w

El -w indica recarga automática cada vez que hacemos cambios en vivo en nuestro código de aplicación. Después de ingresar esto, se abre una nueva pestaña con localhost:8000

Esta es la página de apertura, es decir, la pantalla de bienvenida de Chainlit. Vemos que Chainlit construye una interfaz de chat completa para nosotros con un solo decorador. Vamos a intentar interactuar con el modelo Falcon a través de esta interfaz de usuario

Vemos que la interfaz de usuario y el modelo Falcon Instruct funcionan perfectamente bien. El modelo puede proporcionar respuestas rápidas a las preguntas formuladas. Realmente intentó explicar la segunda pregunta según el contexto del usuario (explicar a un niño de 5 años). Este es el comienzo de lo que podemos lograr con estos modelos de IA generativa de código abierto. Con pocas modificaciones, podemos crear aplicaciones mucho más orientadas a problemas y basadas en escenarios reales.

Dado que la interfaz de chat es un sitio web, es completamente posible alojarlo en cualquiera de las plataformas en la nube. Podemos contenerizar la aplicación y luego intentar implementarla en cualquier servicio basado en contenedores en Google Cloud, AWS, Azure u otros servicios en la nube. De esta manera, podemos compartir nuestras aplicaciones con el mundo exterior.

Conclusión

En esta guía, hemos visto cómo construir una aplicación de chat simple con el nuevo modelo de lenguaje grande de código abierto Falcon, LangChain y Chainlit. Hemos aprovechado estos tres paquetes y los hemos interconectado para crear una solución completa desde el código hasta la aplicación de trabajo. Incluso hemos visto cómo obtener la clave de API de inferencia de HuggingFace para acceder a miles de modelos pre-entrenados de la biblioteca HuggingFace. Con la ayuda de LangChain, encadenamos el LLM con plantillas de inicio personalizadas. Finalmente, con Chainlit, pudimos crear una interfaz de aplicación de chat alrededor de nuestro modelo Falcon de LangChain en cuestión de minutos.

Algunos de los puntos clave de esta guía incluyen:

  • Falcon es un modelo de código abierto y es uno de los poderosos modelos de lenguaje grande, que actualmente se encuentra en la cima de la clasificación de OpenLLM
  • Con Chainlit, es posible crear una interfaz de usuario para LLM en cuestión de minutos
  • La API de inferencia nos permite conectarnos a muchos modelos diferentes presentes en HuggingFace
  • LangChain ayuda a construir plantillas de inicio personalizadas para los modelos de lenguaje grande
  • La integración perfecta de Chainlit con LangChain le permite construir aplicaciones de LLM de manera más rápida y sin errores

Preguntas frecuentes

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

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Los Anunciantes más Grandes del Mundo Aceptan el Poder de la IA Un Cambio de Paradigma en la Publicidad

En un movimiento que podría remodelar el panorama publicitario, algunos de los anunciantes más renombrados del mundo ...

Inteligencia Artificial

Med-PaLM 2 de Google será la IA médica más avanzada

Google, una de las principales empresas de tecnología del mundo, está dando un paso audaz hacia el ámbito de la atenc...

Inteligencia Artificial

Conoce Jupyter AI Desatando el poder de la inteligencia artificial en los cuadernos de Jupyter

En un avance innovador en inteligencia artificial y codificación, Project Jupyter presenta una adición revolucionaria...

Inteligencia Artificial

Google Research explora ¿Puede la retroalimentación de IA reemplazar la entrada humana para un aprendizaje por refuerzo efectivo en modelos de lenguaje grandes?

La retroalimentación humana es esencial para mejorar y optimizar los modelos de aprendizaje automático. En los último...