A newer version of the Gradio SDK is available:
6.6.0
Редагування промптів - Документація
Огляд
Додано можливість редагування промптів з повною ізоляцією сесій для безпечної роботи на хмарних серверах (наприклад, 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)
Потік даних
Завантаження додатку
- Генерується session_id (UUID4)
- Створюється нова сесія в SessionManager
- Завантажуються промпти (кастомні або стандартні)
Редагування промптів
- Користувач змінює текст у полях редагування
- Натискає "💾 Зберегти промпти"
- Промпти зберігаються в
session.custom_prompts - SessionManager оновлює сесію в storage
Генерація правової позиції
- Отримує session_id з Gradio State
- Завантажує сесію з SessionManager
- Витягує кастомні промпти через
session.get_prompt() - Передає промпти в
generate_legal_position() - LLM використовує кастомні промпти
- Результат зберігається в сесію
Закінчення сесії
- Автоматична очистка після 30 хв неактивності
- Background task в SessionManager видаляє застарілі сесії
Налаштування
config/environments/default.yaml
session:
timeout_minutes: 30 # Таймаут сесії
cleanup_interval_minutes: 5 # Інтервал очистки
max_sessions: 1000 # Максимум активних сесій
storage_type: "memory" # "memory" або "redis"
Для production (Redis)
session:
storage_type: "redis"
redis:
host: "localhost"
port: 6379
db: 0
password: null
Безпека
Ізоляція користувачів
✅ Гарантовано:
- Кожен користувач має унікальний session_id
- Дані зберігаються окремо для кожної сесії
- Неможливо отримати доступ до даних іншого користувача
Валідація промптів
✅ Захист:
- Обмеження довжини промптів (50,000 символів)
- Очистка застарілих сесій (захист від витоку пам'яті)
- Логування всіх операцій з сесіями
Відсутність персистентності промптів
⚠️ Важливо:
- Кастомні промпти зберігаються тільки на час сесії
- Після таймауту (30 хв) промпти скидаються
- Для збереження промптів назавжди - потрібно додати функціонал експорту/імпорту
Приклади використання
Зміна тону відповідей
Стандартний системний промпт:
Ти - кваліфікований юрист-аналітик, експерт з правових позицій Верховного Суду.
Кастомний (більш формальний):
Ви - висококваліфікований експерт-правознавець з міжнародним досвідом аналізу
судової практики Верховного Суду України. Дотримуйтесь найвищих стандартів
юридичної точності та академічної строгості.
Додавання інструкцій для конкретного типу справ
Стандартний промпт генерації:
Дотримуйся цих інструкцій...
Кастомний (для цивільних справ):
Дотримуйся цих інструкцій.
ДОДАТКОВІ ВИМОГИ ДЛЯ ЦИВІЛЬНИХ СПРАВ:
1. Обов'язково виділяй позиції щодо процесуальних питань
2. Зазначай застосовані норми ЦПК України
3. Вказуй склад суду та рівень юрисдикції
...
Тестування
Перевірка ізоляції сесій
- Відкрийте додаток у двох різних браузерах/вкладках
- У першій вкладці: змініть системний промпт на "Тест 1"
- У другій вкладці: змініть системний промпт на "Тест 2"
- Збережіть в обох вкладках
- Згенеруйте правову позицію в обох вкладках
- ✅ Кожна вкладка повинна використовувати свій промпт
Перевірка persistance
- Змініть та збережіть промпти
- Згенеруйте правову позицію (перевірте, що використовуються кастомні промпти)
- Зачекайте 31 хвилину (або змініть timeout в конфігурації)
- ✅ Сесія має бути очищена, промпти скинуті до стандартних
Подальший розвиток
Планується додати:
Експорт/імпорт промптів
- Збереження у JSON/YAML файли
- Завантаження збережених наборів промптів
Бібліотека шаблонів
- Готові набори промптів для різних типів справ
- Спільнота користувачів може ділитися промптами
Версіонування промптів
- Історія змін промптів
- Можливість відкоту до попередніх версій
A/B тестування
- Порівняння результатів з різними промптами
- Метрики якості генерації
Адміністративна панель
- Глобальні промпти для всіх користувачів
- Статистика використання різних промптів
Troubleshooting
Промпти не зберігаються
Проблема: Після збереження промптів вони не застосовуються
Рішення:
- Перевірте console в браузері на помилки JavaScript
- Перевірте логи додатку на помилки Session Manager
- Переконайтесь, що session_id правильно передається між функціями
Промпти скидаються занадто швидко
Проблема: Сесія закривається раніше 30 хвилин
Рішення:
- Перевірте
config/environments/default.yaml->session.timeout_minutes - Збільште значення таймауту
- Перезапустіть додаток
Помилки при використанні кастомних промптів
Проблема: LLM повертає помилку або неправильний формат
Рішення:
- Переконайтесь, що промпт містить необхідні плейсхолдери:
{court_decision_text}і{comment}для генерації{query},{question},{context_str}для аналізу
- Перевірте довжину промпту (не більше 50,000 символів)
- Скиньте промпти до стандартних і перевірте, чи працює базовий функціонал
Технічні деталі
UserSessionState.custom_prompts
custom_prompts: Dict[str, str] = {
'system': str, # Системний промпт
'legal_position': str, # Промпт генерації
'analysis': str # Промпт аналізу
}
Методи роботи з промптами
# Отримання промпту (з fallback)
prompt = session.get_prompt('system', DEFAULT_SYSTEM_PROMPT)
# Встановлення промпту
session.set_prompt('system', new_prompt)
# Скидання всіх промптів
session.reset_prompts()
Інтеграція з генерацією
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 та інших платформах.