Комплексный инструментарий для оценки систем Retrieval-Augmented Generation (RAG) с использованием синтетической генерации вопросов-ответов и LLM-as-a-judge оценки.
Этот пакет предоставляет полный pipeline для оценки качества RAG систем:
- Загрузка базы знаний - Поддержка DOCX файлов и HuggingFace датасетов
- Генерация синтетических QA пар - Использование LLM для создания вопросов и ответов
- Оценка качества QA пар - Три агента критики: groundedness, relevance, standalone
- Построение векторного индекса - FAISS с различными embedding моделями
- RAG система - Полный pipeline поиска и генерации ответов
- Оценка качества ответов - LLM-as-a-judge с детальной обратной связью
- Python 3.8+
- CUDA (опционально, для GPU ускорения)
# Клонирование репозитория
git clone <repository-url>
cd rag
# Установка зависимостей
pip install -r requirements.txt
# Установка пакета в режиме разработки
pip install -e .# Запуск полного pipeline оценки
rag-eval run --kb-docx tk_rf.docx --n-gen 20 --chunk-size 2000# Шаг 1: Загрузка и обработка документов
rag-eval load-data --kb-docx tk_rf.docx --chunk-size 2000
# Шаг 2: Генерация QA пар
rag-eval generate-qa --documents ./data/processed_docs_chunk2000.pkl --n-gen 20
# Шаг 3: Оценка QA пар
rag-eval critique --qa-file generated_questions.csv
# Шаг 4: Построение векторного индекса
rag-eval build-index --documents ./data/processed_docs_chunk2000.pkl --chunk-size 2000
# Шаг 5: RAG оценка
rag-eval evaluate-rag --documents ./data/processed_docs_chunk2000.pkl --qa-eval-file generated_questions_with_eval.csv
# Шаг 6: Оценка ответов
rag-eval evaluate-answers --rag-results ./output/rag_results_chunk2000.jsonexport OPENAI_API_KEY="your-openai-api-key"
export HUGGINGFACE_API_KEY="your-huggingface-api-key"Создайте config.yaml:
# API конфигурация
api_base: "https://your-api-endpoint.com/v1"
api_key: "your-api-key"
# Модели
qa_generator:
name: "qwen3:32b"
temperature: 0.1
reader:
name: "zephyr-7b-beta"
temperature: 0.1
judge:
model: "gpt-4-1106-preview"
temperature: 0.0
# RAG параметры
rag:
num_retrieved_docs: 30
num_docs_final: 7
use_reranking: false
# Оценка
evaluation:
min_groundedness_score: 4
min_relevance_score: 4
min_standalone_score: 4# Справка
rag-eval --help
# Загрузка данных
rag-eval load-data --help
# Генерация QA пар
rag-eval generate-qa --help
# Оценка QA пар
rag-eval critique --help
# Построение индекса
rag-eval build-index --help
# RAG оценка
rag-eval evaluate-rag --help
# Оценка ответов
rag-eval evaluate-answers --help
# Полный pipeline
rag-eval run --help# Оценка с пользовательскими параметрами
rag-eval run \
--kb-docx documents.docx \
--n-gen 50 \
--chunk-size 1500 \
--output-dir ./results
# Использование конфигурационного файла
rag-eval run \
--config config.yaml \
--kb-docx documents.docx \
--verbose
# Генерация большого количества QA пар
rag-eval generate-qa \
--documents processed_docs.pkl \
--n-gen 100 \
--output-file large_qa_dataset.csvrag/
├── rag_eval/
│ ├── __init__.py
│ ├── cli.py # CLI интерфейс
│ ├── config.py # Конфигурация
│ ├── data_loader.py # Загрузка данных
│ ├── qa_generator.py # Генерация QA пар
│ ├── critique_agents.py # Агенты критики
│ ├── vector_store.py # Векторное хранилище
│ ├── rag_system.py # RAG система
│ ├── evaluator.py # Оценка ответов
│ └── utils.py # Утилиты
├── requirements.txt
├── setup.py
└── README.md
generated_questions.csv- Сгенерированные QA парыgenerated_questions_with_eval.csv- QA пары с оценками
rag_results_chunk{size}.json- Результаты RAG тестовrag_results_chunk{size}_evaluated.json- Результаты с оценками
./data/indexes/- FAISS индексы для различных конфигураций
- Groundedness (1-5): Можно ли ответить на вопрос из контекста
- Relevance (1-5): Полезен ли вопрос для пользователей
- Standalone (1-5): Понятен ли вопрос без контекста
- Answer Correctness (1-5): Точность и правильность ответов
- Retrieval Coverage: Процент вопросов с найденными документами
- Average Document Length: Средняя длина найденных документов
Отредактируйте промпты в rag_eval/config.py:
QA_GENERATION_PROMPT = """
Ваш промпт для генерации QA пар...
"""
RELEVANCE_PROMPT = """
Ваш промпт для оценки релевантности...
"""# В config.py
DEFAULT_EMBEDDINGS = EmbeddingConfig(
model_name="your-embedding-model",
device="cuda"
)# В config.py
DEFAULT_QA_GENERATOR = ModelConfig(
name="your-model",
api_base="your-api-endpoint",
api_key="your-api-key"
)- CPU: Минимум 8 ядер для обработки документов
- RAM: 16GB+ для больших баз знаний
- GPU: CUDA-совместимая карта для embedding моделей
- Storage: SSD для быстрого доступа к индексам
# Использование CPU для embedding
rag-eval build-index --device cpu
# Уменьшение размера чанков
rag-eval run --chunk-size 1000
# Пакетная обработка
rag-eval generate-qa --n-gen 10 # Начните с малого количества-
Ошибки API
# Проверьте API ключи export OPENAI_API_KEY="your-key" export HUGGINGFACE_API_KEY="your-key"
-
Нехватка памяти
# Уменьшите размер чанков rag-eval run --chunk-size 1000 -
Медленная работа
# Используйте GPU rag-eval build-index --device cuda
# Включите подробное логирование
rag-eval run --verbose --log-file rag_eval.log
# Просмотр логов
tail -f rag_eval.log- Форкните репозиторий
- Создайте ветку для новой функции
- Внесите изменения
- Добавьте тесты
- Отправьте pull request
MIT License
Для вопросов и проблем создавайте issues в репозитории.