O que é o LlamaIndex?

Vista aérea de uma rodovia de Los Angeles

Autores

Vanna Winland

AI Advocate & Technology Writer

Erika Russi

Data Scientist

IBM

O LlamaIndex é uma framework de orquestração de dados de código aberto para a criação de aplicações de grandes modelos de linguagem (LLMs). O LlamaIndex está disponível em Python e TypeScript e aproveita uma combinação de ferramentas e recursos que simplificam o processo de aumento de contexto para casos de uso de IA generativa (IA gen) por meio de um pipeline de recuperação aumentada (RAG) .

Projeto 3D de bolas rolando em uma pista

As últimas notícias e insights sobre IA 


Descubra insights selecionados por especialistas e notícias sobre IA, nuvem e outros assuntos no boletim informativo semanal Think. 

Como o LlamaIndex funciona?

O LlamaIndex permite que os usuários selecionem e organizem seus dados privados ou personalizados por meio da integração de dados e aumento de contexto.

Aumento de contexto

O aumento de contexto ocorre quando os dados são fornecidos à janela de contexto dos LLMs, essencialmente aumentando os LLMs com dados privados ou externos.

LLMs de código aberto amplamente utilizados são pré-treinados em grandes quantidades de dados públicos. Esses LLMs em larga escala ajudam a resolver muitos problemas do mundo real. No entanto, eles exigem uma quantidade considerável de tempo e recursos para serem treinados para um caso de uso específico. Além disso, os dados internos de um modelo são atualizados apenas durante o período em que foram pré-treinados. Dependendo do modelo, o aumento do contexto é necessário para que os modelos reflitam a consciência em tempo real dos eventos atuais.

Os modelos de base estão ganhando popularidade, pois são modelos de IA flexíveis e reutilizáveis que podem ser aplicados a praticamente qualquer domínio ou tarefa. Modelos de base semelhantes à série IBM Granite são treinados com dados selecionados. No entanto, independentemente de o modelo ser treinado em um grande conjunto de dados ou em um modelo de base pré-treinado, eles provavelmente precisarão ser treinados em fontes externas de dados específicos do domínio. Esse processo é facilitado por uma framework que conecta o LLM aos dados privados para adaptá-lo ao caso de uso ou ao objetivo geral da aplicação. A parte da stack de aplicações que facilita a conexão de LLMs a fontes de dados personalizadas são frameworks de dados como o LlamaIndex.

Integração de dados

Os dados vêm de muitas fontes em muitos formatos; cabe à framework ingerir, transformar e organizar os dados para os LLMs usarem. Os dados frequentemente estão isolados e são não estruturados. Para obtê-los e estruturá-los, uma framework de dados, como o LlamaIndex, deve executar os dados por meio de um processo comumente chamado de pipeline de ingestão.

Depois que os dados são ingeridos e transformados em um formato que o LLM pode usar, a próxima etapa é converter as informações em uma estrutura de dados para indexação. O procedimento comum é converter dados não estruturados em incorporações vetoriais. Esse processo é chamado de "criação de uma incorporação" no processamento de linguagem natural (NLP), mas é chamado de "indexação" na terminologia de dados.1 A indexação é necessária porque permite que o LLM consulte e recupere os dados ingeridos pelo índice vetorial. Os dados podem ser indexados de acordo com a estratégia de consulta escolhida.

A integração de dados facilita o aumento de contexto, ao integrar dados privados na janela de contexto ou "base de conhecimento" do LLM. O comprimento da janela de contexto dos modelos Granite de três bilhões e de oito bilhões da IBM foi recentemente estendido para 128.000 tokens.2 Uma janela de contexto maior permite que o modelo retenha mais texto em sua memória de trabalho, o que aprimora sua capacidade de rastrear detalhes importantes em conversas estendidas, longas e bases de código. Este recurso permite que os chatbots de LLMs produzam respostas coerentes tanto no curto prazo quanto em um contexto mais estendido.

No entanto, mesmo com uma janela de contexto estendida, um modelo com ajuste fino pode gerar custos consideráveis tanto em termos de treinamento quanto de inferência. O ajuste fino de modelos com dados específicos ou privados requer transformações de dados e sistemas que promovam métodos eficientes de recuperação de dados para solicitações de LLMs. A metodologia RAG é vista como uma opção promissora para facilitar a modelagem de linguagem de contexto longo.3

