InteligĂȘncia artificial

LlamaIndex: Augmente suas AplicaçÔes de LLM com Dados Personalizados de Forma Fåcil

mm
LlamaIndex

Os grandes modelos de linguagem (LLMs) como a série GPT da OpenAI foram treinados em uma ampla gama de dados publicamente acessíveis, demonstrando capacidades notáveis em geração de texto, resumo, resposta a perguntas e planejamento. Apesar de sua versatilidade, uma pergunta frequentemente feita gira em torno da integração desses modelos com dados personalizados, privados ou proprietários.

Empresas e indivíduos estão inundados com dados únicos e personalizados, frequentemente armazenados em várias aplicações, como Notion, Slack e Salesforce, ou armazenados em arquivos pessoais. Para aproveitar os LLMs para esses dados específicos, várias metodologias foram propostas e experimentadas.

Fine-tuning representa uma abordagem, que consiste na ajuste dos pesos do modelo para incorporar conhecimento de conjuntos de dados específicos. No entanto, esse processo não está sem desafios. Exige um esforço substancial na preparação de dados, combinado com um procedimento de otimização difícil, necessitando de um certo nível de expertise em aprendizado de máquina. Além disso, as implicações financeiras podem ser significativas, especialmente ao lidar com grandes conjuntos de dados.

O aprendizado em contexto emergiu como uma alternativa, priorizando a criação de entradas e prompts para fornecer ao LLM o contexto necessário para gerar saídas precisas. Essa abordagem mitiga a necessidade de retreinamento extensivo do modelo, oferecendo uma maneira mais eficiente e acessível de integrar dados privados.

Porém, a desvantagem disso é sua dependência da habilidade e expertise do usuário em engenharia de prompts. Além disso, o aprendizado em contexto pode não ser sempre tão preciso ou confiável quanto o fine-tuning, especialmente ao lidar com dados altamente especializados ou técnicos. O treinamento prévio do modelo em uma ampla gama de textos da internet não garante a compreensão de jargões ou contextos específicos, o que pode levar a saídas imprecisas ou irrelevantes. Isso é particularmente problemático quando os dados privados são de um nicho ou indústria específica.

Além disso, a quantidade de contexto que pode ser fornecida em um único prompt é limitada, e o desempenho do LLM pode degradar à medida que a complexidade da tarefa aumenta. Há também o desafio de privacidade e segurança de dados, pois as informações fornecidas no prompt podem ser potencialmente sensíveis ou confidenciais.

À medida que a comunidade explora essas técnicas, ferramentas como LlamaIndex estão ganhando atenção.

Llama Index

Llama Index

Ele foi iniciado por Jerry Liu, um ex-cientista de pesquisa da Uber. Enquanto experimentava com o GPT-3 no outono passado, Liu notou as limitações do modelo em lidar com dados privados, como arquivos pessoais. Essa observação levou ao início do projeto de código aberto LlamaIndex.

A iniciativa atraiu investidores, garantindo $8,5 milhões em uma rodada recente de financiamento de sementes.

LlamaIndex facilita a ampliação dos LLMs com dados personalizados, preenchendo a lacuna entre modelos pré-treinados e casos de uso de dados personalizados. Por meio do LlamaIndex, os usuários podem aproveitar seus próprios dados com os LLMs, desbloqueando a geração de conhecimento e o raciocínio com insights personalizados.

Os usuários podem fornecer aos LLMs seus próprios dados de forma transparente, criando um ambiente onde a geração de conhecimento e o raciocínio são profundamente personalizados e esclarecedores. O LlamaIndex aborda as limitações do aprendizado em contexto, fornecendo uma plataforma mais amigável e segura para a interação de dados, garantindo que até mesmo aqueles com expertise limitada em aprendizado de máquina possam aproveitar todo o potencial dos LLMs com seus dados privados.

Conceitos de Alto Nível e Algumas Perspectivas

1. Geração Aumentada por Recuperação (RAG):

LlamaIndex RAG

LlamaIndex RAG

RAG é um processo de duas etapas projetado para combinar LLMs com dados personalizados, melhorando a capacidade do modelo de fornecer respostas mais precisas e informadas. O processo consiste em:

  • Etapa de Indexação: Esta é a fase preparatória onde a base para a criação de uma base de conhecimento é estabelecida.
LlamaIndex INDEXES

LlamaIndex Indexing

  • Etapa de Consulta: Aqui, a base de conhecimento é vasculhada em busca de contexto relevante para ajudar os LLMs a responder a consultas.
LlamaIndex QUERY STAGE

LlamaIndex Query Stage

