¿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 un marco de orquestación de datos de código abierto para crear aplicaciones de modelos de lenguaje de gran tamaño (LLM). LlamaIndex está disponible en Python y TypeScript y aprovecha una combinación de herramientas y capacidades que simplifican el proceso de aumento de contexto para casos de uso de IA generativa a través de un pipeline de recuperación aumentada (RAG) .

Diseño 3D de bolas rodando por un circuito

Las últimas noticias + conocimientos de IA 


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

¿Cómo funciona LlamaIndex?

LlamaIndex permite a los usuarios seleccionar y organizar sus datos privados o personalizados mediante la integración de datos y el aumento de contexto.

Aumento de contexto

El aumento de contexto se produce cuando se proporcionan datos a la ventana de contexto de los LLM , esencialmente aumentando los LLM con datos privados o externos.

Los LLM de código abierto más utilizados están preentrenados 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 están actualizados durante el tiempo durante el cual fue entrenado previamente. Dependiendo del modelo, el aumento de contexto es necesario para que los modelos reflejen una conciencia en tiempo real de los acontecimientos actuales.

Los modelos fundacionales están ganando popularidad, ya que son modelos de IA flexibles y reutilizables que pueden aplicarse a casi cualquier dominio o tarea. Los modelos fundacionales similares a los de la serie IBM Granite se entrenan con datos organizados; sin embargo, tanto si el modelo se entrena con un gran conjunto de datos como con un modelo fundacional preentrenado, es probable que deban entrenarse con fuentes externas de datos específicos del dominio. Este proceso se ve facilitado por un marco de sistema 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 los LLM con fuentes de datos personalizadas son los marcos de datos como LlamaIndex.

Integración de datos

Los datos provienen de muchas fuentes en muchos formatos; depende del marco de datos consumir, transformar y organizar los datos para que los utilicen los LLM. Los datos suelen estar aislados y desestructurados. Para obtenerlos y estructurarlos, un marco de datos como LlamaIndex debe hacer pasar los datos por un proceso comúnmente denominado pipeline de ingesta.

Una vez que los datos se consumen y se transforman en un formato que el LLM puede utilizar, el siguiente paso es convertir la información en una estructura de datos para la indexación. El procedimiento común es convertir datos no estructurados en incrustaciones vectoriales. Este proceso se denomina "creación de una incrustación" en el procesamiento del lenguaje natural (PLN), pero se conoce como "indexación" en la terminología de datos1. La indexación es necesaria porque permite que el LLM consulte y recupere los datos consumidos por el índice vectorial. Los datos pueden indexarse de acuerdo con la estrategia de consulta elegida.

La integración de datos facilita el aumento de contexto mediante la integración de 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 ha ampliado recientemente a 128 000 tokens2. Una ventana de contexto más grande permite al modelo conservar más texto en su memoria de trabajo, lo que mejora su capacidad para rastrear detalles clave durante conversaciones prolongadas, 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 ampliada, un modelo afinado podría incurrir en costes considerables tanto en el entrenamiento como en la inferencia. La afinació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 el prompting del LLM. La metodología RAG se considera una opción prometedora para facilitar el modelado lingüístico de contexto largo3.

Generación aumentada por recuperación (RAG)

La RAG es uno de los métodos más conocidos y utilizados para el aumento de contexto. Permite a los LLM aprovechar una base de conocimientos especializada, lo que mejora la capacidad de los mismos para proporcionar respuestas más precisas a las preguntas4. El proceso típico de aumento por recuperación se realiza en tres pasos:

  1. Chunking: la entrada de secuencias largas se particiona en trozos.
  2. Incrustación: cada trozo se codifica en una incrustación que puede ser procesada por el LLM.
  3. Recuperación: se recuperan los trozos incrustados más útiles en función de la consulta.

