Inteligência artificial
LlamaIndex: Augmente suas Aplicações de LLM com Dados Personalizados Facilmente

Modelos de linguagem grande (LLMs) como a série GPT da OpenAI foram treinados em uma ampla gama de dados públicos acessíveis, demonstrando capacidades notáveis em geração de texto, resumo, resposta a perguntas e planejamento. Apesar de sua versatilidade, uma pergunta frequentemente colocada gira em torno da integração sem esforço desses modelos com dados personalizados, privados ou proprietários.
Empresas e indivíduos são inundados com dados personalizados e exclusivos, muitas vezes 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ários métodos foram propostos e experimentados.
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á isento de desafios. Exige um esforço substancial na preparação de dados, combinado com um procedimento de otimização difícil, necessitando 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 um longo treinamento do modelo, oferecendo um meio mais eficiente e acessível de integrar dados privados.
Mas 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 de domínio ou indústria.
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 potencialmente ser sensíveis ou confidenciais.
À medida que a comunidade explora essas técnicas, ferramentas como LlamaIndex estão ganhando atenção.
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 em que 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 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 de Recuperação Aumentada (RAG):
RAG é um processo de duas etapas projetado para acoplar LLMs com dados personalizados, aumentando assim a capacidade do modelo de fornecer respostas mais precisas e informadas. O processo compreende:
- Etapa de Indexação: Esta é a fase preparatória em que os fundamentos para a criação de uma base de conhecimento são estabelecidos.
- Etapa de Consulta: Aqui, a base de conhecimento é vasculhada em busca de contexto relevante para ajudar os LLMs a responder a consultas.
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 simplista de ‘Documento’. Conectores de dados podem ser encontrados dentro do LlamaHub, um repositório de código aberto cheio de carregadores de dados. Esses carregadores são projetados para uma integração fácil, permitindo uma experiência plug-and-play com qualquer aplicativo LlamaIndex.
- 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 relacionamentos com outros nós, garantindo uma base sólida para a recuperação precisa de dados 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 disseciona documentos brutos em representações intermediárias, computa embeddings de vetores e deduz metadados. Entre os índices, ‘VectorStoreIndex’ é frequentemente a escolha mais procurada.
Tipos de Índices no LlamaIndex: Chave para Dados Organizados
O LlamaIndex oferece diferentes tipos de índice, cada um para diferentes necessidades e casos de uso. No núcleo desses índices estão “nós” como discutido 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 Armazenamento 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 Milvus. Quando consultado, ele busca os 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 por meio de 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 a partir de nós folha (os pedaços de dados originais). Nós pais surgem como resumos de 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 respostasetamente a partir dos nós folha selecionados.
- Vantagem: Com um Índice de Árvore, a consulta de trechos de texto longos se torna mais eficiente, e a extração de informações de vários segmentos de texto é simplificada.
4. Índice de Palavra-Chave:
- Mecanismo: Um mapa de palavras-chave para nós forma o núcleo de um Índice de Palavra-Chave. Quando consultado, as palavras-chave são extraídas da consulta, e apenas os nós mapeados são trazidos à luz.
- Vantagem: Quando você tem consultas de usuário claras, um Índice de Palavra-Chave pode ser usado. Por exemplo, vasculhar documentos de saúde se torna mais eficiente quando se concentra apenas em documentos pertinentes ao COVID-19.
Instalando o LlamaIndex
Instalar o LlamaIndex é um processoeto. Você pode escolher instalá-loetamente 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 umetó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é oetório do projeto.
- Você precisará do Poetry para gerenciar as dependências de pacotes.
- Agora, crie um ambiente virtual usando o Poetry:
poetry shell - Finalmente, instale os requisitos principais do pacote com:
poetry install
Configurando seu Ambiente para o LlamaIndex
1. Configuração da OpenAI:
- Por padrão, o LlamaIndex utiliza o
gpt-3.5-turboda OpenAI para geração de texto etext-embedding-ada-002para 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 modelo de linguagem grande subjacente de acordo com as necessidades do seu projeto. Dependendo do fornecedor do LLM, você pode precisar de chaves de ambiente e tokens adicionais.
2. Configuração do Ambiente Local:
- Se você preferir não usar a OpenAI, o LlamaIndex muda automaticamente para modelos locais –
LlamaCPPellama2-chat-13Bpara geração de texto, eBAAI/bge-small-enpara recuperação e embeddings. - Para usar o
LlamaCPP, siga o guia de instalação fornecido. Certifique-se de instalar o pacotellama-cpp-python, idealmente compilado para suportar sua GPU. Essa configuração utilizará cerca de 11,5 GB de memória ao longo da CPU e GPU. - Para embeddings locais, execute
pip install sentence-transformers. Essa configuração local utilizará cerca de 500 MB de memória.
Com essas configurações, você pode personalizar seu ambiente para aproveitar o poder da OpenAI ou executar modelos localmente, alinhando com as necessidades 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
import os
from llama_index import VectorStoreIndex, SimpleWebPageReader
# Insira sua chave da OpenAI abaixo:
os.environ["OPENAI_API_KEY"] = ""
# URL que você deseja carregar no seu armazenamento de vetores aqui:
url = "http://www.paulgraham.com/fr.html"
# Carregue a URL em documentos (vários documentos possíveis)
documents = SimpleWebPageReader(html_to_text=True).load_data([url])
# Crie um armazenamento de vetores a partir dos documentos
index = VectorStoreIndex.from_documents(documents)
# Crie um mecanismo de consulta para que possamos fazer perguntas:
query_engine = index.as_query_engine()
# 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 a longo prazo. 2. Aponte para a rentabilidade, se possível. Ter um plano para alcançar 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 crucial no financiamento. Foque em obter os fundos necessários e encontrar bons investidores em vez disso.
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 entregar uma solução holística.

LlamaIndex Logo Artwork created using Midjourney


