Jornada de Indexação com LlamaIndex:

  • Conectores de Dados: Pense nos conectores de dados como o passaporte dos seus dados para o LlamaIndex. Eles ajudam a importar dados de várias fontes e formatos, encapsulando-os em uma representação simplificada de ‘Documento’. Os conectores de dados podem ser encontrados no LlamaHub, um repositório de código aberto cheio de carregadores de dados. Esses carregadores são projetados para uma integração fácil e uma experiência de plug-and-play com qualquer aplicativo do LlamaIndex.
Llama hub

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

  • Documentos / Nós: Um Documento é como uma mala genérica que pode conter vários tipos de dados — seja um PDF, saída de API ou entradas de banco de dados. Por outro lado, um Nó é um trecho ou ‘pedaço’ de um Documento, enriquecido com metadados e relações com outros nós, garantindo uma base sólida para a recuperação de dados precisa posteriormente.
  • Índices de Dados: Após a ingestão de dados, o LlamaIndex ajuda a indexar esses dados em um formato recuperável. Por trás dos panos, ele divide documentos brutos em representações intermediárias, computa embeddings de vetores e deduz metadados. Entre os índices, ‘VectorStoreIndex’ é frequentemente a escolha mais popular.

Tipo de Índices no LlamaIndex: Chave para Dados Organizados

O LlamaIndex oferece diferentes tipos de índices, cada um para necessidades e casos de uso diferentes. No núcleo desses índices estão os ‘nós’ discutidos anteriormente. Vamos tentar entender os índices do LlamaIndex com sua mecânica e aplicações.

1. Índice de Lista:

  • Mecanismo: Um Índice de Lista alinha os nós sequencialmente como uma lista. Após dividir os dados de entrada em nós, eles são arranjados em uma ordem linear, prontos para serem consultados sequencialmente ou por meio de palavras-chave ou embeddings.
  • Vantagem: Esse tipo de índice brilha quando a necessidade é de consulta sequencial. O LlamaIndex garante a utilização de todos os dados de entrada, mesmo que ultrapasse o limite de tokens do LLM, consultando inteligentemente o texto de cada nó e refinando as respostas à medida que navega pela lista.

2. Índice de Loja de Vetores:

  • Mecanismo: Aqui, os nós se transformam em embeddings de vetores, armazenados localmente ou em um banco de dados de vetores especializado, como o Milvus. Quando consultado, ele busca os k nós mais semelhantes, canalizando-os para o sintetizador de respostas.
  • Vantagem: Se o seu fluxo de trabalho depende da comparação de texto para semelhança semântica via busca de vetores, esse índice pode ser usado.

3. Índice de Árvore:

  • Mecanismo: Em um Índice de Árvore, os dados de entrada evoluem para uma estrutura de árvore, construída de baixo para cima a partir de nós folha (os pedaços de dados originais). Nós pais emergem como resumos dos nós folha, criados usando o GPT. Durante uma consulta, o índice de árvore pode percorrer do nó raiz para os nós folha ou construir respostas diretamente a partir dos nós folha selecionados.
  • Vantagem: Com um Índice de Árvore, a consulta de trechos longos de texto se torna mais eficiente, e a extração de informações de vários segmentos de texto é simplificada.

4. Índice de Palavras-Chave:

  • Mecanismo: Um Índice de Palavras-Chave forma um mapa de palavras-chave para nós. Quando consultado, as palavras-chave são extraídas da consulta, e apenas os nós mapeados são trazidos à tona.
  • Vantagem: Quando você tem consultas de usuário claras, um Índice de Palavras-Chave pode ser usado. Por exemplo, vasculhar documentos de saúde se torna mais eficiente quando você está focado apenas em documentos pertinentes ao COVID-19.

Instalando o LlamaIndex

A instalação do LlamaIndex é um processo direto. Você pode escolher instalar diretamente do Pip ou do código-fonte. (Certifique-se de ter o Python instalado em seu sistema ou use o Google Colab)

1. Instalação do Pip:

  • Execute o seguinte comando:
    pip install llama-index
  • Nota: Durante a instalação, o LlamaIndex pode baixar e armazenar arquivos locais para pacotes como NLTK e HuggingFace. Para especificar um diretório para esses arquivos, use a variável de ambiente “LLAMA_INDEX_CACHE_DIR”.

2. Instalação do Código-Fonte:

  • Primeiro, clone o repositório do LlamaIndex do GitHub:
    git clone https://github.com/jerryjliu/llama_index.git
  • Uma vez clonado, navegue até o diretório do projeto.
  • Você precisará do Poetry para gerenciar dependências de pacotes.
  • Agora, crie um ambiente virtual usando o Poetry:
    poetry shell
  • Finalmente, instale os requisitos do pacote principal com:
    poetry install

Configurando seu Ambiente para o LlamaIndex