Los marcos de datos como LlamaIndex agilizan el proceso de ingesta y recuperación de datos al proporcionar llamadas API integrales para cada paso del patrón RAG. Este proceso se basa en el concepto de un motor de consulta que permite a los usuarios hacer preguntas sobre sus datos. Consultar datos externos y solicitar a los LLM conocimientos contextuales permite crear aplicaciones de LLM específicas del 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 capaces de desbloquear nuevos ingresos, reducir costes y aumentar la productividad, y utilice nuestra guía para profundizar más en el tema.

Flujo de trabajo de datos de LlamaIndex

LlamaIndex utiliza la RAG para añadir y conectar datos externos al conjunto de datos al que los LLM ya tienen acceso. Las aplicaciones, incluidos los motores de consulta, los chatbots y los agentes, utilizan técnicas de RAG para completar tareas5.

El flujo de trabajo de Llamaindex puede dividirse en unos pocos pasos:

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

El objetivo de este flujo de trabajo es ayudar a consumir, estructurar y permitir que los LLM accedan 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 sean para crear chatbots o motores de consultas.

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 ingesta de datos como la carga de los datos para que los utilice la aplicación. La mayoría de los datos privados o personalizados pueden aislarse 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 y consumen datos de su fuente nativa. Los datos recopilados 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, consumen y cargan 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 vídeos6. Para tener en cuenta otros formatos de datos no incluidos en la funcionalidad integrada, 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 utilizarlos.

Indexación y almacenamiento

Una vez consumidos los datos, el marco de datos debe transformarlos y organizarlos en una estructura que pueda recuperar el LLM. Los índices de datos estructuran los datos en representaciones que los LLM pueden utilizar. 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 cargados e indexados los datos, estos pueden almacenarse. LlamaIndex es compatible con muchos almacenes de vectores que varían en arquitectura, complejidad y coste. Por defecto, LlamaIndex almacena todos los datos indexados solo en la memoria.

Índice de almacenes de vectores

El índice de almacenes de vectores se utiliza habitualmente en las aplicaciones de LLM que siguen el patrón de RAG porque destaca en el manejo de consultas en lenguaje natural. La precisión de la recuperación a partir de consultas en lenguaje natural depende de la búsqueda semántica o búsqueda basada en el significado más que en la coincidencia de palabras clave7. 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 la consulta para obtener respuestas más ricas en contexto.

El "VectorStoreIndex" toma las colecciones de datos u objetos "documento" y los divide en "nodos", que son unidades atómicas de datos que representan un "trozo" de los datos de origen ("documento"). Una vez que la recopilación de datos se divide en trozos, se crean incrustaciones vectoriales de cada fragmento de datos. Los datos integrados están ahora en un formato sobre el que el LLM puede ejecutar consultas. Estos índices vectoriales pueden almacenarse 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ón8.

Para buscar incrustaciones, la consulta del usuario se convierte primero en una incrustación vectorial. A continuación, se utiliza un proceso matemático para clasificar todas las incrustaciones en función de su similitud semántica con la consulta.

El índice de almacenes de vectores utiliza la recuperación semántica top-k para devolver las incrustaciones más similares como sus correspondientes trozos 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.

Consulta

El paso final en el flujo de trabajo es la implementación de motores de consulta para gestionar las llamadas de instrucción a los LLM. La consulta consta de tres etapas distintas: recuperación, posprocesamiento y síntesis de respuesta. La recuperación consiste en obtener los documentos más relevantes y devolverlos desde el índice vectorial. El posprocesamiento tiene lugar cuando los trozos incrustados o "nodos" recuperados se reajustan opcionalmente mediante reordenación, transformación o filtrado. La síntesis de respuesta es cuando los datos y la instrucción más relevantes se combinan y se envían al LLM para que devuelva una respuesta.

Motores de consulta

Los motores de consulta permiten a los usuarios hacer preguntas sobre sus datos, tomando 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 colecciones 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 impulsados por LLM capaces de realizar una serie de tareas a partir de los datos, incluidas funciones de lectura y escritura10Los agentes de datos de LlamaIndex son trabajos de conocimiento impulsados por LLM que pueden realizar lo siguiente:

  • Búsqueda y recuperación automatizadas en diferentes tipos de datos (no estructurados, semiestructurados y estructurados)
  • Llamadas API a servicios externos que pueden procesarse inmediatamente, indexarse o almacenarse en caché
  • Almacenamiento del historial de conversaciones
  • Realización de tareas de datos simples y complejas

