File size: 13,042 Bytes
461adca | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 | # Редагування промптів - Документація
## Огляд
Додано можливість редагування промптів з повною ізоляцією сесій для безпечної роботи на хмарних серверах (наприклад, 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 та інших платформах.
|