Sistema de comparación de documentos mediante RAG
Un sistema basado en recuperación de generación aumentada (RAG) para realizar comparaciones contextuales entre dos documentos. Este sistema utiliza Azure OpenAI para el procesamiento e incrustaciones de lenguaje, ChromaDB para el almacenamiento vectorial, FastAPI para el backend y Streamlit para la interfaz de usuario.
Características
- Cargue y procese múltiples formatos de documentos (PDF, DOCX, TXT)
- Comparación de documentos basada en RAG con búsqueda semántica
- Interfaz web interactiva con vista comparativa en paralelo
- Consultas de comparación personalizadas
- Resultados de comparación descargables
- Fragmentación y procesamiento eficiente de documentos
- Almacenamiento de vectores con ChromaDB
- Backend API REST con FastAPI
Requisitos previos
- Pitón 3.8+
- Acceso a la API de Azure OpenAI
- Espacio de almacenamiento suficiente para la base de datos vectorial
Instalación
- Clonar el repositorio:
git clone < repository-url >
cd document-comparison-system
- Instale los paquetes necesarios:
pip install -r requirements.txt
- Cree un archivo
.env
en la raíz del proyecto con sus credenciales de 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
Estructura del proyecto
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
Ejecutando la aplicación
- Inicie el servidor backend:
- En una nueva terminal, inicie la interfaz Streamlit:
- Abra su navegador y navegue hasta
http://localhost:8501
para acceder a la aplicación.
Uso
Subir documentos:
- Utilice los widgets de carga de archivos para cargar dos documentos y compararlos
- Formatos soportados: PDF, DOCX, TXT
- Espere la confirmación del procesamiento.
Comparar documentos:
- Una vez cargados ambos documentos, podrás iniciar la comparación.
- Opcionalmente, ingrese una consulta de comparación personalizada
- Haga clic en "Comparar documentos" para generar el análisis.
Ver resultados:
- Los resultados de la comparación se muestran en tres pestañas:
- Comparación: análisis general
- Extractos del documento 1: segmentos relevantes del primer documento
- Extractos del documento 2: segmentos relevantes del segundo documento
- Descargue los resultados completos como un archivo JSON
Reiniciar:
- Utilice el botón "Restablecer" para borrar la sesión actual y comenzar de nuevo
Puntos finales API
El backend de FastAPI proporciona los siguientes puntos finales:
PUBLICAR/subir
Sube y procesa un solo documento.
- Solicitud: datos de formulario de varias partes con archivo
- Respuesta: ID del documento y mensaje de éxito
ENVIAR /comparar
Compara dos documentos.
- Parámetros:
- doc1_id: ID del primer documento
- doc2_id: ID del segundo documento
- consulta: consulta de comparación personalizada opcional
- Respuesta: Resultados de la comparación, incluidos análisis y extractos relevantes.
Configuración
Ajustes de configuración clave en config.py
:
-
CHUNK_SIZE
: Tamaño de los fragmentos del documento (predeterminado: 1000) -
CHUNK_OVERLAP
: superposición entre fragmentos (predeterminado: 200) -
SUPPORTED_FILES
: Lista de tipos de archivos admitidos -
CHROMA_PERSIST_DIRECTORY
: Ubicación para el almacenamiento de bases de datos vectoriales
Detalles técnicos
Procesamiento de documentos
- Los documentos se dividen en fragmentos usando RecursiveCharacterTextSplitter
- El texto se procesa previamente para eliminar caracteres especiales y normalizar los espacios en blanco.
- Cada fragmento se integra mediante incorporaciones de Azure OpenAI
- Los fragmentos se almacenan en ChromaDB con metadatos del documento.
Implementación del GAR
- Utiliza la búsqueda por similitud para encontrar fragmentos relevantes de ambos documentos.
- Implementa la búsqueda híbrida a través de las capacidades de búsqueda de ChromaDB.
- Mensajes personalizados para generar análisis comparativos
- Parámetros de recuperación configurables
Almacenamiento de vectores
- ChromaDB se utiliza para el almacenamiento y la recuperación de vectores eficientes
- El almacenamiento persistente permite el almacenamiento en caché de los documentos procesados
- Filtrado de metadatos para búsquedas específicas de documentos
Manejo de errores
El sistema incluye un manejo integral de errores para:
- Tipos de archivos no compatibles
- Fallos de procesamiento
- Errores de comunicación API
- ID de documentos no válidos
Mejoras futuras
Mejoras potenciales:
- Soporte para más formatos de archivo
- Algoritmos avanzados de reclasificación
- Comparación de documentos multimodales
- Autenticación de usuario
- Historial de comparación
- Estrategias de fragmentación más sofisticadas
- Mecanismos de almacenamiento en caché avanzados
Contribuyendo
¡Las contribuciones son bienvenidas! No dude en enviar solicitudes de extracción.
Licencia
Este proyecto tiene la licencia MIT; consulte el archivo de LICENCIA para obtener más detalles.