Los agentes de IA pueden interactuar con su entorno externo a través de un conjunto de API y herramientas. LlamaIndex es compatible con el agente OpenAI Function (creado en base a la API OpenAI Function) y un agente ReAct. Los componentes básicos de los agentes de datos son "un bucle de razonamiento" o el paradigma de razonamiento del agente y "abstracciones de herramientas" que son las herramientas en sí.

Bucle de razonamiento

Los agentes utilizan un bucle de razonamiento, o paradigma, para resolver problemas de varios pasos. En LlamaIndex, tanto OpenAI Function como los agentes ReAct siguen un patrón similar para decidir qué herramientas utilizar, así como la secuencia y los parámetros para llamar a cada herramienta. El patrón de razonamiento se denomina ReAct o razonamiento y acción. Este proceso puede ser un simple proceso de selección de herramientas en un solo paso o un proceso más complejo en el que se eligen varias herramientas en cada paso.

Abstracciones de herramientas de agente

Las abstracciones de las herramientas describen cómo el agente accede a ellas y las utiliza. 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 herramienta base define una interfaz genérica que puede recibir una serie de argumentos y devolver un contenedor de salida de herramientas genérico que puede capturar cualquier respuesta. LlamaIndex proporciona abstracciones de herramientas que envuelven los motores de consulta de datos existentes y abstracciones para funciones que pueden ser utilizadas por la clase de especificación de herramientas.

  • FunctionTool: convierte cualquier función en una herramienta que pueden utilizar los agentes.
  • QueryEngineTool: permite a los agentes utilizar el motor de búsqueda y recuperación de consultas.

Una especificación de herramientas permite a los usuarios definir servicios completos en lugar de herramientas individuales que se encargan de tareas específicas. Por ejemplo, la especificación de la herramienta de Gmail permite al agente leer y redactar correos electrónicos11. He aquí un ejemplo de cómo se definiría a grandes rasgos:

class GmailToolSpec(BaseToolSpec):
    “””Cargar correos electrónicos de la cuenta del usuario”””
    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: “Crear e insertar un borrador de correo electrónico”
...

def send_draft(
    self,
    draft_id: str = None
) -> str: “Enviar un borrador de correo electrónico.”
...

Cada función se convierte en una herramienta, mediante la abstracción "FunctionTool".

LlamaIndex utiliza el repositorio de herramientas de LlamaHub, que consta de más de 15 especificaciones de herramientas con las que los agentes pueden interactuar. Esta lista consta de servicios destinados a mejorar y enriquecer la capacidad de los agentes para realizar diferentes acciones. A continuación se muestran algunas de las diversas especificaciones incluidas en el repositorio:

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

Herramientas utilitarias

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

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

Integración con LLM

LlamaIndex trabaja con modelos fundacionales de código abierto como la serie IBM Granite, Llama2 y OpenAI y otros marcos LLM, incluidos LangChain y Ollama. Los LLM pueden utilizarse de innumerables maneras como módulos independientes o conectados a otros módulos principales de LlamaIndex12. Los LLM también pueden utilizarse para impulsar a los agentes de IA a actuar como trabajadores del conocimiento que siguen flujos de trabajo autónomos.

Agentes de IA

LlamaIndex ha ampliado su funcionalidad para incluir el uso de agentes de IA impulsados por LLM 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 ReAct siguen un paradigma de razonamiento que instruye al agente para que planifique y razone mientras mejora iterativamente las respuestas. Este tipo de agente de IA puede interpretarse como una forma de incitación a la cadena de pensamiento. Los agentes pueden utilizar herramientas para integrarse con otros LLM. Por ejemplo, la colección LlamaHub de conectores de datos y herramientas de agentes.

