Система сравнения документов с использованием RAG
Система на основе поисковой дополненной генерации (RAG) для выполнения контекстных сравнений между двумя документами. Эта система использует Azure OpenAI для языковой обработки и внедрения, ChromaDB для векторного хранилища, FastAPI для серверной части и Streamlit для пользовательского интерфейса.
Функции
- Загружайте и обрабатывайте документы нескольких форматов (PDF, DOCX, TXT)
- Сравнение документов на основе RAG с семантическим поиском
- Интерактивный веб-интерфейс с возможностью параллельного сравнения
- Пользовательские запросы сравнения
- Результаты сравнения, доступные для скачивания
- Эффективное группирование и обработка документов
- Векторное хранилище с ChromaDB
- Серверная часть REST API с FastAPI
Предварительные условия
- Питон 3.8+
- Доступ к API Azure OpenAI
- Достаточно места для хранения векторной базы данных
Установка
- Клонируем репозиторий:
git clone < repository-url >
cd document-comparison-system
- Установите необходимые пакеты:
pip install -r requirements.txt
- Создайте файл
.env
в корне проекта, используя свои учетные данные 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
Структура проекта
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
Запуск приложения
- Запустите внутренний сервер:
- В новом терминале запустите интерфейс Streamlit:
- Откройте браузер и перейдите по адресу
http://localhost:8501
чтобы получить доступ к приложению.
Использование
Загрузить документы:
- Используйте виджеты загрузки файлов, чтобы загрузить два документа для сравнения.
- Поддерживаемые форматы: PDF, DOCX, TXT.
- Дождитесь подтверждения обработки
Сравнить документы:
- Как только оба документа будут загружены, вы можете начать сравнение.
- При необходимости введите собственный запрос сравнения.
- Нажмите «Сравнить документы», чтобы провести анализ.
Посмотреть результаты:
- Результаты сравнения отображаются в трех вкладках:
- Сравнение: общий анализ
- Выдержки из документа 1: соответствующие фрагменты из первого документа.
- Выдержки из документа 2: соответствующие фрагменты из второго документа.
- Загрузите полные результаты в виде файла JSON.
Перезагрузить:
- Используйте кнопку «Сброс», чтобы очистить текущий сеанс и начать заново.
Конечные точки API
Серверная часть FastAPI предоставляет следующие конечные точки:
ОТПРАВИТЬ/загрузить
Загрузите и обработайте один документ.
- Пожелание: данные составной формы с файлом
- Ответ: Идентификатор документа и сообщение об успехе.
ОТПРАВИТЬ/сравнить
Сравните два документа.
- Параметры:
- doc1_id: идентификатор первого документа.
- doc2_id: идентификатор второго документа.
- запрос: необязательный пользовательский запрос сравнения
- Ответ: Результаты сравнения, включая анализ и соответствующие выдержки.
Конфигурация
Ключевые параметры конфигурации в config.py
:
-
CHUNK_SIZE
: Размер фрагментов документа (по умолчанию: 1000). -
CHUNK_OVERLAP
: перекрытие между фрагментами (по умолчанию: 200). -
SUPPORTED_FILES
: список поддерживаемых типов файлов. -
CHROMA_PERSIST_DIRECTORY
: Место хранения векторной базы данных.
Технические детали
Обработка документов
- Документы разбиваются на части с помощью RecursiveCharacterTextSplitter.
- Текст предварительно обрабатывается для удаления специальных символов и нормализации пробелов.
- Каждый фрагмент внедряется с помощью внедрений Azure OpenAI.
- Чанки хранятся в ChromaDB вместе с метаданными документа.
Реализация RAG
- Использует поиск по сходству, чтобы найти соответствующие фрагменты из обоих документов.
- Реализует гибридный поиск с помощью поисковых возможностей ChromaDB.
- Пользовательские подсказки для проведения сравнительного анализа
- Настраиваемые параметры извлечения
Векторное хранилище
- ChromaDB используется для эффективного хранения и поиска векторных данных.
- Постоянное хранилище позволяет кэшировать обработанные документы.
- Фильтрация метаданных для поиска по конкретным документам
Обработка ошибок
Система включает комплексную обработку ошибок для:
- Неподдерживаемые типы файлов
- Сбои обработки
- Ошибки связи API
- Неверные идентификаторы документов
Будущие улучшения
Возможные улучшения:
- Поддержка большего количества форматов файлов
- Расширенные алгоритмы реранжирования
- Мультимодальное сравнение документов
- Аутентификация пользователя
- История сравнения
- Более сложные стратегии фрагментации
- Расширенные механизмы кэширования
Содействие
Вклады приветствуются! Пожалуйста, не стесняйтесь отправлять запросы на включение.
Лицензия
Этот проект лицензируется по лицензии MIT — подробности см. в файле LICENSE.