Retrieve & Rerank RAG система с поддержкой различных стратегий поиска и ранжирования.
flowchart LR
Q[Запрос пользователя] --> E[Эмбеддинг запроса]
E --> R{Стратегия поиска}
R -->|similarity| S1[Similarity Search]
R -->|mmr| S2[MMR — релевантность + разнообразие]
R -->|hybrid| S3[Hybrid — взвешенная комбинация]
S1 --> RR[Rerank: скоринг кандидатов]
S2 --> RR
S3 --> RR
RR --> F[Фильтр по min_score]
F --> CTX[Топ-k чанков как контекст]
CTX --> LLM[LLM генерирует ответ]
Ключевая идея: документы из векторного поиска переоцениваются перед отправкой в LLM — в контекст попадает не «что нашлось», а «что действительно релевантно».
- Retrieve & Rerank: Повышает релевантность за счет оценки полученных документов перед отправкой в LLM
- Множественные стратегии поиска:
- Similarity Search: стандартный поиск по релевантности
- MMR (Maximum Marginal Relevance): поиск с учетом разнообразия результатов
- Hybrid Search: комбинированный поиск, использующий оба метода
- Настраиваемые параметры:
lambda_param: баланс между релевантностью и разнообразием в MMRsimilarity_weight: вес для результатов similarity поиска в hybrid режимеmin_score: минимальный порог релевантностиk: количество возвращаемых результатов
- Клонируйте репозиторий:
git clone https://github.com/DmitriiSednev/Retrieve-Rerank-RAG.git
cd Retrieve-Rerank-RAG- Создайте виртуальное окружение и активируйте его:
python -m venv .venv
.venv\Scripts\activate # для Windows
source .venv/bin/activate # для Linux/Mac- Установите зависимости:
pip install -r requirements.txt- Создайте файл
.envна основе.env.exampleи добавьте ваш API ключ:
OPENAI_API_KEY=your_api_key_here
from database import ChromaDatabase
# Инициализация базы данных
db = ChromaDatabase()
# Добавление документов
db.add_documents(documents)
# Поиск с разными стратегиями
# 1. Стандартный поиск
result = db.query("Ваш запрос", search_type="similarity")
# 2. MMR поиск
result = db.query("Ваш запрос", search_type="mmr", lambda_param=0.5)
# 3. Гибридный поиск
result = db.query(
"Ваш запрос",
search_type="hybrid",
lambda_param=0.5,
similarity_weight=0.7
)python -m pytest test_rag.py -vMIT