Casos de uso

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

  • Chatbots: LlamaIndex ofrece una analogía con estado a un motor de consulta 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 única pregunta y respuesta). Se puede pensar en los motores de chat como una versión más personalizada de una aplicación ChatGPT. Las implementaciones de motores de chat incluyen un modo que utiliza un agente ReAct. LlamaIndex tiene un tutorial sobre cómo crear un chatbot que utilice un agente de datos.
  • Prompting: LlamaIndex utiliza la integración de LLM y los flujos de trabajo como abstracciones basadas en eventos para encadenar las llamadas de las instrucciones. El prompting es fundamental para cualquier aplicación de LLM.
  • Búsqueda de respuestas (RAG): LlamaIndex ofrece la posibilidad de realizar RAG sobre documentos no estructurados con consultas en lenguaje natural. LlamaIndex también ofrece la posibilidad de realizar consultas sobre datos estructurados con text-to-SQL y text-to-Pandas14.
  • Extracción de datos estructurados: los LLM procesan el lenguaje natural y extraen detalles significativos desde el punto de vista semántico, 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, se pueden enviar a una base de datos o analizarlos más a fondo con herramientas como LlamaParse.
  • Agentes autónomos: los agentes de IA se pueden utilizar para varias aplicaciones de LLM. Por ejemplo, los usuarios pueden crear una aplicación RAG agentiva mediante la creación de un asistente de investigación con contexto aumentado sobre sus datos que responda a preguntas sencillas junto con tareas de investigación complejas15.
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 líder en IA del sector de IBM y junto a su cartera de soluciones.

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

Reinvente las operaciones y flujos de trabajo críticos añadiendo IA para maximizar las experiencias, la toma de decisiones en tiempo real y el valor empresarial.

Explore los servicios de IA
Dé el siguiente paso

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

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

1 Elena Lowery. “Use Watsonx.Ai with LlamaIndex to Build Rag Applications” [Utilice Watsonx.ai con LlamaIndex para crear aplicaciones de RAG]. 28 de mayo de 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” [Escalado de los modelos de código Granite al contexto 128K]. 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” [Escalado de los modelos de código Granite al contexto 128K].

4 Kim Martineau. “What Is Retrieval-Augmented Generation (Rag)?” [¿Qué es la generación aumentada por recuperación (RAG)?]. IBM Research. 1 de mayo de 2024. https://research.ibm.com/blog/retrieval-augmented-generation-RAG.

5 “High-Level Concepts” [Conceptos de alto nivel]. LlamaIndex. https://docs.llamaindex.ai/en/stable/getting_started/concepts/.

6 “Loading Data (Ingestion)” [Carga de datos (ingesta)]. LlamaIndex. https://docs.llamaindex.ai/en/stable/understanding/loading/loading/.

7 Elena Lowery. “Use Watsonx.Ai with LlamaIndex to Build Rag Applications” [Utilice Watsonx.ai con LlamaIndex para crear aplicaciones de RAG].

8 Elena Lowery, “Use Watsonx.Ai with LlamaIndex to Build Rag Applications” [Utilice Watsonx.ai con LlamaIndex para crear aplicaciones de RAG].

9 “Query Engine” [Motor de consulta]. LlamaIndex. https://docs.llamaindex.ai/en/latest/module_guides/deploying/query_engine/.

10 Jerry Liu. “Data Agents” [Agentes de datos]. Medium. 13 de julio de 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” [Uso de los LLM]. LlamaIndex. https://docs.llamaindex.ai/en/latest/module_guides/models/llms/.

13 “Use Cases” [Casos de uso]. LlamaIndex. https://docs.llamaindex.ai/en/latest/use_cases/.

14 “Question-Answering (RAG)” [Búsqueda de respuestas (RAG)]. LlamaIndex. https://docs.llamaindex.ai/en/stable/use_cases/q_and_a/.

15 “Agents” [Agentes]. LlamaIndex. https://docs.llamaindex.ai/en/stable/use_cases/agents/.