# Редагування промптів - Документація ## Огляд Додано можливість редагування промптів з повною ізоляцією сесій для безпечної роботи на хмарних серверах (наприклад, Hugging Face Spaces). ## Основні можливості ### 1. Ізоляція сесій користувачів Кожен користувач отримує унікальний session ID при відкритті додатку: - Session ID генерується автоматично при завантаженні інтерфейсу - Всі дані користувача (правові позиції, результати пошуку, налаштування промптів) зберігаються в ізольованій сесії - Сесії автоматично видаляються після 30 хвилин неактивності (налаштовується в config) ### 2. Редагування промптів У вкладці "⚙️ Налаштування" користувачі можуть редагувати три типи промптів: #### 📋 Системний промпт Визначає роль та базові інструкції для AI. - За замовчуванням: "Ти - кваліфікований юрист-аналітик..." - Впливає на всі операції з AI #### ⚖️ Промпт генерації правової позиції Шаблон для генерації правової позиції з судового рішення. - Містить плейсхолдери: `{court_decision_text}` та `{comment}` - Впливає на формат та зміст згенерованих правових позицій #### 🔍 Промпт аналізу прецедентів Шаблон для порівняльного аналізу правових позицій. - Містить плейсхолдери: `{query}`, `{question}`, `{context_str}` - Впливає на аналіз релевантності знайдених позицій ### 3. Операції з промптами #### 💾 Зберегти промпти - Зберігає всі три промпти в сесію користувача - Валідація: максимум 50,000 символів на промпт - Повідомлення про успішне збереження #### 🔄 Скинути до стандартних - Відновлює всі промпти до початкових значень - Оновлює відображення в полях редагування ## Архітектура ### Компоненти ``` src/session/ ├── state.py - UserSessionState з полем custom_prompts ├── manager.py - SessionManager для управління сесіями └── storage.py - Зберігання (Memory/Redis) interface.py - UI з вкладкою "Налаштування" + інтеграція з сесіями main.py - generate_legal_position() приймає кастомні промпти prompts.py - Стандартні промпти (fallback) ``` ### Потік даних 1. **Завантаження додатку** - Генерується session_id (UUID4) - Створюється нова сесія в SessionManager - Завантажуються промпти (кастомні або стандартні) 2. **Редагування промптів** - Користувач змінює текст у полях редагування - Натискає "💾 Зберегти промпти" - Промпти зберігаються в `session.custom_prompts` - SessionManager оновлює сесію в storage 3. **Генерація правової позиції** - Отримує session_id з Gradio State - Завантажує сесію з SessionManager - Витягує кастомні промпти через `session.get_prompt()` - Передає промпти в `generate_legal_position()` - LLM використовує кастомні промпти - Результат зберігається в сесію 4. **Закінчення сесії** - Автоматична очистка після 30 хв неактивності - Background task в SessionManager видаляє застарілі сесії ## Налаштування ### config/environments/default.yaml ```yaml session: timeout_minutes: 30 # Таймаут сесії cleanup_interval_minutes: 5 # Інтервал очистки max_sessions: 1000 # Максимум активних сесій storage_type: "memory" # "memory" або "redis" ``` ### Для production (Redis) ```yaml session: storage_type: "redis" redis: host: "localhost" port: 6379 db: 0 password: null ``` ## Безпека ### Ізоляція користувачів ✅ **Гарантовано:** - Кожен користувач має унікальний session_id - Дані зберігаються окремо для кожної сесії - Неможливо отримати доступ до даних іншого користувача ### Валідація промптів ✅ **Захист:** - Обмеження довжини промптів (50,000 символів) - Очистка застарілих сесій (захист від витоку пам'яті) - Логування всіх операцій з сесіями ### Відсутність персистентності промптів ⚠️ **Важливо:** - Кастомні промпти зберігаються тільки на час сесії - Після таймауту (30 хв) промпти скидаються - Для збереження промптів назавжди - потрібно додати функціонал експорту/імпорту ## Приклади використання ### Зміна тону відповідей **Стандартний системний промпт:** ``` Ти - кваліфікований юрист-аналітик, експерт з правових позицій Верховного Суду. ``` **Кастомний (більш формальний):** ``` Ви - висококваліфікований експерт-правознавець з міжнародним досвідом аналізу судової практики Верховного Суду України. Дотримуйтесь найвищих стандартів юридичної точності та академічної строгості. ``` ### Додавання інструкцій для конкретного типу справ **Стандартний промпт генерації:** ``` Дотримуйся цих інструкцій... ``` **Кастомний (для цивільних справ):** ``` Дотримуйся цих інструкцій. ДОДАТКОВІ ВИМОГИ ДЛЯ ЦИВІЛЬНИХ СПРАВ: 1. Обов'язково виділяй позиції щодо процесуальних питань 2. Зазначай застосовані норми ЦПК України 3. Вказуй склад суду та рівень юрисдикції ... ``` ## Тестування ### Перевірка ізоляції сесій 1. Відкрийте додаток у двох різних браузерах/вкладках 2. У першій вкладці: змініть системний промпт на "Тест 1" 3. У другій вкладці: змініть системний промпт на "Тест 2" 4. Збережіть в обох вкладках 5. Згенеруйте правову позицію в обох вкладках 6. ✅ Кожна вкладка повинна використовувати свій промпт ### Перевірка persistance 1. Змініть та збережіть промпти 2. Згенеруйте правову позицію (перевірте, що використовуються кастомні промпти) 3. Зачекайте 31 хвилину (або змініть timeout в конфігурації) 4. ✅ Сесія має бути очищена, промпти скинуті до стандартних ## Подальший розвиток ### Планується додати: 1. **Експорт/імпорт промптів** - Збереження у JSON/YAML файли - Завантаження збережених наборів промптів 2. **Бібліотека шаблонів** - Готові набори промптів для різних типів справ - Спільнота користувачів може ділитися промптами 3. **Версіонування промптів** - Історія змін промптів - Можливість відкоту до попередніх версій 4. **A/B тестування** - Порівняння результатів з різними промптами - Метрики якості генерації 5. **Адміністративна панель** - Глобальні промпти для всіх користувачів - Статистика використання різних промптів ## Troubleshooting ### Промпти не зберігаються **Проблема:** Після збереження промптів вони не застосовуються **Рішення:** 1. Перевірте console в браузері на помилки JavaScript 2. Перевірте логи додатку на помилки Session Manager 3. Переконайтесь, що session_id правильно передається між функціями ### Промпти скидаються занадто швидко **Проблема:** Сесія закривається раніше 30 хвилин **Рішення:** 1. Перевірте `config/environments/default.yaml` -> `session.timeout_minutes` 2. Збільште значення таймауту 3. Перезапустіть додаток ### Помилки при використанні кастомних промптів **Проблема:** LLM повертає помилку або неправильний формат **Рішення:** 1. Переконайтесь, що промпт містить необхідні плейсхолдери: - `{court_decision_text}` і `{comment}` для генерації - `{query}`, `{question}`, `{context_str}` для аналізу 2. Перевірте довжину промпту (не більше 50,000 символів) 3. Скиньте промпти до стандартних і перевірте, чи працює базовий функціонал ## Технічні деталі ### UserSessionState.custom_prompts ```python custom_prompts: Dict[str, str] = { 'system': str, # Системний промпт 'legal_position': str, # Промпт генерації 'analysis': str # Промпт аналізу } ``` ### Методи роботи з промптами ```python # Отримання промпту (з fallback) prompt = session.get_prompt('system', DEFAULT_SYSTEM_PROMPT) # Встановлення промпту session.set_prompt('system', new_prompt) # Скидання всіх промптів session.reset_prompts() ``` ### Інтеграція з генерацією ```python def generate_legal_position( # ...існуючі параметри... custom_system_prompt: Optional[str] = None, custom_lp_prompt: Optional[str] = None ) -> Dict: # Використання кастомних або стандартних промптів system_prompt = custom_system_prompt or SYSTEM_PROMPT lp_prompt = custom_lp_prompt or LEGAL_POSITION_PROMPT # Генерація з кастомними промптами # ... ``` ## Підсумок Нова функціональність редагування промптів забезпечує: ✅ Повну ізоляцію між користувачами ✅ Безпечну роботу на хмарних серверах ✅ Гнучке налаштування AI під конкретні потреби ✅ Автоматичну очистку застарілих даних ✅ Простий та інтуїтивний інтерфейс Система готова до production використання на Hugging Face Spaces та інших платформах.