Geração aumentada de recuperação (RAG)

A RAG é um dos métodos mais conhecidos e usados para aumento de contexto. A RAG permite que os LLMs aproveitem uma base de conhecimento especializada, aprimorando a capacidade dos LLMs de fornecer respostas mais precisas às perguntas.4 O processo típico de aumento de recuperação é realizado em três etapas:

  1. Fragmentação: a entrada de sequência longa é particionada em fragmentos.
  2. Incorporação: cada parte é codificada em uma incorporação, que pode ser processada pelo LLM.
  3. Recuperação: os fragmentos incorporados mais úteis são buscados com base na consulta.

Frameworks de dados, como o LlamaIndex, simplificam o processo de ingestão e recuperação de dados, ao fornecer chamadas de APIs abrangentes para cada etapa do padrão RAG. Esse processo é alimentado pelo conceito de um mecanismo de consulta que permite aos usuários fazer perguntas sobre seus dados. A consulta de dados externos e a solicitação de LLMs com conhecimento contextual possibilitam a criação de aplicações de LLMs específicas do domínio.

AI Academy

Por que os modelos de base são uma mudança de paradigma para a IA

Aprenda sobre uma nova classe de modelos de IA flexíveis e reutilizáveis que podem liberar novas receitas, reduzir custos e aumentar a produtividade, e utilize o nosso guia para se aprofundar.

Fluxo de trabalho de dados do LlamaIndex

O LlamaIndex usa a RAG para adicionar e conectar dados externos ao conjunto de dados ao qual os LLMs já têm acesso. Aplicações, incluindo mecanismos de consulta, chatbots e agentes, usam técnicas de RAG para concluir tarefas.5

O fluxo de trabalho do LlamaIndex pode ser dividido em algumas etapas:

  1. Ingestão (carregamento) de dados
  2. Indexação e armazenamento
  3. Consulta

O objetivo desse fluxo de trabalho é ajudar a ingerir, estruturar e permitir que os LLMs acessem dados privados ou específicos do domínio. Ter acesso a dados mais relevantes permite que os LLMs respondam com mais precisão aos prompts, seja para criar chatbots ou mecanismos de consulta.

Ingestão (carregamento) de dados

A ingestão ou "carregamento" de dados é a primeira etapa para conectar fontes de dados externas a um LLM. O LlamaIndex refere-se à ingestão de dados como o carregamento dos dados para a aplicação usar. A maioria dos dados privados ou personalizados pode ser isolada em formatos como interfaces de programação de aplicativos (APIs), PDFs, imagens, bancos de dados de linguagem de consulta estruturada (SQL) e muitos outros. O LlamaIndex pode carregar mais de 160 formatos de dados diferentes, incluindo conjuntos de dados estruturados, semiestruturados e não estruturados.

Conectores de dados, também conhecidos como "carregadores", buscam e ingerem dados de sua fonte nativa. Os dados coletados são transformados em uma coleção de dados e metadados. Essas coleções são chamadas de "documentos" no LlamaIndex. Os conectores de dados, ou "leitores" no LlamaIndex, ingerem e carregam vários formatos de dados. O LlamaIndex possui um leitor integrado que converte todos os arquivos em cada diretório em documentos, incluindo Markdown, PDFs, documentos do Word, apresentações em PowerPoint, imagens, arquivos de áudio e vídeos.6 Para contabilizar outros formatos de dados não incluídos na funcionalidade integrada, há conectores de dados disponíveis por meio do LlamaHub, um registro de carregadores de dados de código aberto. Essa etapa do fluxo de trabalho cria uma base de conhecimento para formar índices sobre os dados, para que possam ser consultados e usados por LLMs.

Indexação e armazenamento

Depois que os dados são ingeridos, a framework de dados precisa transformar e organizar os dados em uma estrutura que possa ser recuperada pelo LLM. Os índices de dados estruturam os dados em representações que os LLMs podem usar. O LlamaIndex oferece vários tipos diferentes de índices que são complementares à estratégia de consulta da aplicação, incluindo: um índice de armazenamento de vetores, um índice resumido e um índice gráfico de conhecimento.

