LP_2-test / docs /PROMPT_EDITING.md
DocUA's picture
Clean deployment without large index files
461adca

A newer version of the Gradio SDK is available: 6.6.0

Upgrade

Редагування промптів - Документація

Огляд

Додано можливість редагування промптів з повною ізоляцією сесій для безпечної роботи на хмарних серверах (наприклад, 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

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. У першій вкладці: змініть системний промпт на "Тест 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

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 та інших платформах.