Modelos y plataformas de IA

LlamaIndex: Augmenta tus aplicaciones de LLM con datos personalizados de manera fÃĄcil

mm
AÃąade Unite.AI a tus fuentes preferidas en Google

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 (CRM ), 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.

Llama Index

Llama Index

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

LlamaIndex RAG

LlamaIndex 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.
LlamaIndex INDEXES

LlamaIndex Indexing

  • Fase de consulta: Aquí, la base de conocimiento se busca para encontrar contexto relevante que ayude a los LLM a responder a las consultas.
LlamaIndex QUERY STAGE

LlamaIndex Query Stage

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.
Llama hub

LlamaIndex hub (https://llamahub.ai/)

  • 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-turbo de OpenAI para la generaciÃģn de texto y text-embedding-ada-002 para 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 – LlamaCPP y llama2-chat-13B para la generaciÃģn de texto, y BAAI/bge-small-en para la recuperaciÃģn y las incrustaciones.
  • Para usar LlamaCPP, siga la guía de instalaciÃģn proporcionada. AsegÚrese de instalar el paquete llama-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.
Cuaderno de Llama Index en Google Colab

Cuaderno de Llama Index en Google Colab

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

LlamaIndex Logo Artwork created using Midjourney

He dedicado los Últimos cinco aÃąos sumergiÃĐndome en el fascinante mundo de Machine Learning y Deep Learning. Mi pasiÃģn y experiencia me han llevado a contribuir a mÃĄs de 50 proyectos de ingeniería de software diversos, con un enfoque particular en AI/ML. Mi curiosidad en curso tambiÃĐn me ha llevado hacia el Procesamiento de Lenguaje Natural, un campo que estoy ansioso por explorar mÃĄs a fondo.