Depois que os dados são carregados e indexados, eles podem ser armazenados. O LlamaIndex é compatível com muitos armazenamentos de vetores, que variam em arquitetura, complexidade e custo. Por padrão, o LlamaIndex armazena todos os dados indexados somente na memória.

Índice de armazenamentos de vetores

O índice de armazenamentos de vetores é comumente usado em aplicações de LLMs seguindo o padrão RAG, pois ele se destaca no tratamento de consultas de linguagem natural. A precisão da recuperação de consultas de linguagem natural depende da pesquisa semântica, ou pesquisa baseada no significado em vez da correspondência de palavras-chave.7 A pesquisa semântica é habilitada ao converter dados de entrada em incorporações vetoriais. Uma incorporação vetorial é uma representação numérica da semântica dos dados que o LLM pode processar. A relação matemática entre incorporações vetoriais permite que os LLMs recuperem dados com base no significado dos termos de consulta para obter respostas mais ricas em contexto.

O "VectorStoreIndex" pega as coleções de dados, ou objetos "documentos" e os divide em "nós", que são unidades atômicas de dados que representam um "fragmento" dos dados de origem ("documento"). Depois que a coleta de dados é dividida em fragmentos, as incorporações vetoriais de cada bloco de dados são criadas. Os dados integrados agora estão em um formato no qual o LLM pode executar consultas. Esses índices vetoriais podem ser armazenados para evitar a reindexação. A maneira mais simples de armazenar dados é mantê-los em disco, mas o LlamaIndex se integra a vários bancos de dados vetoriais e modelos de incorporação.8

Para pesquisar inserções, a consulta do usuário é primeiro convertida em uma incorporação vetorial. Em seguida, um processo matemático é usado para classificar todas as incorporações com base em sua semelhança semântica com a consulta.

O índice de armazenamentos de vetores usa a recuperação semântica top-k para retornar as incorporações mais semelhantes como seus fragmentos de texto correspondentes. O LlamaIndex foi projetado para facilitar a criação e o gerenciamento de índices de grande escala para a recuperação eficiente de informações.

Consulta

A etapa final do fluxo de trabalho é a implementação de mecanismos de consulta para lidar com chamadas de prompts para LLMs. A consulta consiste em três estágios distintos: recuperação, pós-processamento e síntese de resposta. A recuperação é quando os documentos mais relevantes são buscados e retornados do índice vetorial. O pós-processamento é quando os fragmentos de incorporação ou os "nós" recuperados são opcionalmente reequipados por meio de reclassificação, transformação ou filtragem. A síntese de resposta é quando os dados e o prompt mais relevantes são combinados e enviados ao LLM para retornar uma resposta.

Mecanismos de consulta

Os mecanismos de consulta permitem que os usuários façam perguntas sobre seus dados, recebendo uma consulta de linguagem natural e retornando uma resposta rica em contexto.9 Os mecanismos de consulta são compostos por um ou vários índices e recuperadores. Muitos mecanismos de consulta podem ser usados ao mesmo tempo para coleções de dados com vários tipos de índices. O LlamaIndex oferece vários mecanismos de consulta diferentes para dados estruturados e semiestruturados, como por exemplo, um mecanismo de consulta JSON para consultar documentos JSON.

Agentes de dados

Os agentes de dados são agentes de IA baseados em LLMs, capazes de executar uma variedade de tarefas nos dados, incluindo funções de leitura e gravação.10 Os agentes de dados do LlamaIndex são trabalhos de conhecimento baseados em LLMs que podem executar o seguinte:

  • Pesquisa e recuperação automatizadas em diferentes tipos de dados: não estruturados, semiestruturados e estruturados
  • Chamadas de APIs para serviços externos que podem ser processados imediatamente, indexados ou armazenados em cache
  • Armazenamento do histórico de conversas
  • Cumprimento de tarefas de dados simples e complexas

Os agentes de IA podem interagir com seu ambiente externo por meio de um conjunto de APIs e ferramentas. O LlamaIndex é compatível com o agente OpenAI Function (criado com base na API OpenAI Function) e um agente ReAct. Os principais componentes dos agentes de dados são “um ciclo de raciocínio” ou o paradigma de raciocínio do agente e “abstrações de ferramentas”, que são as próprias ferramentas.

