LP_2-test / README.md
DocUA's picture
feat: Інтеграція GPT-5.2 з підтримкою reasoning
492b465
---
title: Legal Position AI Analyzer
emoji: ⚖️
colorFrom: blue
colorTo: indigo
sdk: gradio
sdk_version: "6.5.0"
app_file: app.py
pinned: false
license: mit
python_version: "3.11"
---
# ⚖️ AI Асистент для роботи з правовими позиціями Верховного Суду
Інтелектуальний інструмент для аналізу судових рішень та формування правових позицій Верховного Суду України з використанням AI.
## 🚀 Основні можливості
### 💡 Генерація правових позицій
- Автоматичне формування проектів правових позицій з тексту судових рішень
- Підтримка різних форматів вводу: текст, URL, файл (.txt)
- Можливість додавання коментарів для уточнення контексту
- Автоматична класифікація за типом судочинства та категорією
### 🔍 Пошук схожих позицій
- Інтелектуальний пошук релевантних правових позицій у базі даних
- Пошук на основі згенерованої позиції або вхідного тексту
- Гібридний підхід: векторний пошук + BM25
- Відображення результатів з посиланнями на джерела
### ⚖️ Порівняльний аналіз
- Детальний аналіз релевантності знайдених позицій
- Виявлення спільних правових аспектів
- Оцінка можливості застосування існуючих позицій
- Обґрунтовані висновки щодо необхідності створення нової позиції
### ⚙️ Редагування промптів
- Персональне налаштування промптів для AI
- Три типи промптів: системний, генерації, аналізу
- Повна ізоляція сесій між користувачами
- Безпечна робота на хмарних серверах
### 📊 **НОВЕ!** Пакетне тестування
- Масова генерація правових позицій з CSV файлів
- Підтримка всіх AI провайдерів
- Налаштування паузи між запитами (0-10 секунд)
- Збереження повних JSON результатів
- Прогрес-бар з відслідковуванням обробки
- Автоматичне збереження результатів з міткою часу
## 🎯 Підтримка AI провайдерів
### Для генерації:
- **OpenAI**: GPT-5.2 (NEW! з reasoning), GPT-4.1, GPT-4o, custom fine-tuned models
- **Anthropic**: Claude 4.5 Sonnet (з підтримкою Extended Thinking)
- **Google**: Gemini 3.0 Flash, 3.5 Flash (з підтримкою Thinking Mode)
- **DeepSeek**: DeepSeek Chat
### Для аналізу:
- **OpenAI**: GPT-5.2 (NEW! з reasoning), GPT-4.1, GPT-4o
- **Anthropic**: Claude 4.5 Sonnet
- **Google**: Gemini 3.0 Flash, 3.5 Flash
- **DeepSeek**: DeepSeek Chat
### 🆕 GPT-5.2 - Нова модель з reasoning!
- Покращене міркування для складних правових аналізів
- Контроль рівня reasoning: low/medium/high
- Налаштування деталізації відповідей
- Конфіденційність: опція не зберігати запити
📖 [Детальна документація GPT-5.2](GPT5_2_INTEGRATION.md) | [Швидкий старт](GPT5_2_QUICKSTART.md)
## 📋 Структура проекту
```
Legal_Position_2/
├── main.py # Головний файл додатку
├── interface.py # Gradio UI + інтеграція з сесіями
├── config.py # Конфігурація
├── prompts.py # Стандартні промпти
├── utils.py # Допоміжні функції
├── components.py # Компоненти пошуку
├── src/
│ └── session/ # Система управління сесіями
│ ├── state.py # UserSessionState з custom_prompts
│ ├── manager.py # SessionManager
│ └── storage.py # Зберігання (Memory/Redis)
├── config/
│ └── environments/
│ └── default.yaml # Налаштування
├── docs/
│ ├── PROMPT_EDITING.md # Повна документація з промптів
│ └── QUICK_START_PROMPTS.md # Швидкий старт
├── test_docs/ # Тестові дані
│ └── df_lp_part_cd_test_29_result.csv
├── test_results/ # Результати пакетного тестування
├── BATCH_TESTING_README.md # Документація пакетного тестування
├── HELP.md # Загальна допомога для користувачів
└── CHANGES.md # Детальний changelog
```
## 🛠️ Встановлення
### 1. Клонування репозиторію
```bash
git clone https://github.com/your-username/Legal_Position_2.git
cd Legal_Position_2
```
### 2. Встановлення залежностей
```bash
pip install -r requirements.txt
```
### 3. Налаштування змінних оточення
Створіть файл `.env` з необхідними API ключами:
```env
# AI Провайдери (хоча б один обов'язковий)
OPENAI_API_KEY=your_openai_key
ANTHROPIC_API_KEY=your_anthropic_key
GEMINI_API_KEY=your_gemini_key
DEEPSEEK_API_KEY=your_deepseek_key
# AWS S3 (опціонально, для зберігання даних)
AWS_ACCESS_KEY_ID=your_aws_key
AWS_SECRET_ACCESS_KEY=your_aws_secret
# Redis (опціонально, для production)
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=your_redis_password
```
### 4. Запуск додатку
```bash
python main.py
```
Додаток буде доступний за адресою: `http://localhost:7860`
## 📖 Використання
### Базовий workflow
1. **Генерація правової позиції**
- Відкрийте вкладку "💡 Генерація"
- Оберіть провайдер AI та модель
- Введіть текст судового рішення (або URL, або завантажте файл)
- Додайте коментар (опціонально)
- Натисніть "📝 Генерувати проект правової позиції"
2. **Пошук схожих позицій**
- Перейдіть до вкладки "🔍 Пошук"
- Оберіть тип пошуку:
- На основі згенерованої позиції
- На основі вхідного тексту
- Перегляньте результати з посиланнями
3. **Аналіз релевантності**
- Перейдіть до вкладки "⚖️ Аналіз"
- Додайте уточнююче питання (опціонально)
- Натисніть "⚖️ Аналіз результатів пошуку"
- Отримайте детальний аналіз кожної знайденої позиції
4. **Редагування промптів**
- Перейдіть до вкладки "⚙️ Налаштування"
- Відредагуйте один або кілька промптів:
- 📋 **Системний промпт** - роль AI
- ⚖️ **Промпт генерації** - шаблон для створення позицій
- 🔍 **Промпт аналізу** - шаблон для порівняння
- Натисніть "💾 Зберегти промпти"
- Повертайтесь до генерації - тепер використовуються ваші промпти!
**Важливо:** Промпти зберігаються тільки на час вашої сесії (30 хвилин без активності).
### 📊 Пакетне тестування
5. **Масова генерація правових позицій**
- Перейдіть до вкладки "📊 Пакетне тестування"
- Оберіть провайдер AI та модель
- Налаштуйте паузу між запитами (рекомендовано 1-2 сек)
- Завантажте CSV файл з колонкою `text`
- Натисніть "📂 Завантажити CSV файл" для перегляду
- Запустіть тестування кнопкою "▶️ Запустити пакетне тестування"
- Завантажте результати після завершення
**Формат результатів:** Повний JSON об'єкт з полями `title`, `text`, `proceeding`, `category`
Детальна інструкція: [BATCH_TESTING_README.md](BATCH_TESTING_README.md)
### 📖 Допомога
6. **Довідка по всьому функціоналу**
- Перейдіть до вкладки "📖 Допомога"
- Ознайомтесь з детальною документацією
- Швидкий доступ до всіх можливостей додатку
## 🎨 Приклади налаштувань
### Приклад 1: Формальний стиль
**Системний промпт:**
```
Ви - висококваліфікований експерт-правознавець з міжнародним досвідом.
Дотримуйтесь найвищих стандартів юридичної точності та академічної строгості.
```
### Приклад 2: Фокус на цивільних справах
**Промпт генерації:**
```
Дотримуйся цих інструкцій.
СПЕЦІАЛЬНІ ВИМОГИ ДЛЯ ЦИВІЛЬНИХ СПРАВ:
1. Виділяй позиції щодо процесуальних питань
2. Зазначай норми ЦПК України
3. Вказуй склад суду та рівень юрисдикції
<court_decision>
{court_decision_text}
</court_decision>
...
```
Більше прикладів: [docs/PROMPT_EDITING.md](docs/PROMPT_EDITING.md#приклади-використання)
## 🔒 Безпека та ізоляція сесій
### Гарантії безпеки
**Ізоляція користувачів**
- Кожен користувач має унікальний session ID (UUID4)
- Дані зберігаються окремо для кожної сесії
- Неможливо отримати доступ до даних іншого користувача
**Автоматична очистка**
- Сесії видаляються після 30 хвилин неактивності
- Background cleanup task запобігає витоку пам'яті
**Thread-safe операції**
- Використання `asyncio.Lock` для конкурентного доступу
- Безпечна робота на багатокористувацьких серверах
### Архітектура сесій
```
Користувач 1 → Session ID: abc123 → {
legal_position_json: {...}
search_nodes: [...]
custom_prompts: {
'system': '...',
'legal_position': '...',
'analysis': '...'
}
}
Користувач 2 → Session ID: def456 → {
// Повністю ізольовані дані
}
```
## ⚙️ Конфігурація
### config/environments/default.yaml
```yaml
# Налаштування сесій
session:
timeout_minutes: 30 # Таймаут сесії
cleanup_interval_minutes: 5 # Інтервал очистки
max_sessions: 1000 # Максимум активних сесій
storage_type: "memory" # "memory" або "redis"
# Налаштування пошуку
retriever:
similarity_top_k: 10 # Кількість результатів
bm25_top_k: 10
# Налаштування AI
llm:
context_window: 128000
chunk_size: 1024
```
### Production (Redis)
Для production використання рекомендується Redis:
```yaml
session:
storage_type: "redis"
redis:
host: "your-redis-host"
port: 6379
db: 0
password: "your-password"
```
## 🚀 Deployment
### Hugging Face Spaces
1. Створіть новий Space на [Hugging Face](https://huggingface.co/spaces)
2. Оберіть SDK: Gradio
3. Завантажте код
4. Додайте secrets (API ключі) в Settings
5. Space автоматично запуститься
### Docker
```bash
docker build -t legal-position-ai .
docker run -p 7860:7860 --env-file .env legal-position-ai
```
### Local Server
```bash
# Development
python main.py
# Production
gunicorn main:app --workers 4 --bind 0.0.0.0:7860
```
## 📊 Технічні характеристики
### Підтримувані формати
- **Вхід**: Текст, URL (reyestr.court.gov.ua), TXT файли
- **Вихід**: JSON (структурована правова позиція)
- **Кодування**: UTF-8, CP1251
### Обмеження
- Максимальна довжина промпту: 50,000 символів
- Максимальна довжина тексту рішення: залежить від моделі (до 128K токенів)
- Час сесії: 30 хвилин без активності
- Максимум активних сесій: 1000 (налаштовується)
### Продуктивність
- Генерація позиції: 10-30 секунд (залежить від моделі)
- Пошук: 1-3 секунди
- Аналіз: 15-45 секунд (залежить від кількості результатів)
## 📚 Документація
- **[HELP.md](HELP.md)** - Загальна допомога для користувачів (доступна в додатку)
- **[BATCH_TESTING_README.md](BATCH_TESTING_README.md)** - Документація пакетного тестування
- **[PROMPT_EDITING.md](docs/PROMPT_EDITING.md)** - Повна технічна документація з редагування промптів
- **[QUICK_START_PROMPTS.md](docs/QUICK_START_PROMPTS.md)** - Швидкий старт для користувачів
- **[CHANGES.md](CHANGES.md)** - Детальний changelog версії 2.0
## 🔧 Troubleshooting
### Промпти не зберігаються
**Проблема:** Після збереження промптів вони не застосовуються
**Рішення:**
1. Перевірте console браузера (F12) на помилки
2. Перевірте логи додатку
3. Переконайтесь, що session_id передається коректно
### Помилка при генерації
**Проблема:** LLM повертає помилку або неправильний формат
**Рішення:**
1. Перевірте наявність плейсхолдерів у промптах (`{court_decision_text}`, `{comment}`)
2. Спробуйте скинути промпти до стандартних
3. Перевірте API ключі
### Сесія закривається швидко
**Проблема:** Сесія закривається раніше 30 хвилин
**Рішення:**
1. Перевірте `config/environments/default.yaml` → `session.timeout_minutes`
2. Збільште значення таймауту
3. Перезапустіть додаток
## 🤝 Внесок
Ваші внески вітаються! Будь ласка:
1. Fork репозиторій
2. Створіть feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit зміни (`git commit -m 'Add some AmazingFeature'`)
4. Push в branch (`git push origin feature/AmazingFeature`)
5. Відкрийте Pull Request
## 📝 Ліцензія
Цей проект ліцензований під [MIT License](LICENSE).
## 👥 Автори
- Розробка core функціоналу: [Your Name]
- Інтеграція session management та prompt editing: Claude Code (AI Assistant)
- Архітектура: аналіз та адаптація існуючого коду
## 🙏 Подяки
- [OpenAI](https://openai.com/) за GPT моделі
- [Anthropic](https://www.anthropic.com/) за Claude моделі
- [Google](https://ai.google.dev/) за Gemini моделі
- [DeepSeek](https://www.deepseek.com/) за DeepSeek моделі
- [LlamaIndex](https://www.llamaindex.ai/) за фреймворк для RAG
- [Gradio](https://www.gradio.app/) за інтерфейс
## 📞 Контакти
- GitHub Issues: [Create an issue](https://github.com/your-username/Legal_Position_2/issues)
- Email: your-email@example.com
---
**Версія:** 2.1 (з підтримкою пакетного тестування)
**Останнє оновлення:** 2026-01-03
**Статус:** ✅ Production Ready