Inteligencia artificial
LlamaIndex: Augmenta tus aplicaciones de LLM con datos personalizados de manera fácil

Los grandes modelos de lenguaje (LLM) como la serie GPT de OpenAI han sido entrenados en una amplia variedad de datos accesibles públicamente, demostrando capacidades notables en la generación de texto, resumen, respuesta a preguntas y planificación. A pesar de su versatilidad, una pregunta frecuente gira en torno a la integración sin problemas de estos modelos con datos personalizados, privados o propiedad de una empresa.
Las empresas y los individuos están inundados de datos únicos y personalizados, a menudo alojados en diversas aplicaciones como Notion, Slack y Salesforce, o almacenados en archivos personales. Para aprovechar los LLM para estos datos específicos, se han propuesto y experimentado varias metodologías.
El ajuste fino representa uno de estos enfoques, que consiste en ajustar los pesos del modelo para incorporar conocimientos de conjuntos de datos específicos. Sin embargo, este proceso no está exento de desafíos. Requiere un esfuerzo sustancial en la preparación de los datos, combinado con un procedimiento de optimización difícil, que requiere un cierto nivel de experiencia en aprendizaje automático. Además, las implicaciones financieras pueden ser significativas, especialmente al tratar con grandes conjuntos de datos.
El aprendizaje en contexto ha surgido como una alternativa, priorizando la elaboración de entradas y prompts para proporcionar al LLM el contexto necesario para generar salidas precisas. Este enfoque mitiga la necesidad de un retrabajo extensivo del modelo, ofreciendo un medio más eficiente y accesible para integrar datos privados.
Pero la desventaja de esto es su dependencia de la habilidad y la experiencia del usuario en ingeniería de prompts. Además, el aprendizaje en contexto puede no ser siempre tan preciso o confiable como el ajuste fino, especialmente al tratar con datos altamente especializados o técnicos. El entrenamiento previo del modelo en una amplia gama de textos de Internet no garantiza una comprensión de jerga específica o contexto, lo que puede llevar a salidas inexactas o irrelevantes. Esto es particularmente problemático cuando los datos privados son de un dominio de nicho o industria.
Además, la cantidad de contexto que se puede proporcionar en un solo prompt es limitada, y el rendimiento del LLM puede degradarse a medida que aumenta la complejidad de la tarea. También hay el desafío de la privacidad y la seguridad de los datos, ya que la información proporcionada en el prompt podría ser potencialmente sensible o confidencial.
Mientras la comunidad explora estas técnicas, herramientas como LlamaIndex están ganando atención.
Fue iniciado por Jerry Liu, un ex científico de investigación de Uber. Mientras experimentaba con GPT-3 el otoño pasado, Liu notó las limitaciones del modelo en cuanto a la gestión de datos privados, como archivos personales. Esta observación llevó al inicio del proyecto de código abierto LlamaIndex.
La iniciativa ha atraído a inversores, asegurando $8.5 millones en una ronda reciente de financiación de semilla.
LlamaIndex facilita la ampliación de los LLM con datos personalizados, cerrando la brecha entre los modelos preentrenados y los casos de uso de datos personalizados. A través de LlamaIndex, los usuarios pueden aprovechar sus propios datos con los LLM, desbloqueando la generación de conocimiento y el razonamiento con perspectivas personalizadas.
Los usuarios pueden proporcionar a los LLM sus propios datos de manera fluida, fomentando un entorno donde la generación de conocimiento y el razonamiento son profundamente personalizados e informativos. LlamaIndex aborda las limitaciones del aprendizaje en contexto al proporcionar una plataforma más amigable y segura para la interacción con los datos, asegurando que incluso aquellos con experiencia limitada en aprendizaje automático puedan aprovechar al máximo el potencial de los LLM con sus datos privados.
Conceptos de alto nivel y algunas perspectivas
1. Generación aumentada de recuperación (RAG):
RAG es un proceso de dos partes diseñado para combinar los LLM con datos personalizados, mejorando así la capacidad del modelo para entregar respuestas más precisas e informadas. El proceso consiste en:
- Fase de indexación: Esta es la fase preparatoria donde se establecen las bases para la creación de una base de conocimiento.
- Fase de consulta: Aquí, la base de conocimiento se busca para encontrar contexto relevante que ayude a los LLM a responder a las consultas.
Recorrido de indexación con LlamaIndex:
- Conectores de datos: Piense en los conectores de datos como el pasaporte de sus datos a LlamaIndex. Ayudan a importar datos de diversas fuentes y formatos, encapsulándolos en una representación simplificada de ‘Documento’. Los conectores de datos se pueden encontrar en LlamaHub, un repositorio de código abierto lleno de cargadores de datos. Estos cargadores están diseñados para una integración fácil y ofrecen una experiencia de ‘conectar y jugar’ con cualquier aplicación de LlamaIndex.
- Documentos / Nodos: Un Documento es como una maleta genérica que puede contener diversos tipos de datos—ya sea un PDF, una salida de API o entradas de base de datos. Por otro lado, un Nodo es un fragmento o ‘trozo’ de un Documento, enriquecido con metadatos y relaciones con otros nodos, asegurando una base sólida para la recuperación de datos precisa más adelante.
- Índices de datos: Después de la ingesta de datos, LlamaIndex ayuda a indexar estos datos en un formato recuperable. Detrás de escena, descompone documentos raw en representaciones intermedias, calcula incrustaciones de vectores y deduce metadatos. Entre los índices, ‘VectorStoreIndex’ es a menudo la elección más popular.
Tipo de índices en LlamaIndex: clave para datos organizados
LlamaIndex ofrece diferentes tipos de índices, cada uno para diferentes necesidades y casos de uso. En el núcleo de estos índices se encuentran los “nodos” mencionados anteriormente. Intentemos entender los índices de LlamaIndex con su mecánica y aplicaciones.
1. Índice de lista:
- Mecanismo: Un Índice de lista alinea los nodos secuencialmente como una lista. Después de dividir los datos de entrada en nodos, se organizan en una forma lineal, listos para ser consultados secuencialmente o a través de palabras clave o incrustaciones.
- Ventaja: Este tipo de índice brilla cuando se necesita una consulta secuencial. LlamaIndex asegura la utilización de todos los datos de entrada, incluso si superan el límite de tokens del LLM, consultando inteligentemente el texto de cada nodo y refinando las respuestas a medida que avanza por la lista.
2. Índice de almacenamiento de vectores:
- Mecanismo: Aquí, los nodos se transforman en incrustaciones de vectores, almacenados localmente o en una base de datos de vectores especializada como Milvus. Cuando se consulta, recupera los nodos más similares (top_k) y los canaliza hacia el sintetizador de respuestas.
- Ventaja: Si su flujo de trabajo depende de la comparación de texto para similitud semántica a través de la búsqueda de vectores, este índice puede ser utilizado.
3. Índice de árbol:
- Mecanismo: En un Índice de árbol, los datos de entrada evolucionan hacia una estructura de árbol, construida desde abajo con nodos hoja (los fragmentos de datos originales). Los nodos padre emergen como resúmenes de los nodos hoja, creados usando GPT. Durante una consulta, el índice de árbol puede recorrer desde el nodo raíz hasta los nodos hoja o construir respuestas directamente a partir de los nodos hoja seleccionados.
- Ventaja: Con un Índice de árbol, la consulta de fragmentos de texto largos se vuelve más eficiente, y la extracción de información de varios segmentos de texto se simplifica.
4. Índice de palabras clave:
- Mecanismo: Un mapa de palabras clave a nodos forma el núcleo de un Índice de palabras clave. Cuando se consulta, las palabras clave se extraen de la consulta, y solo los nodos asignados se destacan.
- Ventaja: Cuando se tienen consultas de usuario claras, un Índice de palabras clave puede ser utilizado. Por ejemplo, buscar en documentos de salud se vuelve más eficiente cuando se centra solo en documentos pertinentes a COVID-19.
Instalación de LlamaIndex
La instalación de LlamaIndex es un proceso sencillo. Puede elegir instalarlo directamente desde Pip o desde el código fuente. (Asegúrese de tener Python instalado en su sistema o puede usar Google Colab)
1. Instalación desde Pip:
- Ejecute el siguiente comando:
pip install llama-index
- Nota: Durante la instalación, LlamaIndex puede descargar y almacenar archivos locales para ciertos paquetes como NLTK y HuggingFace. Para especificar un directorio para estos archivos, use la variable de entorno “LLAMA_INDEX_CACHE_DIR”.
2. Instalación desde el código fuente:
- Primero, clone el repositorio de LlamaIndex desde GitHub:
git clone https://github.com/jerryjliu/llama_index.git
- Una vez clonado, navegue hasta el directorio del proyecto.
- Necesitará Poetry para gestionar las dependencias de paquetes.
- Ahora, cree un entorno virtual usando Poetry:
poetry shell - Finalmente, instale los requisitos del paquete principal con:
poetry install
Configuración de su entorno para LlamaIndex
1. Configuración de OpenAI:
- Por defecto, LlamaIndex utiliza
gpt-3.5-turbode OpenAI para la generación de texto ytext-embedding-ada-002para la recuperación y las incrustaciones. - Para usar esta configuración, necesitará tener una
OPENAI_API_KEY. Obtenga una registrándose en el sitio web de OpenAI y creando un nuevo token de API. - Tiene la flexibilidad de personalizar el modelo de lenguaje grande subyacente (LLM) según las necesidades de su proyecto. Dependiendo de su proveedor de LLM, es posible que necesite claves y tokens de entorno adicionales.
2. Configuración del entorno local:
- Si prefiere no usar OpenAI, LlamaIndex cambia automáticamente a modelos locales –
LlamaCPPyllama2-chat-13Bpara la generación de texto, yBAAI/bge-small-enpara la recuperación y las incrustaciones. - Para usar
LlamaCPP, siga la guía de instalación proporcionada. Asegúrese de instalar el paquetellama-cpp-python, idealmente compilado para soportar su GPU. Esta configuración utilizará alrededor de 11.5 GB de memoria en todo el CPU y GPU. - Para las incrustaciones locales, ejecute
pip install sentence-transformers. Esta configuración local utilizará alrededor de 500 MB de memoria.
Con estas configuraciones, puede adaptar su entorno para aprovechar el poder de OpenAI o ejecutar modelos localmente, alineándose con los requisitos y recursos de su proyecto.
Un caso de uso simple: Consultar páginas web con LlamaIndex y OpenAI
Aquí hay un script de Python simple para demostrar cómo puede consultar una página web para obtener información específica:
!pip install llama-index html2text
<p>import os
from llama_index import VectorStoreIndex, SimpleWebPageReader</p>
<p># Introduzca su clave de API de OpenAI a continuación:
os.environ["OPENAI_API_KEY"] = ""</p>
<p># URL que desea cargar en su almacén de vectores aquí:
url = "http://www.paulgraham.com/fr.html"</p>
<p># Cargue la URL en documentos (posibles múltiples documentos)
documents = SimpleWebPageReader(html_to_text=True).load_data([url])</p>
<p># Cree un almacén de vectores a partir de los documentos
index = VectorStoreIndex.from_documents(documents)</p>
<p># Cree un motor de consulta para poder hacer preguntas:
query_engine = index.as_query_engine()</p>
<p># Haga tantas preguntas como desee contra los datos cargados:
response = query_engine.query("¿Cuáles son los 3 mejores consejos de Paul para recaudar dinero?")
print(response)
Los tres mejores consejos de Paul para recaudar dinero son: 1. Comience con un número bajo cuando esté recaudando dinero inicialmente. Esto permite flexibilidad y aumenta las posibilidades de recaudar más fondos a largo plazo. 2. Apunte a ser rentable si es posible. Tener un plan para alcanzar la rentabilidad sin depender de financiación adicional hace que la startup sea más atractiva para los inversores. 3. No se optimice para la valoración. Aunque la valoración es importante, no es el factor más crucial en la recaudación de fondos. Enfóquese en obtener los fondos necesarios y encontrar buenos inversores en su lugar.
Con este script, ha creado una herramienta poderosa para extraer información específica de una página web simplemente haciendo una pregunta. Esto es solo un vislumbre de lo que se puede lograr con LlamaIndex y OpenAI al consultar datos web.
LlamaIndex vs Langchain: Elección basada en su objetivo
Su elección entre LlamaIndex y Langchain dependerá del objetivo de su proyecto. Si desea desarrollar una herramienta de búsqueda inteligente, LlamaIndex es una buena opción, destacándose como un mecanismo de almacenamiento inteligente para la recuperación de datos. Por otro lado, si desea crear un sistema como ChatGPT con capacidades de plugin, Langchain es su opción. No solo facilita múltiples instancias de ChatGPT y LlamaIndex, sino que también amplía la funcionalidad permitiendo la construcción de agentes multitarea. Por ejemplo, con Langchain, puede crear agentes capaces de ejecutar código de Python mientras realizan una búsqueda en Google simultáneamente. En resumen, mientras LlamaIndex sobresale en el manejo de datos, Langchain orquesta múltiples herramientas para ofrecer una solución holística.

LlamaIndex Logo Artwork created using Midjourney


