Ciclo de raciocínio

Os agentes usam um ciclo de raciocínio, ou paradigma, para resolver problemas de várias etapas. No LlamaIndex, tanto os agentes OpenAI Function quanto ReAct seguem um padrão semelhante para decidir quais ferramentas usar, bem como a sequência e os parâmetros para chamar cada ferramenta. O padrão de raciocínio é chamado de ReAct, ou raciocínio e ação (reasoning and action). Esse processo pode ser um processo simples de seleção de ferramentas de uma etapa ou um processo mais complexo, em que várias ferramentas são selecionadas em cada etapa.

Abstrações de ferramentas de agentes

As abstrações de ferramentas descrevem como as ferramentas são acessadas e usadas pelo agente. O LlamaIndex oferece ferramentas e ToolSpecs, uma classe de Python que representa uma especificação de APIs completa com a qual um agente pode interagir. A abstração de ferramentas básica define uma interface genérica que pode receber uma série de argumentos e retornar um contêiner de saída de ferramentas genérico que pode capturar qualquer resposta. O LlamaIndex fornece abstrações de ferramentas que envolvem os mecanismos de consulta de dados existentes e abstrações para funções que podem ser usadas pela classe de especificações de ferramentas.

  • FunctionTool: converte qualquer função em uma ferramenta que pode ser usada por agentes.
  • QueryEngineTool: permite que os agentes usem a pesquisa e a recuperação do mecanismo de consulta.

Uma especificação de ferramentas permite que os usuários definam serviços completos em vez de ferramentas individuais, que lidam com tarefas específicas. Por exemplo, a especificação da ferramenta do Gmail permite que o agente leia e redija e-mails.11 Aqui está um exemplo de como isso seria definido a grosso modo:

class GmailToolSpec(BaseToolSpec):
    “””Load emails from the user’s account”””
    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: “Create and insert a draft email”
...

def send_draft(
    self,
    draft_id: str = None
) -> str: “Send a draft email.”
...

Cada função é convertida em uma ferramenta, usando a abstração "FunctionTool".

O LlamaIndex utiliza o repositório de ferramentas do LlamaHub, que consiste em mais de 15 especificações de ferramentas para os agentes interagirem. Essa lista consiste em serviços destinados a aprimorar e enriquecer a capacidade dos agentes de realizar diferentes ações. Aqui estão algumas das várias especificações incluídas no repositório:

  • Especificação de SQL + banco de dados vetorial
  • Especificação de Gmail
  • Ollama
  • LangChainLLM

Ferramentas utilitárias

O LlamaIndex oferece ferramentas utilitárias que podem aumentar os recursos das ferramentas existentes, incluindo:

  • OnDemandLoaderTool: transforma qualquer carregador de dados LlamaIndex existente em uma ferramenta que pode ser utilizada por um agente.
  • LoadAndSearchToolSpec: aceita ferramentas existentes como entrada e produz uma ferramenta de carregamento e uma ferramenta de pesquisa como saídas.

Integração com LLMs

O LlamaIndex funciona com modelos de base de código aberto, como a série IBM Granite, Llama2 e OpenAI, e outras frameworks de LLMs, incluindo LangChain e Ollama. Os LLMs podem ser usados de várias maneiras como módulos independentes ou conectados a outros módulos principais do LlamaIndex.12 Os LLMs também podem ser usados para fazer com que agentes de IA atuem como profissionais do conhecimento que seguem fluxos de trabalho autônomos.

Agentes de IA

O LlamaIndex expandiu sua funcionalidade para incluir o uso de agentes de IA orientados por LLM para atuarem como trabalhadores de conhecimento. Agentes de IA do LlamaIndex seguindo um padrão comportamental do ReAct (raciocínio e ação). Os agentes do ReAct seguem um paradigma de raciocínio que instrui o agente a planejar e raciocinar enquanto melhora iterativamente as respostas. Esse tipo de agente de AI pode ser interpretado como uma forma de instruções por linha de pensamento. Os agentes podem usar ferramentas para integração com outros LLMs. Por exemplo, a coleção do LlamaHub de ferramentas de conexão de dados e agentes.

