Inteligencia Artificial
Tutorial: Crea un RAG de gestión interna de información
¿Te preguntas cómo puedes visualizar rápidamente el estado de la información clave? Un RAG de gestión interna es lo que necesitas. En este tutorial paso a paso, aprenderás a crear un RAG de este tipo, que facilitará la toma de decisiones en tu empresa.
- Introducción
- Por qué es importante la gestión interna de información
- Qué es un RAG
- Requisitos previos
- Paso 1: Definir los criterios de evaluación
- Paso 2: Recopilación y análisis de datos
- Paso 3: Crear el RAG
- Paso 4: Monitoreo y actualización del RAG
- Mejores prácticas para un RAG eficaz
- Conclusiones
Tabla de contenidos
Introducción
¿Te gustaría poder usar un chat como ChatGPT para explorar tus propios documentos? ¿Alguna vez has querido probar Llama 3, el modelo de lenguaje creado por Meta? ¿Quieres poder navegar por tus documentos utilizando lenguaje natural? ¿Alguna vez has utilizado un LLM, pero la respuesta generada era ficticia?
En OpenWebinars te enseñamos a llevar a cabo estos proyectos y superar los retos asociados.
Uno de los mayores desafíos para cualquier empresa es la gestión de documentos internos. Estos documentos son de vital importancia para las empresas, ya que permiten conocer los procesos, estados e información de esta.
Conocer todos estos documentos y saber qué información contiene cada uno es complicado, pero utilizando la inteligencia artificial podemos facilitar el proceso.
RAG (Retrieved Augmented Generation) es la técnica que nos permite supera estos retos, permitiéndonos aplicar todo el potencial de los grandes modelos de lenguaje (LLM) a nuestros documentos internos.
Gracias a los sistemas RAG podemos consultar el contenido de nuestros documentos de manera sencilla, mientras mantenemos la privacidad y el control total sobre nuestra información.
Por qué es importante la gestión interna de información
La gestión interna de la información es fundamental para un correcto funcionamiento de cualquier empresa u organización. Conforme una empresa crece va creando un entorno más complejo y dinámico donde la información interna crece exponencialmente. Esta información es crítica, ya que permite reaprovechar el conocimiento aprendido en experiencias previas, reutilizar procesos, cumplir normativa, mejorar la eficiencia y reducir riesgos.
Una buena gestión de la información interna permite a los trabajadores acceder rápidamente a la información relevante, aplicar de manera óptima los procesos empresariales y mejorar la colaboración entre departamentos, consiguiendo así una mayor productividad, una reducción de costos y un mejor servicio al cliente.
Qué es un RAG
RAG (Retrieval Augmented Generation) es un marco de inteligencia artificial generativa (GenAI) que optimiza el funcionamiento de los grandes modelos de lenguaje. Este marco permite a los LLM hacer referencia a información que no forma parte de los datos con los que ha sido entrenado. Esto permite a los LLM acceder a información privada autorizada y a conocimientos específicos de un ámbito de trabajo, haciendo que genere respuestas más precisas, actualizadas, relevantes y útiles.
Este marco es especialmente útil para la gestión de documentación interna ya que nos permite explotar todo el potencial de los LLM para realizar búsquedas en nuestros documentos. Gracias a los sistemas RAG podemos chatear con nuestros documentos y encontrar de forma ágil la información que necesitamos.
Ventajas de utilizar un RAG en la gestión interna
Las ventajas más destacables que ofrecen los sistemas RAG son:
-
Implementación rentable: RAG es la aproximación con menor coste computacional, temporal y económico para mejorar la respuesta de los LLM. Al contrario que otras técnicas como fine-tuning o prompt-tuning los sistemas RAG no requieren modificar de ninguna manera el LLM utilizado, agilizando así el proceso de obtener mejores respuestas.
-
Superación de los desafíos más comunes de los LLM: Los LLM presenta grandes desafíos que aún no se han resuelto (generar información falsa, desactualizada o genérica, utilizar fuentes de datos no autorizadas o emplear términos no apropiados al contexto). Los sistemas RAG mitigan el impacto de estos problemas al permitir al LLM consultar fuentes de datos actualizadas y autorizadas.
-
Fácil acceso a la información: Los sistemas RAG permiten hacer búsquedas utilizando el lenguaje natural sobre una gran cantidad de documentos a la vez. Además, no requiere saber qué se está buscando explícitamente, de manera que podemos describir que información necesitamos y encontrarla, algo que no se puede hacer con técnicas más tradicionales como la búsqueda de palabras claves.
-
Respuestas mejoradas: Los sistemas RAG generan mejores respuestas que las LLM ya que pueden hacer uso de contextos más eficientes a la hora de generar las respuestas.
Requisitos previos
Para abordar con éxito el reto de crear un sistema RAG para la gestión interna de información es necesario comprobar que disponemos de los conocimientos y herramientas necesarias para trabajar de manera eficiente.
Habilidades y conocimientos previos necesarios
Para poder desarrollar un sistema RAG propio es fundamental tener los siguientes conocimientos:
- Conocimiento básicos de Python: Python es el lenguaje de programación más utilizado en tareas de inteligencia artificial.
- Conocimientos básicos de GenAI (inteligencia artificial generativa): Los sistemas RAG hacen uso de conceptos y técnicas de la inteligencia artificial generativa. Para poder crear sistemas RAG avanzados es importante conocer el funcionamiento de los LLM y la utilidad y proceso de creación de los embeddings.
Además de estos conocimientos básicos se recomienda estar familiarizado con:
- Bases de datos vectoriales: Las bases de datos vectoriales permiten almacenar de manera eficiente embeddings. Ya que los embeddings son una pieza fundamental de los sistemas RAG conocer las diversas bases de datos vectoriales nos ayudará a crear mejores sistemas RAG.
- Librerías comunes de sistemas RAG: La comunidad de Python ha creado un conjunto de librerías que facilitan el proceso de crear sistemas RAG. Conocer estas librerías facilita el proceso de creación de sistemas RAG. Las dos librerías más importantes son LangChain y Ragas.
Herramientas necesarias
Para poder crear un sistema RAG necesitaremos disponer de las siguientes herramientas:
- Modelo LLM: La pieza fundamental para crear sistemas RAG son los LLM. Estos se encargan de generar las respuestas a nuestras preguntas. Dentro del mercado actual existen muchos LLM disponibles. Podemos encontrar tanto modelos de pago como modelos open source. Los modelos más destacables son GPT4 de OpenAI, Gemini de Google, Llama3 de Meta y Claude de Anthropic.
- Modelo de embeddings: El modelo de embeddings nos permitirá recuperar los documentos más apropiados para responder a las preguntas que le hagamos a nuestro sistema de gestión de información, por lo tanto, disponer de un modelo de embeddings es fundamental.
- Base de datos vectorial: Con el fin de almacenar y gestionar los embeddings utilizados durante el funcionamiento del sistema RAG es necesario disponer de una base de datos vectorial.
Paso 1: Definir los criterios de evaluación
El mayor reto de crear un sistema RAG para la gestión interna de información no es crear el propio sistema. El mayor reto es el proceso de mantenimiento y mejora continua que debe realizarse para mantener un rendimiento óptimo a lo largo del tiempo.
Para garantizar el rendimiento óptimo es importante identificar unos criterios y parámetros de evaluación.
Identificación de criterios
Un sistema RAG tiene como objetivo crear respuestas de calidad a las preguntas del usuario. Generalmente para que una respuesta se considera buena si responde de forma precisa y concisa a la pregunta. Pero también es necesario evaluar otros aspectos del sistema más relacionados con como interactuan los usuarios con el sistema. Generalmente se evalúan cuatro criterios:
A continuación, se presentan algunos criterios clave que debes considerar al evaluar el rendimiento de tu sistema RAG:
- Precisión: Evalúa cómo de precisa es la información recuperada por el sistema RAG y si se ajusta a las necesidades de los usuarios.
- Relevancia: Valora si la información recuperada es relevante para la consulta realizada.
- Complejidad: Analiza si es el sistema RAG puede manejar consultas complejas y ambiguas.
- Usabilidad: Verifica si el sistema RAG es fácil de usar y permite a los usuarios pueden encontrar la información que necesitan de manera rápida y eficiente.
Parámetros de evaluación
Las métricas más comunes que se utilizan para medir los criterios anteriores son:
- Faithfulness: Mide la correspondencia respecto a la verdad de la respuesta generada frente al contexto dado. Se calcula a partir de la respuesta y el contexto recuperado y se escala al rango (0,1). Los valores cercanos a 1 indican respuestas más veraces.
- Answer Relevance: Esta métrica evalúa cómo de relacionada está la respuesta generada respecto a la pregunta realizada. Las respuestas incompletas o redundantes presentan puntuaciones más bajas.
- Context Recall: Mide cómo de relevante es el contexto recuperado para responder correctamente a la pregunta. Esta métrica asigna valores entre 0 y 1. Los valores más altos indican un mejor funcionamiento.
Paso 2: Recopilación y análisis de datos
El primer paso para la crear sistemas RAG es recuperar los datos que se desean utilizar en el proceso y analizarlos.
Métodos de recopilación de datos
Existe una gran cantidad de orígenes de datos que pueden contener información que queremos incluir en nuestro sistema de gestión de información interna.
En este tutorial vamos a utilizar la librería Langchain para cargar los datos.
Vamos a utilizar esta librería ya que:
- Permite una carga rápida de archivos de un gran número de orígenes como: Pdf guardados en local o en la nube, ficheros csv, directorios, archivos HTML, JSON, con formato markdown y documentos provenientes de Microsoft Office.
- Permite crear cargadores de datos personalizados.
Análisis de datos
Una vez definidos los datos que vamos a utilizar y el formato de origen es analizar los datos que vamos a utilizar.
Existen dos análisis principales que deben realizarse:
- Comprobación de si existen imágenes importantes que deban ser indexadas: Algunos orígenes de datos (como los pdfs) pueden contener imágenes. Es importante comprobar si existen imágenes entre los datos que utilizaremos en nuestro sistema RAG y si estas imágenes contienen información importante. Si se determina que existe información importante en las imágenes se puede aplicar un proceso de OCR o descripción de imágenes para no perder información.
- Analizar la cantidad de datos: Se debe analizar la cantidad de datos que se van a utilizar en nuestro sistema.
- Analizar el tamaño de salida de embeddings: Se debe estudiar cuál es el tamaño de salida de nuestro modelo de embeddings, ya que es un factor crítico a la hora de seleccionar la base de datos vectorial.
La cantidad de datos que se desea utilizar y el tamaño de salida de nuestros embeddings son factores determinantes para elegir la base vectorial que se va a utilizar.
Existen dos alternativas principales:
- FAISS: es una base de datos vectorial desarrollada por Meta. Es especialmente recomendable para aquellos proyectos en los que vayamos a trabajar con un gran número de datos.
- Chroma: es una base de datos vectorial open source. Es la base de datos vectorial más apropiada para utilizar con embeddings de alta dimensionalidad.
En este tutorial utilizaremos Chroma como base de datos vectorial ya que utilizaremos pocos datos.
Paso 3: Crear el RAG
A continuación, diseñaremos e implementaremos el sistema RAG.
Diseño del RAG
A la hora de diseñar un sistema RAG distinguiremos tres fases principales:
- Preparación de los datos y población de la base de datos vectorial: En esta primera fase se seleccionan los orígenes de datos que se van a utilizar, se analizan los datos y se decide qué base de datos vectorial se va a utilizar. Para este tutorial utilizaremos un pdf online como origen de datos y Chroma como base de datos vectorial. Concretamente vamos a utilizar el artículo científico Evaluation of Retrieval-Augmented Generation: A Survey.
- Recuperación de contexto y creación de prompts: En esta fase desarrollaremos los prompts que utilizaremos para indicar al LLM como debe generar la respuesta.
- Generación de la respuesta: Finalmente generaremos las respuestas a las preguntas planteadas por el usuario.
Implementación de un RAG aplicado a un caso real
Para llevar a cabo nuestra implementación de un RAG de gestión interna de información vamos a utilizar Google Collab. Si lo prefieres puedes seguir este tutorial desde tu propio ordenador.
Preparacion del sistema RAG
El primer paso para la creación del sistema es disponer de algún LLM. Nosotros vamos a utilizar Llama 3. Para utilizarlo vamos a descargar Ollama, una herramienta que nos permite ejecutar en local modelos LLM open source. Para llevar a cabo la instalación vamos a instalar la extensión xterm, que nos permite ejecutar una terminal en Google Collab.
!pip install colab-xterm
%load_ext colabxterm
Una vez instalado xterm lo ejecutaremos con el siguiente comando.
%xterm
En la consola ejecutaremos los siguientes comandos.
curl -fsSL https://ollama.com/install.sh | sh
ollama serve &
ollama pull llama3
ollama pull all-minilm
El primer comando instalará Ollama, el segundo ejecutará Ollama. Los dos últimos comandos descargarán los modelos que usaremos para crear nuestro sistema RAG.
Creación del sistema RAG
Una vez tengamos configurado el entorno procederemos a la creación del sistema. En primer lugar, instalaremos las librerías necesarias.
!pip install langchain
!pip install langchain-ollama
!pip install langchain_community
!pip install langchain_chroma
!pip install langchainhub
!pip install langsmith
A continuación, llevaremos a cabo los imports necesarios.
from langchain import hub
from langchain.vectorstores import Chroma
from langchain_community.document_loaders import PyPDFLoader
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_core.prompts.chat import ChatPromptTemplate
from langchain_ollama import ChatOllama, OllamaEmbeddings
En la siguiente celda definiremos los modelos que vamos a utilizar. Utilizaremos Llama 3 como LLM y all-minilm como modelo para crear los embeddings.
llm = ChatOllama(
model = "llama3"
)
emb = OllamaEmbeddings(model="all-minilm")
El cuarto pasó será preparar los datos que utilizaremos en nuestro sistema y almacenarlos en una base de datos vectoriales.
loader = PyPDFLoader("https://arxiv.org/pdf/2405.07437.pdf")
docs = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(docs)
vectorstore = Chroma.from_documents(documents=splits, embedding=emb)
Después crearemos los prompts que utilizaremos para generar las respuestas de nuestro sistema RAG y crearemos la variable rag_chain, encargada de orquestar todos los pasos necesarios para generar la respuesta.
retriever = vectorstore.as_retriever()
template = """
You are an expert on LLM and Generative Artificial Intelligence with more than 20 years experience.
You provide concise responses to the user questions following a "Let's think step by step." approach
Question: {question}
Answer: """
prompt = ChatPromptTemplate.from_template(template)
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
Finalmente invocaremos la variable rag_chain para generar la respuesta.
rag_chain.invoke("What is Task Decomposition?")
Paso 4: Monitoreo y actualización del RAG
Tanto la información interna de una empresa como las necesidades de los usuarios evolucionan con el tiempo. Por eso el monitoreo y actualización es un paso importante que se debe llevar a cabo periódicamente.
- Monitoreo continuo:Las necesidades de los usuarios evolucionan con el tiempo, un sistema que hoy satisface las necesidades de una empresa puede no satisfacerlas dentro de un año. Por eso es importante monitorizar a lo largo del tiempo el sistema y recuperar el feedback generado por los usuarios para detectar cuando es necesario evolucionar y mejorar el sistema.
- Actualización de datos: Con el paso del tiempo nuestra organización continuará generando nueva información que deberá introducirse en nuestro sistema RAG si queremos que sea accesible. Por este motivo nuestra base de datos vectorial debe actualizarse periódicamente para eliminar la información obsoleta e introducir la información más reciente.
- Comunicación de resultados: En entornos empresariales es importante destacar los resultados, el estado actual de la solución desarrollada y las posibles mejoras a futuro. Por ello a la hora de comunicar los progresos en la creación de un sistema RAG debemos comunicar siempre el alcance de la solución y las futuras mejoras a introducir.
Mejores prácticas para un RAG eficaz
Algunas de las mejores prácticas para implementar un sistema RAG eficiente son:
- Analizar los datos: Es importante analizar los datos que se van a utilizar para crear el sistema RAG con el fin de seleccionar las herramientas óptimas para cada caso de uso.
- Analizar LLM y modelos de embedding: Es fundamental analizar los modelos más recientes cada vez que se quiera crear un nuevo sistema RAG para utilizar siempre los mejores modelos.
- Llevar a cabo un monitoreo del sistema: Se deben llevar a cabo un monitoreo periódico de nuestros sistemas RAG con el fin de poder asegurar que siempre disponen de la información actualizada.
- Feedback humano: Para el correcto funcionamiento de un sistema RAG es esencial recuperar feedback de los usuarios y aplicar mejores provenientes de este feedback.
Conclusiones
La inteligencia artificial generativa es presente y futuro. Y dentro de esta los sistemas RAG son la actual punta de lanza. Estos sistemas nos permiten abarcar tareas complejas de búsqueda y generación de información de manera eficiente y efectiva.
Las grandes empresas TIC como Meta, Amazon, Google u OpenAI ya apuestan hoy en día por la creación de sistemas RAG y existen librerías estandarizadas para facilitar la implementación de estos sistemas. Gracias a estos hechos vamos a ver como los sistemas RAG proliferan en nuestro día a día para facilitarnos la búsqueda en documentos y la gestión documental.
¡Es el momento de empezar a usar sistemas RAG!