1. Configuração da OpenAI:

  • Por padrão, o LlamaIndex utiliza o gpt-3.5-turbo da OpenAI para geração de texto e text-embedding-ada-002 para recuperação e embeddings.
  • Para usar essa configuração, você precisará ter uma OPENAI_API_KEY. Obtenha uma registrando-se no site da OpenAI e criando um novo token de API.
  • Você tem a flexibilidade de personalizar o LLM subjacente de acordo com as necessidades do seu projeto. Dependendo do seu provedor de LLM, você pode precisar de chaves e tokens de ambiente adicionais.

2. Configuração do Ambiente Local:

  • Se você preferir não usar a OpenAI, o LlamaIndex muda automaticamente para modelos locais – LlamaCPP e llama2-chat-13B para geração de texto, e BAAI/bge-small-en para recuperação e embeddings.
  • Para usar o LlamaCPP, siga o guia de instalação fornecido. Certifique-se de instalar o pacote llama-cpp-python, idealmente compilado para suportar sua GPU. Essa configuração utilizará cerca de 11,5GB de memória ao longo do CPU e GPU.
  • Para embeddings locais, execute pip install sentence-transformers. Essa configuração local utilizará cerca de 500MB de memória.

Com essas configurações, você pode adaptar seu ambiente para aproveitar o poder da OpenAI ou executar modelos localmente, alinhando-se com os requisitos e recursos do seu projeto.

Um Caso de Uso Simples: Consultando Páginas da Web com LlamaIndex e OpenAI

Aqui está um script Python simples para demonstrar como você pode consultar uma página da web para obter insights específicos:

!pip install llama-index html2text


<p>import os
from llama_index import VectorStoreIndex, SimpleWebPageReader</p>

<p># Insira sua chave da OpenAI abaixo:
os.environ["OPENAI_API_KEY"] = ""</p>

<p># URL que você deseja carregar no seu repositório de vetores aqui:
url = "http://www.paulgraham.com/fr.html"</p>

<p># Carregue a URL em documentos (vários documentos são possíveis)
documents = SimpleWebPageReader(html_to_text=True).load_data([url])</p>

<p># Crie um repositório de vetores a partir dos documentos
index = VectorStoreIndex.from_documents(documents)</p>

<p># Crie um mecanismo de consulta para que você possa fazer perguntas
query_engine = index.as_query_engine()</p>

<p># Faça quantas perguntas quiser contra os dados carregados:
response = query_engine.query("Quais são os 3 melhores conselhos de Paul para levantar dinheiro?")
print(response)
Os três melhores conselhos de Paul para levantar dinheiro são:
1. Comece com um número baixo quando estiver levantando dinheiro inicialmente. Isso permite flexibilidade e aumenta as chances de levantar mais fundos no longo prazo.
2. Aponte para a rentabilidade, se possível. Ter um plano para atingir a rentabilidade sem depender de financiamento adicional torna a startup mais atraente para os investidores.
3. Não otimize para valorização. Embora a valorização seja importante, não é o fator mais crítico no financiamento. Foque em obter os fundos necessários e encontrar bons investidores em vez disso.
Google Colab Llama Index Notebook

Google Colab Llama Index Notebook

Com esse script, você criou uma ferramenta poderosa para extrair informações específicas de uma página da web simplesmente fazendo uma pergunta. Isso é apenas um vislumbre do que pode ser alcançado com o LlamaIndex e a OpenAI ao consultar dados da web.

LlamaIndex vs Langchain: Escolhendo com Base em seu Objetivo

Sua escolha entre LlamaIndex e Langchain dependerá do objetivo do seu projeto. Se você deseja desenvolver uma ferramenta de busca inteligente, o LlamaIndex é uma escolha sólida, destacando-se como um mecanismo de armazenamento inteligente para recuperação de dados. Por outro lado, se você deseja criar um sistema como o ChatGPT com capacidades de plugin, o Langchain é a sua escolha. Ele não apenas facilita múltiplas instâncias do ChatGPT e do LlamaIndex, mas também expande a funcionalidade permitindo a construção de agentes multitasca. Por exemplo, com o Langchain, você pode criar agentes capazes de executar código Python enquanto realizam uma busca no Google simultaneamente. Em resumo, enquanto o LlamaIndex se destaca no manejo de dados, o Langchain orquestra várias ferramentas para oferecer uma solução holística.

LlamaIndex Logo Artwork created using Midjourney

LlamaIndex Logo Artwork criado usando Midjourney

Eu passei os Ășltimos cinco anos me imergindo no fascinante mundo de Aprendizado de MĂĄquina e Aprendizado Profundo. Minha paixĂŁo e expertise me levaram a contribuir para mais de 50 projetos de engenharia de software diversificados, com um foco particular em IA/ML. Minha curiosidade contĂ­nua tambĂ©m me levou em direção ao Processamento de Linguagem Natural, um campo que estou ansioso para explorar mais.