Casos de uso

O LlamaIndex oferece vários exemplos de casos de uso na documentação, com links para tutoriais.13

  • Chatbots: o LlamaIndex oferece uma analogia de estado a um mecanismo de consulta chamado chatbot. Um mecanismo de chat fornece uma interface de alto nível para conversas (interações de ida e volta em vez de uma única pergunta e resposta). É possível pensar nos mecanismos de chat como uma versão mais personalizada de uma aplicação ChatGPT. As implementações do mecanismo de chat incluem um modo que utiliza um agente ReAct. O LlamaIndex tem um tutorial sobre como criar um chatbot que usa um agente de dados.
  • Prompts: o LlamaIndex usa a integração de LLMs e fluxos de trabalho como abstrações orientadas por eventos para encadear chamadas de prompts. Os prompts são fundamentais para qualquer aplicação de LLMs.
  • Resposta a perguntas (RAG): o LlamaIndex oferece a capacidade de executar RAG em documentos não estruturados com consulta de linguagem natural. O LlamaIndex também oferece uma maneira de consultar dados estruturados com texto para SQL e texto para Pandas.14
  • Extração de dados estruturados: os LLMs processam linguagem natural e extraem detalhes semanticamente significativos, como nomes, datas, endereços e números, e os apresentam em um formato consistente e estruturado, independentemente da fonte original. Depois que os dados são estruturados, eles podem ser enviados para um banco de dados ou analisados com ferramentas como o LlamaParse.
  • Agentes autônomos: os agentes de IA podem ser usados para várias aplicações de LLMs. Por exemplo, os usuários podem criar uma aplicação RAG agêntica ao criar um assistente de pesquisa aumentado por contexto sobre seus dados, que responde a perguntas simples junto com tarefas de pesquisa complexas.15
Soluções relacionadas
Modelos de base

Explore a biblioteca de modelos de base da IBM no portfólio do watsonx para escalar a IA generativa com confiança na sua empresa.

Conheça o watsonx.ai
Soluções de inteligência artificial

Use a IA a serviço da sua empresa com a experiência e o portfólio de soluções líder do setor da IBM à sua disposição.

Explore as soluções de IA
Consultoria e serviços em IA

Reinvente os fluxos de trabalho e as operações críticas adicionando IA para maximizar experiências, tomadas de decisão em tempo real e valor comercial.

Explore os serviços de IA
Dê o próximo passo

Explore a biblioteca da IBM de modelos de base no portfólio do IBM® watsonx para escalar a IA generativa para os seus negócios com confiança.

Explore o watsonx.ai Explore as soluções de IA
Notas de rodapé

1 Elena Lowery, “Use Watsonx.Ai with LlamaIndex to Build Rag Applications,” Use Watsonx.ai with LlamaIndex to build RAG applications, May 28, 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,” arXiv.org, 18 de julho de 2024, https://arxiv.org/abs/2407.13739.

3 Matt Stallone et al., “Scaling Granite Code Models to 128K Context.”

4 Kim Martineau, “What Is Retrieval-Augmented Generation (Rag)?,” IBM Research, 1 de maio de 2024, https://research.ibm.com/blog/retrieval-augmented-generation-RAG.

5 “High-Level Concepts,” LlamaIndex, https://docs.llamaindex.ai/en/stable/getting_started/concepts/.

6 “Loading Data (Ingestion),” LlamaIndex, https://docs.llamaindex.ai/en/stable/understanding/loading/loading/.

7 Elena Lowery, “Use Watsonx.Ai with LlamaIndex to Build Rag Applications.”

8 Elena Lowery, “Use Watsonx.Ai with LlamaIndex to Build Rag Applications.”

9 “Query Engine,” LlamaIndex, https://docs.llamaindex.ai/en/latest/module_guides/deploying/query_engine/.

10 Jerry Liu, “Data Agents,” Medium, 13 de julho 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,” LlamaIndex, https://docs.llamaindex.ai/en/latest/module_guides/models/llms/.

13 “Use Cases,” LlamaIndex, https://docs.llamaindex.ai/en/latest/use_cases/.

14 “Question-Answering (RAG),” LlamaIndex, https://docs.llamaindex.ai/en/stable/use_cases/q_and_a/.

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