LP_2-test / docs /PROMPT_EDITING.md
DocUA's picture
Clean deployment without large index files
461adca
# Редагування промптів - Документація
## Огляд
Додано можливість редагування промптів з повною ізоляцією сесій для безпечної роботи на хмарних серверах (наприклад, 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 та інших платформах.