Gerenciamento e Processamento de Documentos com Pipelines de Ingestão do LlamaIndex

Configuração e Geração de Dados Iniciais

Para iniciar o gerenciamento de documentos, é necessário preparar um conjunto de dados de exemplo e instalar as dependências do ecossistema LlamaIndex. O código abaixo configura o ambiente e cria arquivos de texto simulados para servirem como base de testes.

# Instalação das bibliotecas de armazenamento e embeddings
!pip install llama-index-storage-docstore-redis llama-index-storage-docstore-mongodb llama-index-embeddings-huggingface

# Criação do diretório e geração de arquivos de texto simulados
!mkdir -p repositorio_docs
!echo "Conteúdo do primeiro documento de teste." > repositorio_docs/doc_alpha.txt
!echo "Conteúdo do segundo documento de teste." > repositorio_docs/doc_beta.txt

Em seguida, os arquivos são carregados na memória, utilizando o nome do arquivo como identificador único para facilitar o rastreamento.

from llama_index.core import SimpleDirectoryReader

# Carregamento dos arquivos atribuindo o nome do arquivo como identificador único
leitor = SimpleDirectoryReader(input_dir="./repositorio_docs", filename_as_id=True)
docs_iniciais = leitor.load_data()

Construção do Pipeline de Armazenamento

O processamento é orquestrado através de um pipeline de ingestão. Utilizaremos um modelo de embeddings do HuggingFace combinado com um divisor de texto baseado em frases e um armazenamento de documentos simples.

from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.core.ingestion import IngestionPipeline
from llama_index.core.storage.docstore import SimpleDocumentStore
from llama_index.core.node_parser import SentenceSplitter

# Configuração do modelo de embedding e do divisor de texto
modelo_embedding = HuggingFaceEmbedding(model_name="BAAI/bge-small-en-v1.5")
divisor_frases = SentenceSplitter()

# Inicialização do pipeline com o docstore simples
fluxo_ingestao = IngestionPipeline(
    transformations=[divisor_frases, modelo_embedding],
    docstore=SimpleDocumentStore(),
)

# Execução do pipeline para processar os documentos iniciais
fragmentos = fluxo_ingestao.run(documents=docs_iniciais)
print(f"Total de fragmentos processados: {len(fragmentos)}")

Validação do Gerenciamento de Documentos

Para testar a capacidade do pipeline de lidar com alterações, novos documentos são adicionados e documentos existentes são modificados no sistema de arquivos.

# Adição de um novo documento e atualização de um existente
!echo "Conteúdo do terceiro documento de teste." > repositorio_docs/doc_gamma.txt
!echo "Conteúdo atualizado do primeiro documento de teste." > repositorio_docs/doc_alpha.txt

Após as modificações, o diretório é lido novamente e o pipeline é reexecutado para verificar como o sistema lida com a sincronização dos dados.

# Recarregamento dos documentos após as modificações no disco
docs_atualizados = SimpleDirectoryReader("./repositorio_docs", filename_as_id=True).load_data()
fragmentos_atualizados = fluxo_ingestao.run(documents=docs_atualizados)

print(f"Novo total de fragmentos processados: {len(fragmentos_atualizados)}")

# Exibição do conteúdo de cada fragmento resultante
for frag in fragmentos_atualizados:
    print(f"Texto do fragmento: {frag.text}")

# Verificação do tamanho do armazenamento de documentos
print(f"Documentos no docstore: {len(fluxo_ingestao.docstore.docs)}")

Resolução de Problemas Comuns

  • Falhas de Conectividade: A dependência de APIs externas ou o download de modelos de embeddings pode ser interrompida por instabilidade na rede. Utilize mecanismos de cache local ou configure timeouts adequados nas requisições.
  • Conflitos de Dependências: Diferentes versões de pacotes do ecossistema LlamaIndex podem gerar incompatibilidades de API. É altamente recomendável isolar o projeto em um ambiente virtual e fixar as versões exatas das bibliotecas.
  • Erros de Leitura de Arquivos: Caminhos inválidos, permisões insuficientes ou arquivos com codificação incorreta impedem o carregamento. Valide a integridade dos arquivos e as permissões do diretório de entrada antes de executar o pipeline.

Tags: LlamaIndex RAG HuggingFace IngestionPipeline DocumentStore

Publicado em 6-17 05:52