Creación de aplicaciones avanzadas de generación aumentada por recuperación (RAG) con LlamaIndex
Introducción
En un reciente Meetup de Datos No Estructurados organizado por Zilliz (San Francisco), Laurie Voss, VP de Relaciones con Desarrolladores en LlamaIndex, dio una charla sobre "Creación de aplicaciones RAG avanzadas con LlamaIndex. Compartió sus conocimientos sobre cómo hacer que los frameworks de Generación Aumentada por Recuperación (RAG) sean más simples y estén listos para producción con LlamaIndex.
Profundicemos en los conceptos de RAG y veamos cómo LlamaIndex 🦙 ayuda a desarrollar aplicaciones RAG. Para dar un contexto rápido sobre LlamaIndex (anteriormente conocido como GPTIndex), gran parte de sus trabajos anteriores se realizaron con tecnologías robustas de código cerrado como OpenAI. Sin embargo, a medida que los modelos de código abierto empezaron a ponerse al día, comenzaron a integrarse con alternativas de código abierto. Ya sean LLMs, modelos de embedding o tecnologías de reordenamiento, ahora cubren varias opciones para que un usuario use sus propios datos para crear una aplicación RAG.
¿Qué es la Generación Aumentada por Recuperación (RAG)?
Flujo de trabajo sistemático de RAG
RAG es un framework diseñado para superar las limitaciones de los LLMs ayudándolos con capacidades de recuperación. El principal inconveniente de los LLMs es que tienen ventanas de contexto limitadas y solo pueden manejar simultáneamente parte de los datos de una organización (no más de un millón de tokens a la vez). RAG aborda este problema recuperando selectivamente solo el texto/los datos más relevantes para proporcionar las respuestas más precisas.
Beneficios clave de RAG:
Precisión: Cuando los datos relevantes y concisos se recuperan mediante métodos de recuperación implementados y se envían a un LLM, se garantizan respuestas precisas.
Actualidad: Algunos pueden preguntarse por qué las empresas no entrenan LLMs usando sus datos. El desafío del ajuste fino es que cargar un LLM en cualquier entorno, especialmente los de alta calidad, ya es costoso. Por otro lado, la Generación Aumentada por Recuperación (RAG) permite actualizaciones de datos fáciles y en tiempo real. Esto convierte a RAG en una solución práctica para entornos de datos dinámicos, como los que se encuentran en grandes bufetes privados o empresas industriales.
Procedencia: RAG puede rastrear las fuentes específicas de información, lo cual es crucial para aplicaciones que requieren datos verificables.
Para simplificarlo, ¿recuerdas las pruebas de comprensión que hacías de niño? RAG es muy similar a eso. Los fragmentos de texto recuperados actúan como una comprensión, a partir de la cual el niño (LLM) debe responder consultas. Es así de simple ;-)
Técnicas avanzadas de RAG
Dos técnicas se utilizan ampliamente para la recuperación de información.
Búsqueda por palabras clave: Los métodos tradicionales de búsqueda por palabras clave siguen siendo efectivos para recuperar datos basados en términos específicos.
Búsqueda vectorial(la más potente), también conocida como búsqueda de similitud vectorial: Piensa en una búsqueda vectorial como algo que convierte palabras en listas numéricas llamadas vectores. Estos vectores capturan la esencia del significado de cada palabra. Podemos encontrar palabras similares comparando estos vectores según su cercanía numérica (medida principalmente por similitud del coseno o producto punto). La búsqueda vectorial nos ayuda a recuperar datos de forma mucho más efectiva y confiable. Una vez que realizamos la búsqueda vectorial, el LLM puede acceder al texto más relevante para responder la consulta.
Los motores de búsqueda se utilizan en sistemas RAG para recuperar documentos de diversas fuentes, mejorando la recuperación de información relevante y aumentando la capacidad de respuesta general de las herramientas de IA.
Cuando pienses en una búsqueda vectorial, piensa en tu Diccionario Oxford. Sin embargo, agrupa las palabras por sus secuencias de letras en lugar de agruparlas por su significado. Los modelos de incrustación vectorial hacen lo mismo dimensionalmente.
Agrupación dimensional y semántica de términos mediante búsqueda vectorial
Además, las bases de datos vectoriales de código abierto como Milvus pueden usarse para configurar almacenes vectoriales gratis. Compruébalo aquí.
LlamaIndex: Simplificando la implementación de RAG
LlamaIndex es un framework de código abierto que conecta tus datos con los LLMs, disponible en Python y TypeScript. Simplifica la creación de aplicaciones RAG, permitiendo a los desarrolladores construir sistemas RAG funcionales con un código mínimo. Para implementar una funcionalidad RAG básica, solo necesitas cinco líneas de código Python, gracias a LlamaIndex.
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
Funciones avanzadas de RAG para la ingesta de datos y las consultas con LlamaIndex
LlamaIndex también proporciona una amplia gama de funciones avanzadas de ingesta de datos y consultas para tus aplicaciones RAG.
Ingesta
Conectores de datos: LlamaHub de LlamaIndex proporciona conectores para varias fuentes de datos, incluyendo Google Drive, Notion, Slack y bases de datos como Postgres y MongoDB.
Análisis de PDF: LlamaIndex ofrece capacidades avanzadas de análisis de PDF, convirtiendo PDFs complejos en Markdown para una mejor comprensión por parte de los LLMs, ya que los LLMs se entrenan con una gran cantidad de datos Markdown.
Modelos de incrustación: LlamaIndex admite varios modelos de incrustación de código abierto y de código cerrado, lo que permite la personalización según el dominio.
Almacenes vectoriales: LlamaIndex se integra con múltiples bases de datos vectoriales, nuevamente, tanto de código abierto como de código cerrado, incluyendo Milvus y Zilliz Cloud, para un almacenamiento y recuperación eficientes.
Consultas
- Motor de consultas de subpreguntas
Para preguntas complejas que requieren múltiples consultas simples, el motor de consultas de subpreguntas descompone la consulta principal en partes más pequeñas, recupera respuestas de diferentes fuentes y las combina en una única respuesta.
Desglose de consultas para una mejor recuperación
Desglose de consultas para una mejor recuperación
Recopilación de respuestas separadas
Recopilación de respuestas separadas
Respuesta final compilada
Respuesta final compilada
Consulta el código aquí.
- Recuperación de pequeño a grande
Esta metodología implica incrustar fragmentos extremadamente pequeños de texto (oraciones que son altamente y probablemente relevantes para la consulta del usuario) en vectores y recuperar la ventana de vectores alrededor de esa oración tanto hacia arriba como hacia abajo.
Visualización de la metodología de recuperación de pequeño a grande
Visualización de la metodología de recuperación de pequeño a grande
Implementación real
Implementación real
Consulta el código aquí.
Preetiquetar documentos con metadatos (p. ej., año, usuario, empresa, palabras clave), como en el ejemplo siguiente, permite un filtrado y una recuperación más precisos, lo que mejora la exactitud de las respuestas del LLM. Esta función puede ayudar con la búsqueda por palabras clave. Piensa en los metadatos como propiedades personalizadas para texto.
Un anuncio de camiseta
Un anuncio de camiseta
Al combinar la búsqueda por palabras clave y la búsqueda vectorial, la búsqueda híbrida ejecuta consultas mediante los métodos especificados. Fusiona los resultados en función de las puntuaciones de confianza, asegurando que se recupere la información más relevante; un ejemplo detallado con código aquí.
- Agentes
Los agentes de LlamaIndex son piezas de software semiautónomas que utilizan diversas herramientas para lograr un objetivo. Pueden combinar múltiples estrategias y herramientas de recuperación para responder consultas complejas de manera efectiva.
Piénsalo de esta manera: una herramienta es una función de usuario predefinida sobre la cual un usuario puede establecer una descripción de lo que hace, y el agente es un ingeniero que trabaja con estas herramientas. Si el usuario le pide directamente a un LLM cuál será el resultado de la multiplicación de dos números enormes, lo más probable es que dé una respuesta cercana a la respuesta real correcta, pero no igual. Pero si le damos una herramienta de multiplicación que pueda invocar según una descripción establecida, logrará constantemente la respuesta correcta sin importar el tamaño de los números.
Flujo de trabajo agéntico simple
Flujo de trabajo agéntico simple
Del mismo modo, un usuario puede crear un flujo de trabajo RAG agéntico dándole al LLM las herramientas y sus descripciones y dejando que decida cuál usar para una consulta RAG específica.
Resumen de RAG avanzado
La presentación de Laurie muestra marcos de aplicación básicos y avanzados para RAG, que podemos crear con líneas mínimas de código usando LlamaIndex. LlamaIndex también nos proporciona LlamaParse, que puede ayudarnos a indexar nuestros datos en nuestras bases de datos vectoriales favoritas como Milvus de forma local o en la nube. En última instancia, depende del usuario elegir lo que mejor se adapte a sus casos de uso. Esta presentación también mostró varias estrategias RAG por las que se puede optar para optimizar la recuperación y la generación.
Citas
Liu, Jerry. “Llamahub.” Llamahub, 2023, https://cloud.llamaindex.ai/parse.
Liu, Jerry. “Tutorial inicial (OpenAI).” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/getting_started/starter_example/.
“Llama Hub.” Llama Hub, 2023, https://llamahub.ai/.
LlamaIndex. “Búsqueda híbrida.” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/examples/vector_stores/MilvusHybridIndexDemo/.
LlamaIndex. “Agentes basados en LLM.” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/use_cases/agents/.
LlamaIndex. “Reemplazo de metadatos + ventana de oración de nodo.” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/examples/node_postprocessor/MetadataReplacementDemo/.
LlamaIndex. “Motor de consulta de subpreguntas.” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/examples/query_engine/sub_question_query_engine/.
Milvus. “Milvus.” Milvus: Base de datos vectorial, 2019, https://milvus.io/.
Milvus. “Bases de datos vectoriales Milvus.” Milvus: Base de datos vectorial, 2023, https://milvus.io/.
Milvus. “Documentación de inicio rápido de Milvus.” Milvus, 5 de mayo de 2024, https://milvus.io/docs/quickstart.md.
Sigue leyendo

Introducing Customer-Managed Encryption Keys (CMEK) on Zilliz Cloud
We're announcing the general availability of Customer-Managed Encryption Keys (CMEK) on Zilliz Cloud.

How to Build an Enterprise-Ready RAG Pipeline on AWS with Bedrock, Zilliz Cloud, and LangChain
Build production-ready enterprise RAG with AWS Bedrock, Nova models, Zilliz Cloud, and LangChain. Complete tutorial with deployable code.

8 Latest RAG Advancements Every Developer Should Know
Explore eight advanced RAG variants that can solve real problems you might be facing: slow retrieval, poor context understanding, multimodal data handling, and resource optimization.


