Propósito: El chatbot debe ser capaz de ingerir documentos y extraer inteligencia de los documentos y responder a preguntas específicas sin que el consumidor tenga que leerlos.
Cláusula de exención de responsabilidad: Es importante que las personas conozcan las políticas de su empresa en materia de protección e intercambio de datos. Además, las personas deben abstenerse de cargar cualquier dato relacionado con la empresa en las versiones de acceso público de ChatGPT y las API de OpenAI.
ChatGPT, con su inteligencia avanzada y su interfaz conversacional similar a la humana, es un potente modelo de lenguaje que está revolucionando la forma en que interactuamos con la tecnología. Sus excepcionales capacidades lo han convertido en un cambio de juego y nos han obligado a replantearnos cómo interactuamos con diferentes herramientas, software y sistemas. Sin embargo, el ascenso de ChatGPT marca sólo el comienzo de este viaje transformador.
Recientemente, Microsoft anunció Microsoft Copilot, un asistente digital impulsado por IA (https://news.microsoft.com/reinventing-productivity/), que se integrará en sus herramientas de productividad. Se trata de un gran paso hacia un cambio en nuestras experiencias y expectativas a la hora de interactuar con diversos sistemas. Es inevitable un cambio en productos empresariales como ERPs, CRMs, HRMs, EHRs, etc., que tradicionalmente han sido pesados para la entrada de datos y tienen una navegación engorrosa y capacidades de búsqueda. No basta con mejorar el funcionamiento de estos sistemas. En su lugar, será necesario revisar a fondo el funcionamiento de estas plataformas y la forma en que sus usuarios interactúan con ellas. Para lograrlo, habrá que infundir IA en todos los aspectos de la experiencia del usuario del sistema, con el objetivo de eliminar las tareas tediosas y dar rienda suelta a la creatividad.
Con la llegada de los LLM (Large Language Models) y la desmercantilización de la IA, la construcción de tales capacidades y experiencias se puede hacer con relativa facilidad. En esta entrada de blog quiero mostrar una de estas experiencias construyendo un Chatbot conversacional de preguntas y respuestas con tus propios documentos como base. El Chatbot será capaz de sintetizar rápidamente la información de todos los documentos y te permitirá hacer preguntas específicas utilizando lenguaje natural y más. En el pasado, la construcción de un sistema de esta naturaleza habría requerido la formación en hardware costoso, una amplia planificación y un desarrollo significativo. Sin embargo, ahora puede lograrse con sólo unas pocas líneas de código.
La idea de este Chatbot se me ocurrió mientras utilizaba por primera vez ChatGPT. Me pregunté si esta tecnología podría aplicarse a nuestras herramientas de productividad, ya que muchos de nosotros luchamos por mantenernos al día con la avalancha de información que recibimos a través de correos electrónicos, chats, documentos, power points y tantos otros canales. Sintetizar toda esta información y encontrar las respuestas que necesitamos puede llevarnos muchísimo tiempo. Exactamente lo que Microsoft Copilot pretende solucionar.
Antes de adentrarnos en los pasos a seguir, es crucial tener una comprensión básica de los LLM (Large Language Models) y los conceptos relacionados.
Tabla de contenidos
LLM (Large Language Model) Primer
Anteriormente, la creación de modelos para tareas específicas requería pruebas y experimentos exhaustivos, lo que implicaba entrenar modelos como RNN y CNN en subconjuntos de datos y, a continuación, realizar pruebas en los restantes y seleccionar el de mejor rendimiento. Sin embargo, la aparición de grandes modelos lingüísticos (LLM) con miles y miles de millones de parámetros ha dejado obsoleto este enfoque.
Con los LLM, el proceso de entrenamiento se divide ahora en dos pasos: preentrenamiento y ajuste. Durante el preentrenamiento, el modelo no se entrena para tareas lingüísticas específicas, sino que se le enseña a predecir palabras en una frase, que es la esencia del aprendizaje de un modelo lingüístico. Este proceso puede ser muy costoso y llevar mucho tiempo. Por ejemplo, GPT-3 se entrenó con 175.000 millones de parámetros y GPT-4 con 100 billones.
Ajuste: para realizar tareas específicas como la clasificación o el reconocimiento de nombres y entidades, el modelo preentrenado debe ajustarse con muestras y datos relevantes. Esto requiere muchos menos datos que el preentrenamiento y puede hacerse con unas 100.000 palabras. Sin embargo, el ajuste de modelos GPT de gran tamaño puede resultar muy costoso.
Una solución ha sido la introducción del aprendizaje en contexto. En lugar de afinar el modelo con muchos textos de entrada, el modelo toma como entrada unas pocas indicaciones específicas de la tarea y se adapta rápidamente para rendir bien en esa tarea. Un ejemplo de ello es el uso que hace ChatGPT de las instrucciones.
Mi enfoque de utilizar LLMs en el aprendizaje contextual para construir un Chatbot de forma económica
Inicialmente, mi plan era afinar el modelo GPT con mis documentos. Sin embargo, este enfoque me pareció costoso y exigente en términos de requisitos de datos. Además, no habría sido práctico ajustar el modelo cada vez que cambiaba un documento.
Otro enfoque que consideré fue la ingeniería de avisos, similar a ChatGPT, en la que podía proporcionar texto de los documentos dentro de los avisos. Pero pronto descubrí que había un límite en el número de tokens que se podían utilizar (un máximo de 4097 tokens en el momento de escribir esto). Dependiendo del modelo utilizado, las solicitudes podían utilizar fácilmente hasta 4097 tokens (unas 3000 palabras), repartidos entre la solicitud y la finalización. Pasar en un contexto largo también podría ser bastante caro.
Esto fue hasta que me encontré con la biblioteca LLamaIndex, que puede ayudar a indexar los datos, preservar los índices para su uso posterior, y utilizar sólo los tokens suficientes para la generación inmediata. Esto fue un cambio de juego, ¡y finalmente tuve mi momento eureka!
Creación de un chatbot para tus documentos: Paso a paso
Paso 1: Instalar módulos/paquetes
pip install llama-index
pip install openai
Paso 2: Importar paquetes
# Import necessary packages
from llama_index import GPTSimpleVectorIndex, Document, SimpleDirectoryReader
import os
os.environ['OPENAI_API_KEY'] = 'sk-YOUR-API-KEY'
Paso 3: Obtener la clave API de OpenAI
Para generar la clave de OpenAI, tienes que ir a https://platform.openai.com/account/api-keys, iniciar sesión y, a continuación, obtener las claves de forma destacada:
Paso 4: Cargar, indexar y guardar índices de documentos
LlamaIndex proporciona una gran variedad de conectores de datos (Slack, Sql, AWS S3, Google Drive y muchos más). Sin embargo, para mantener nuestro ejemplo simple utilizaremos un método incorporado SimpleDirectoryReader proporcionado por LllamaIndex para cargar nuestros documentos.
# Loading from a directory
documents = SimpleDirectoryReader('<<path_to_document_store_directory>>').load_data()
Una vez cargados los documentos, los índices pueden construirse simplemente llamando al método GPTSimpleVectorIndex
# Construct a simple vector index
index = GPTSimpleVectorIndex(documents)
Una de las características más interesantes de LllamaIndex es la posibilidad de guardar los índices y reutilizarlos más tarde, lo que ayuda a ahorrar el número de tokens necesarios para la posterior generación de contexto para el prompt.
# Save your index to a index.json file
index.save_to_disk('<<filename_and_path_for_index_file>>')
Paso 5: Toque final – Crear el chatbot
def bot(<<filename_and_path_for_index_file>>):
index = GPTSimpleVectorIndex.load_from_disk('<<filename_and_path_for_index_file>>')
while True:
input = input(‘How can I help? ‘)
response = vIndex.query(input)
print(f”Response: {response} \n”)
Paso 6: Prueba tu Chatbot
Utilicé un artículo del WSJ como muestra para mis pruebas:
Algunas reflexiones finales
Los pasos anteriores ofrecen una introducción básica a la utilización de LlamaIndex y GPT para responder preguntas. Sin embargo, existen numerosas aplicaciones avanzadas para estas herramientas. Un ejemplo es un sistema de historia clínica electrónica (HCE), que puede emplear LlamaIndex para trabajar con varios modelos lingüísticos de gran tamaño (LLM) y generar índices específicos de pacientes utilizando los datos recopilados por la HCE. Esto permitiría a los profesionales sanitarios hacer preguntas detalladas sobre un paciente y obtener información valiosa que las HCE tradicionales no pueden proporcionar. Esto puede mejorar significativamente la calidad de la atención prestada a los pacientes y los resultados de la asistencia sanitaria.