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.