Sistema de comparação de documentos usando RAG
Um sistema baseado em Retrieval Augmented Generation (RAG) para realizar comparações contextuais entre dois documentos. Este sistema usa Azure OpenAI para processamento e incorporação de linguagem, ChromaDB para armazenamento de vetores, FastAPI para back-end e Streamlit para interface do usuário.
Características
- Carregue e processe vários formatos de documentos (PDF, DOCX, TXT)
- Comparação de documentos baseada em RAG com pesquisa semântica
- Interface web interativa com visualização de comparação lado a lado
- Consultas de comparação personalizadas
- Resultados de comparação para download
- Agrupamento e processamento eficiente de documentos
- Armazenamento de vetores com ChromaDB
- Back-end da API REST com FastAPI
Pré-requisitos
- Python 3.8+
- Acesso à API OpenAI do Azure
- Espaço de armazenamento suficiente para o banco de dados vetorial
Instalação
- Clone o repositório:
git clone < repository-url >
cd document-comparison-system
- Instale os pacotes necessários:
pip install -r requirements.txt
- Crie um arquivo
.env
na raiz do projeto com suas credenciais do Azure OpenAI:
AZURE_OPENAI_API_KEY=your_api_key
AZURE_OPENAI_ENDPOINT=your_endpoint
AZURE_DEPLOYMENT_NAME=your_deployment_name
AZURE_EMBEDDINGS_DEPLOYMENT_NAME=your_embeddings_deployment_name
Estrutura do Projeto
project_root/
├── app.py # Streamlit frontend
├── backend.py # FastAPI backend
├── processor.py # Document processing and RAG logic
├── config.py # Configuration settings
└── requirements.txt # Project dependencies
Executando o aplicativo
- Inicie o servidor back-end:
- Em um novo terminal, inicie o frontend Streamlit:
- Abra seu navegador e navegue até
http://localhost:8501
para acessar o aplicativo.
Uso
Carregar documentos:
- Use os widgets de upload de arquivo para fazer upload de dois documentos para comparação
- Formatos suportados: PDF, DOCX, TXT
- Aguarde a confirmação do processamento
Comparar documentos:
- Depois que ambos os documentos forem carregados, você pode iniciar a comparação
- Opcionalmente, insira uma consulta de comparação personalizada
- Clique em “Comparar Documentos” para gerar a análise
Ver resultados:
- Os resultados da comparação são exibidos em três guias:
- Comparação: análise geral
- Trechos do Documento 1: Segmentos relevantes do primeiro documento
- Trechos do Documento 2: Segmentos relevantes do segundo documento
- Baixe os resultados completos como um arquivo JSON
Reiniciar:
- Use o botão "Redefinir" para limpar a sessão atual e recomeçar
Terminais de API
O backend FastAPI fornece os seguintes endpoints:
POSTAR/carregar
Carregue e processe um único documento.
- Solicitação: dados de formulário multiparte com arquivo
- Resposta: ID do documento e mensagem de sucesso
POSTAR/comparar
Compare dois documentos.
- Parâmetros:
- doc1_id: ID do primeiro documento
- doc2_id: ID do segundo documento
- consulta: consulta de comparação personalizada opcional
- Resposta: Resultados de comparação incluindo análise e trechos relevantes
Configuração
Principais definições de configuração em config.py
:
-
CHUNK_SIZE
: Tamanho dos pedaços do documento (padrão: 1000) -
CHUNK_OVERLAP
: Sobreposição entre pedaços (padrão: 200) -
SUPPORTED_FILES
: lista de tipos de arquivos suportados -
CHROMA_PERSIST_DIRECTORY
: Local para armazenamento do banco de dados vetorial
Detalhes técnicos
Processamento de Documentos
- Os documentos são divididos em partes usando RecursiveCharacterTextSplitter
- O texto é pré-processado para remover caracteres especiais e normalizar espaços em branco
- Cada pedaço é incorporado usando incorporações do Azure OpenAI
- Os pedaços são armazenados no ChromaDB com metadados de documentos
Implementação RAG
- Usa pesquisa por similaridade para encontrar partes relevantes de ambos os documentos
- Implementa pesquisa híbrida por meio dos recursos de pesquisa do ChromaDB
- Prompts personalizados para gerar análises comparativas
- Parâmetros de recuperação configuráveis
Armazenamento de vetores
- ChromaDB é usado para armazenamento e recuperação eficiente de vetores
- O armazenamento persistente permite o armazenamento em cache de documentos processados
- Filtragem de metadados para pesquisas específicas de documentos
Tratamento de erros
O sistema inclui tratamento de erros abrangente para:
- Tipos de arquivos não suportados
- Falhas de processamento
- Erros de comunicação da API
- IDs de documentos inválidos
Melhorias Futuras
Potenciais melhorias:
- Suporte para mais formatos de arquivo
- Algoritmos avançados de reclassificação
- Comparação de documentos multimodais
- Autenticação de usuário
- Histórico de comparação
- Estratégias de chunking mais sofisticadas
- Mecanismos avançados de cache
Contribuindo
Contribuições são bem-vindas! Sinta-se à vontade para enviar solicitações pull.
Licença
Este projeto está licenciado sob a licença MIT - consulte o arquivo LICENSE para obter detalhes.