¿Qué es LlamaIndex?

Vista aérea de una autopista de Los Ángeles

Autores

Vanna Winland

AI Advocate & Technology Writer

Erika Russi

Data Scientist

IBM

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) .

Diseño 3D de pelotas rodando en una pista

Las últimas novedades e insights sobre IA

Descubra insights y noticias de expertos sobre IA, la nube y mucho más en el boletín semanal Think. 

¿Cómo funciona LlamaIndex?

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.

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.

Integración de datos

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

Generación Aumentada de Recuperación (RAG)

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:

  1. Fragmentación: la entrada de secuencia larga se divide en fragmentos.
  2. Incrustación: cada fragmento se codifica en una incrustación que puede ser procesada por el LLM.
  3. Recuperación: los fragmentos incrustados más útiles se recuperan en función de la consulta.

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.

AI Academy

Por qué los modelos fundacionales son un cambio de paradigma para la IA

Conozca una nueva clase de modelos de IA flexibles y reutilizables que pueden desbloquear nuevos ingresos, reducir costos y aumentar la productividad, luego use nuestra guía para investigar a profundidad.

Flujo de trabajo de datos de LlamaIndex

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:

  1. Ingesta de datos (carga)
  2. Indexación y almacenamiento
  3. Realización de consultas

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.

Ingesta de datos (carga)

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.

Indexación y almacenamiento

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.

Índice de almacén de vectores (VectorStoreIndex)

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.

Realización de consultas

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.

Motores de consulta

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.

Agentes de datos

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:

  • Búsqueda y recuperación automatizadas sobre diferentes tipos de datos: no estructurados, semiestructurados y estructurados
  • Llamadas de API a servicios externos que pueden procesarse inmediatamente, indexarse o almacenarse en caché
  • Almacenar el historial de conversaciones
  • Realización de tareas de datos sencillas y complejas

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í.

Bucle de razonamiento

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.

Abstracciones de herramientas de agente

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.

  • FuncionTool: Convierte cualquier función en una herramienta que puede ser utilizada por los agentes.
  • QueryEngineTool: Permite a los agentes emplear la búsqueda y recuperación del motor de consultas.

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):
    “””Load emails from the user’s account”””
    spec_functions = [“load_data”,“create_draft”, “send_email”]
    def load_data(self) -> List[Document]:
...

def create_draft(
    self,
    to: List[str],
    subject: [str],
    message: [str],
) -> str: “Create and insert a draft email”
...

def send_draft(
    self,
    draft_id: str = None
) -> str: “Send a draft email.”
...

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:

  • SQL + especificación de base de datos vectorial
  • Gmail Spec
  • Ollama
  • LangChainLLM

Herramientas de utilidad

LlamaIndex ofrece herramientas de utilidad que pueden aumentar las capacidades de las herramientas existentes, incluyendo:

  • OnDemandLoaderTool: transforma cualquier cargador de datos LlamaIndex existente en una herramienta que puede ser empleada por un agente.
  • LoadAndSearchToolSpec: Acepta herramientas existentes como entrada y produce tanto una herramienta de carga como una herramienta de búsqueda como salidas.

Integración con LLM

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.

Agentes de IA

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.

Casos de uso

LlamaIndex ofrece varios ejemplos de casos de uso en sus documentos con enlaces a tutoriales.13

  • Chatbots: LlamaIndex ofrece una analogía con estado a un motor de consultas llamado motor de chat. Un motor de chat proporciona una interfaz de alto nivel para las conversaciones (interacciones de ida y vuelta en lugar de una sola pregunta y respuesta). Se puede pensar en los motores de chat como una versión más personalizada de una aplicación de ChatGPT. Las implementaciones del motor de chat incluyen un modo que emplea un agente ReAct. LlamaIndex tiene un tutorial sobre cómo crear un chatbot que emplee un agente de datos.
  • Instrucciones: LlamaIndex utiliza la integración de LLM y los flujos de trabajo como abstracciones basadas en eventos para encadenar llamadas de instrucciones. Las instrucciones son fundamentales para cualquier aplicación de LLM.
  • Respuesta a preguntas (RAG): LlamaIndex ofrece la capacidad de realizar RAG sobre documentos no estructurados con consultas en lenguaje natural. LlamaIndex también ofrece una forma de consultar datos estructurados con texto a SQL y texto a Pandas.14
  • Extracción de datos estructurados: Los LLM procesan el lenguaje natural y extraen detalles semánticamente significativos, como nombres, fechas, direcciones y cifras, y los presentan en un formato coherente y estructurado, independientemente de la fuente original. Una vez estructurados, los datos pueden enviar a una base de datos o analizar con herramientas como LlamaParse.
  • Agentes autónomos: los agentes de IA se pueden utilizar para diversas aplicaciones LLM. Por ejemplo, los usuarios pueden crear una aplicación RAG agentiva creando un asistente de investigación aumentado por contexto sobre sus datos que responda preguntas simples junto con tareas de investigación complejas.15
Soluciones relacionadas
Modelos fundacionales

Explore la biblioteca de modelos fundacionales de IBM en la cartera de watsonx para escalar la IA generativa para su negocio con confianza.

Descubra watsonx.ai
Soluciones de inteligencia artificial

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.

Explore las soluciones de IA
Consultoría y servicios de IA

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.

Conozca los servicios de IA
Dé el siguiente paso

Explore la biblioteca de modelos fundacionales de IBM watsonx en la cartera de watsonx para escalar la IA generativa para su negocio con confianza.

Explore watsonx.ai Explore las soluciones de IA
Notas de pie de página

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/.