--- 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_text} ... ``` Більше прикладів: [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