metadata
title: Rag
emoji: 🐠
colorFrom: purple
colorTo: red
sdk: gradio
sdk_version: 6.1.0
app_file: app.py
pinned: false
🇺🇦 Асистент із Законодавства України (RAG QA)
Ця система дозволяє користувачам отримувати відповіді на юридичні запитання, базуючись на актуальних кодексах та законах України за допомогою підходу Retrieval-Augmented Generation (RAG).
Основні функції
- Гібридний пошук: Поєднання BM25 (ключові слова) та SBERT (семантика) для максимального охоплення.
- Reranking: Використання Cross-Encoder моделі для високої точності.
- Цитування: Автоматичне посилання на статті кодексів у тексті відповіді.
- Фільтрація за метаданими: Можливість звузити пошук до конкретної галузі права (Кримінальне, Цивільне тощо).
- Інтелектуальні відповіді: Використання Llama 3.3 70B для генерації відповідей українською мовою.
Технічна архітектура
- Retriever:
- BM25: Лематизація (pymorphy3) та спелчекінг (SymSpell).
- Semantic Search: Модель
sentence-transformers/paraphrase-multilingual-mpnet-base-v2.
- Reranker: Модель
cross-encoder/ms-marco-TinyBERT-L-2-v2. - LLM:
llama-3.3-70b-versatileчерез API Groq (LiteLLM). - Metadata: Реалізовано пере-фільтрацію за полем
legal_area.
Порівняння методів пошуку
| Запит | Кращий метод | Чому саме він? |
|---|---|---|
| "Стаття 115 ККУ" | BM25 | Точний збіг за номером статті та назвою кодексу. |
| "права батьків після розлучення" | Semantic Search | Розуміє концепцію "сімейних прав", навіть якщо ці слова не зустрічаються буквально. |
Інсталяція та запуск
Встановлення залежностей:
pip install -r requirements.txtНалаштування середовища: Створіть файл
.envта додайте ваш ключ:GROQ_API_KEY=gsk_...Запуск:
python app.pyІнтерфейс буде доступний за адресою
http://localhost:7860.
Структура проєкту
├── app.py # Точка входу Gradio UI
├── config.py # Конфігурація та системні промпти
├── requirements.txt # Залежності
├── data/ # Дані (парсений JSON, ембедінги)
├── modules/
│ ├── rag_system.py # Оркестратор пайплайну
│ ├── retriever.py # Гібридний пошук з фільтрацією
│ ├── reranker.py # Cross-Encoder ранжування
│ └── llm_handler.py # Інтеграція з LLM (LiteLLM)
└── scripts/
└── parser.py # Парсер та передобробка документів
Виконав: Dmytro