LlamaIndex es una infraestructura de orquestación de datos de código abierto para crear aplicaciones de modelos de lenguaje grandes. LlamaIndex está disponible en Python y TypeScript y aprovecha una combinación de herramientas y capacidades que simplifican el proceso de ampliación del contexto para casos de uso de IA generativa a través de un pipeline de generación aumentada de recuperación (RAG) .
LlamaIndex permite a los usuarios curar y organizar sus datos privados o personalizados a través de la integración de datos y la ampliación del contexto.
La ampliación del contexto es cuando se proporcionan datos a la ventana de contexto de LLM, esencialmente aumentando los LLM con datos privados o externos.
Los LLM de código abierto ampliamente utilizados se entrenan previamente con grandes cantidades de datos públicos. Estos LLM a gran escala ayudan a resolver muchos problemas del mundo real. Sin embargo, se necesita una cantidad considerable de tiempo y recursos para entrenarlos para un caso de uso específico. Además, los datos internos de un modelo solo se mantienen actualizados durante el tiempo durante el cual fue entrenado previamente. Dependiendo del modelo, la ampliación de contexto es necesaria para que los modelos reflejen la concientización en tiempo real de los eventos actuales.
Los modelos fundacionales están ganando popularidad, ya que son modelos de IA flexibles y reutilizables que se pueden aplicar a casi cualquier dominio o tarea. Los modelos fundacionales similares a la serie IBM Granite se entrenan con datos curados; sin embargo, ya sea que el modelo se entrene con un gran conjunto de datos o con un modelo fundacional previamente entrenado, es probable que deban entrenarse con fuentes externas de datos específicos del dominio. Este proceso se ve facilitado por una infraestructura que conecta el LLM con datos privados para adaptarlo al caso de uso o al objetivo general de la aplicación. La parte de la pila de aplicaciones que facilita la conexión de LLM a fuentes de datos personalizadas son las infraestructuras como LlamaIndex.
Los datos provienen de muchas fuentes en muchos formatos; depende de la infraestructura ingerir, transformar y organizar los datos para que los utilicen los LLM. Los datos a menudo están aislados y no estructurados. Para obtenerlos y estructurarlos, un infraestructura como LlamaIndex debe ejecutar los datos a través de un proceso comúnmente llamado pipeline de ingesta.
Una vez que los datos se ingieren y se transforman en un formato que puede usar el LLM, el siguiente paso es convertir la información en una estructura de datos para indexar. El procedimiento común es convertir datos no estructurados en incrustaciones vectoriales. Este proceso se denomina “creación de una incrustación” en procesamiento de lenguaje natural (PLN), pero en la terminología de datos se lo denomina “indexación”.1 La indexación es necesaria porque permite que el LLM consulte y recupere los datos ingeridos por el índice vectorial. Los datos se pueden indexar de acuerdo con la estrategia de consulta elegida.
La integración de datos facilita la ampliación del contexto al integrar datos privados en la ventana de contexto o "base de conocimientos" del LLM. La longitud de la ventana de contexto de los modelos Granite 3B y 8B de IBM se amplió recientemente a 128 000 tokens.2 Una ventana de contexto más grande permite que el modelo retenga más texto en su memoria de trabajo, lo que mejora su capacidad para rastrear detalles clave a lo largo de conversaciones extendidas, largas y bases de código. Esta capacidad permite a los chatbots de LLM producir respuestas coherentes tanto a corto plazo como en un contexto más amplio.
Sin embargo, incluso con una ventana de contexto extendida, un modelo ajustado podría incurrir en costos considerables tanto en entrenamiento como en inferencia. Los ajustes de precisión de los modelos con datos específicos o privados requiere transformaciones de datos y sistemas que promuevan métodos eficientes de recuperación de datos para las instrucciones de LLM. La metodología RAG se considera una opción prometedora para facilitar el modelado de lenguaje de contexto largo.3
RAG es uno de los métodos más conocidos y empleados para la ampliación de contexto. RAG permite a los LLM aprovechar una base de conocimientos especializada, lo que mejora la capacidad de los LLM para proporcionar respuestas más precisas a las preguntas.4 El proceso típico de aumento de recuperación se realiza con tres pasos:
Las infraestructuras de datos como LlamaIndex agilizan el proceso de ingesta y recuperación de datos al proporcionar llamadas API completas para cada paso del patrón de RAG. Este proceso se alimenta del concepto de motor de consulta que permite a los usuarios formular preguntas sobre sus datos. La consulta de datos externos y la introducción de conocimientos contextuales en los LLM permiten crear aplicaciones de LLM específicas para cada dominio.
LlamaIndex utiliza RAG para agregar y conectar datos externos al conjunto de datos al que los LLM ya tienen acceso. Las aplicaciones, incluyendo los motores de consultas, los chatbots y los agentes, aplican técnicas de RAG para completar las tareas.5
El flujo de trabajo de LlamaIndex se puede dividir en unos cuantos pasos:
El objetivo de este flujo de trabajo es ayudar a ingerir, estructurar y permitir a los LLM acceder a datos privados o específicos de un dominio. Tener acceso a datos más relevantes permite a los LLM responder con mayor precisión a las instrucciones, ya sea para crear chatbots o motores de consulta.
La ingesta o "carga" de datos es el primer paso para conectar fuentes de datos externas a un LLM. LlamaIndex se refiere a la ingestión de datos como la carga de los datos para que la aplicación los emplee. La mayoría de los datos privados o personalizados se pueden siloar en formatos como interfaces de programación de aplicaciones (API), PDF, imágenes, bases de datos de lenguaje de consulta estructurado (SQL) y muchos más. LlamaIndex puede cargar más de 160 formatos de datos diferentes, incluidos conjuntos de datos estructurados, semiestructurados y no estructurados.
Los conectores de datos, también conocidos como “cargadores” de datos, obtienen e ingieren datos de su fuente nativa. Los datos obtenidos se transforman en una colección de datos y metadatos. Estas colecciones se denominan “Documentos” en LlamaIndex. Los conectores de datos, o “lectores” en LlamaIndex, ingieren y carga varios formatos de datos. LlamaIndex cuenta con un lector integrado que convierte todos los archivos de cada directorio en documentos, incluidos Markdown, PDF, documentos de Word, presentaciones de PowerPoint, imágenes, archivos de audio y videos.6 Para tener en cuenta otros formatos de datos no incluidos en la funcionalidad incorporada, los conectores de datos están disponibles a través de LlamaHub, un registro de cargadores de datos de código abierto. Este paso del flujo de trabajo crea una base de conocimientos para formar índices sobre los datos para que los LLM puedan consultarlos y usarlos.
Una vez ingeridos los datos, la infraestructura de datos debe transformarlos y organizarlos en una estructura que pueda recuperar el LLM. Los índices de datos estructuran los datos en representaciones que pueden usar los LLM. LlamaIndex ofrece varios tipos de índices diferentes que son complementarios a la estrategia de consulta de la aplicación, que incluyen: un índice de almacén de vectores, un índice de resumen y un índice de gráfico de conocimiento.
Una vez que los datos se han cargado e indexado, se pueden almacenar. LlamaIndex admite muchas almacenes de vectores que varían en arquitectura, complejidad y costo. De forma predeterminada, LlamaIndex almacena todos los datos indexados solo en la memoria.
El índice de almacén de vectores se emplea habitualmente en aplicaciones de LLM que siguen el patrón RAG porque destaca en el manejo de consultas en lenguaje natural. La precisión de la recuperación de consultas en lenguaje natural depende de la búsqueda semántica, o búsqueda basada en el significado en lugar de la coincidencia de palabras clave.7 La búsqueda semántica se habilita convirtiendo los datos de entrada en incrustaciones vectoriales. Una incrustación vectorial es una representación numérica de la semántica de los datos que el LLM puede procesar. La relación matemática entre las incrustaciones vectoriales permite a los LLM recuperar datos en función del significado de los términos de consulta para obtener respuestas más ricas en contexto.
El `VectorStoreIndex` toma las colecciones de datos u objetos "Documento" y los divide en `Nodo`s, que son unidades atómicas de datos que representan un “fragmento” de los datos de origen (`Documento`). Una vez que la recopilación de datos se divide en fragmentos, se crean incrustaciones vectoriales de cada fragmento de datos. Los datos integrados ahora están en un formato en el que el LLM puede ejecutar consultas. Estos índices vectoriales se pueden almacenar para evitar la reindexación. La forma más sencilla de almacenar datos es conservarlos en el disco, pero LlamaIndex se integra con múltiples bases de datos vectoriales y modelos de incrustación.8
Para buscar incrustaciones, la consulta del usuario se convierte primero en una incrustación vectorial. A continuación, se usa un proceso matemático para clasificar todas las incrustaciones en función de su similitud semántica con la consulta.
El índice de almacén de vectores utiliza la recuperación semántica top-k para devolver las incrustaciones más similares como sus correspondientes fragmentos de texto. LlamaIndex está diseñado para facilitar la creación y gestión de índices a gran escala para una recuperación eficiente de la información.
El paso final en el flujo de trabajo es la implementación de motores de consulta para manejar las llamadas de instrucciones a los LLM. La consulta consta de tres etapas distintas, recuperación, posprocesamiento y síntesis de respuesta. La recuperación es cuando los documentos más relevantes se obtienen y devuelven del índice vectorial. El posprocesamiento es cuando los fragmentos de incrustación o `Nodos`recuperados se reajustan opcionalmente mediante reclasificación, transformación o filtrado. La síntesis de respuestas es cuando los datos y la instrucción más relevantes se combinan y se envían al LLM para devolver una respuesta.
Los motores de consulta permiten a los usuarios hacer preguntas sobre sus datos, asimilando una consulta en lenguaje natural y devolviendo una respuesta rica en contexto.9 Los motores de consulta se componen de uno o varios índices y recuperadores. Se pueden utilizar muchos motores de consulta al mismo tiempo para recopilaciones de datos con varios tipos de índices. LlamaIndex ofrece varios motores de consulta diferentes para datos estructurados y semiestructurados, por ejemplo, un motor de consulta JSON para consultar documentos JSON.
Los agentes de datos son agentes de IA basados en LLM capaces de realizar un serie de tareas sobre los datos, incluidas funciones de lectura y escritura.10 Los agentes de datos LlamaIndex son obras de conocimiento potenciadas por LLM que pueden realizar lo siguiente:
Los agentes de IA pueden interactuar con su entorno externo a través de un conjunto de API y herramientas. LlamaIndex tiene soporte para el agente de función OpenAI (construido sobre la API de función OpenAI) y un agente ReAct. Los componentes centrales de los agentes de datos son "un bucle de razonamiento" o el paradigma de razonamiento del agente y las "abstracciones de herramientas" que son las herramientas en sí.
Los agentes emplean un bucle de razonamiento, oparadigma, para resolver problemas de varios pasos. En LlamaIndex, tanto los agentes de OpenAI Function como los de ReAct Siga un patrón similar para decidir qué herramientas usar, así como la secuencia y los parámetros para llamar a cada herramienta. El patrón de razonamiento se llama ReAct o razonamiento y acción. Este proceso puede ser un simple proceso de selección de herramientas de un solo paso o un proceso más complejo donde se seleccionan varias herramientas en cada paso.
Las abstracciones de herramientas describen cómo el agente accede a las herramientas y cómo las emplea. LlamaIndex ofrece herramientas y ToolSpecs, una clase de Python que representa una especificación de API completa con la que un agente puede interactuar. La abstracción de la herramienta base define una interfaz genérica que puede tomar una serie de argumentos y devolver un contenedor de salida de herramienta genérico que puede capturar cualquier respuesta. LlamaIndex proporciona abstracciones de herramientas que se ajustan a los motores de consulta de datos existentes y abstracciones para funciones que puede usar la clase de especificación de herramienta.
Una especificación de herramienta permite a los usuarios definir servicios completos en lugar de herramientas individuales que manejan tareas específicas. Por ejemplo, la especificación de la herramienta Gmail permite al agente leer y redactar correos electrónicos.11 Aquí hay un ejemplo de cómo se definiría aproximadamente:
class GmailToolSpec(BaseToolSpec):Cada función se convierte en una herramienta, utilizando la abstracción `FunctionTool`.
LlamaIndex utiliza el repositorio de herramientas de LlamaHub, que consta de más de 15 especificaciones de herramientas para que los agentes interactúen. Esta lista consta de servicios destinados a mejorar y enriquecer la capacidad de los agentes para realizar diferentes acciones. Estas son algunas de las especificaciones incluidas en el repositorio:
LlamaIndex ofrece herramientas de utilidad que pueden aumentar las capacidades de las herramientas existentes, incluyendo:
LlamaIndex trabaja con modelos básicos de código abierto como la serie IBM Granite, Llama2 y OpenAI y otras infraestructuras de LLM, incluidos LangChain y Ollama. Los LLM se pueden utilizar de muchas maneras como módulos independientes o se pueden conectar a otros módulos principales de LlamaIndex.12También se pueden usar LLM para impulsar a los agentes de IA a actuar como trabajadores del conocimiento que siguen flujos de trabajo autónomos.
LlamaIndex amplió su funcionalidad para incluir el uso de agentes de IA para actuar como trabajadores del conocimiento. Agentes de IA de LlamaIndex que siguen un patrón de comportamiento ReAct (razonamiento y acción). Los agentes de ReAct siguen un paradigma de razonamiento que les indica que planeen y razonen mientras mejoran iterativamente las respuestas. Este tipo de agente de IA puede interpretarse como una forma de estimulación en cadena de pensamientos. Los agentes pueden emplear herramientas para integrar con otros LLM. Por ejemplo, la colección de herramientas de agente y conector de datos LlamaHub.
LlamaIndex ofrece varios ejemplos de casos de uso en sus documentos con enlaces a tutoriales.13
Explore la biblioteca de modelos fundacionales de IBM en la cartera de watsonx para escalar la IA generativa para su negocio con confianza.
Ponga la IA a trabajar en su negocio con la experiencia en IA líder en la industria y la cartera de soluciones de IBM a su lado.
Reinvente los flujos de trabajo y las operaciones críticas mediante la incorporación de IA para maximizar las experiencias, la toma de decisiones en tiempo real y el valor empresarial.
1 Elena Lowery, “Use Watsonx.Ai with LlamaIndex to Build Rag Applications,” Use Watsonx.ai with LlamaIndex to build RAG applications, May 28, 2024, https://community.ibm.com/community/user/watsonx/blogs/elena-lowery/2024/05/28/use-watsonxai-with-llamaindex-to-build-rag-applica.
2 Matt Stallone et al., “Scaling Granite Code Models to 128K Context,” arXiv.org, 18 de julio de 2024, https://arxiv.org/abs/2407.13739.
3 Matt Stallone et al., “Scaling Granite Code Models to 128K Context.”
4 Kim Martineau, “What Is Retrieval-Augmented Generation (Rag)?,” IBM Research, May 1, 2024, https://research.ibm.com/blog/retrieval-augmented-generation-RAG.
5 “High-Level Concepts,” LlamaIndex, https://docs.llamaindex.ai/en/stable/getting_started/concepts/.
6 “Loading Data (Ingestion),” LlamaIndex, https://docs.llamaindex.ai/en/stable/understanding/loading/loading/.
7 Elena Lowery, “Use Watsonx.Ai with LlamaIndex to Build Rag Applications.”
8 Elena Lowery, “Use Watsonx.Ai with LlamaIndex to Build Rag Applications.”
9 “Query Engine,” LlamaIndex, https://docs.llamaindex.ai/en/latest/module_guides/deploying/query_engine/.
10 Jerry Liu, “Data Agents,” Medium, July 13, 2023, https://medium.com/llamaindex-blog/data-agents-eed797d7972f.
11 “Google,” LlamaIndex, https://docs.llamaindex.ai/en/stable/api_reference/tools/google/.
12 “Using LLMs,” LlamaIndex, https://docs.llamaindex.ai/en/latest/module_guides/models/llms/.
13 “Use Cases,” LlamaIndex, https://docs.llamaindex.ai/en/latest/use_cases/.
14 “Question-Answering (RAG),” LlamaIndex, https://docs.llamaindex.ai/en/stable/use_cases/q_and_a/.
15 “Agents,” LlamaIndex, https://docs.llamaindex.ai/en/stable/use_cases/agents/.