Spaces:
Running
🏗️ Поточна архітектура Lifestyle Journey
🎯 Огляд системи
Lifestyle Journey - медичний чат-бот з lifestyle коучингом на базі Gemini API, що використовує розумну класифікацію повідомлень та м'який медичний тріаж.
🔧 Ключові компоненти
📋 Класифікатори
1. EntryClassifier - K/V/T формат
Призначення: Класифікує повідомлення пацієнта на початку взаємодії
Формат відповіді:
{
"K": "Lifestyle Mode",
"V": "on|off|hybrid",
"T": "2025-09-04T11:30:00Z"
}
Значення V:
- off - медичні скарги, симптоми, вітання → м'який медичний тріаж
- on - lifestyle питання → активація lifestyle режиму
- hybrid - містить і lifestyle теми, і медичні скарги → гібридний потік
2. TriageExitClassifier
Призначення: Після медичного тріажу оцінює готовність до lifestyle
Критерії для lifestyle:
- Медичні скарги стабілізовані
- Пацієнт готовий до lifestyle активностей
- Немає активних симптомів
3. LifestyleExitClassifier (deprecated)
Призначення: Контролює вихід з lifestyle режиму Статус: Замінено на MainLifestyleAssistant логіку
🤖 Асистенти
1. SoftMedicalTriage - М'який тріаж
Призначення: Делікатна перевірка стану пацієнта на початку взаємодії
Принципи:
- Дружній, не нав'язливий тон
- 1-2 коротких питання про самопочуття
- Швидка оцінка потреби в медичній допомозі
- Готовність перейти до lifestyle якщо все добре
2. MedicalAssistant - Повний медичний режим
Призначення: Медичні консультації з урахуванням хронічних станів
Функції:
- Безпечні рекомендації та тріаж
- Направлення до лікарів при red flags
- Урахування медичного анамнезу та медикаментів
3. MainLifestyleAssistant - Розумний lifestyle коуч
Призначення: Аналізує повідомлення і визначає найкращу дію для lifestyle сесії
3 типи дій:
{
"message": "відповідь пацієнту",
"action": "gather_info|lifestyle_dialog|close",
"reasoning": "пояснення вибору дії"
}
- gather_info - збір додаткової інформації про стан, уподобання
- lifestyle_dialog - lifestyle коучинг та рекомендації
- close - завершення lifestyle сесії (медичні скарги, прохання, довга сесія)
🔄 Менеджери
LifestyleSessionManager
Призначення: Управляє lifecycle lifestyle сесій та розумно оновлює профіль
Функції:
- Суммаризація сесії без розростання даних
- Контроль розміру
journey_summary
(максимум 800 символів) - Логування ключових моментів з датами
- Уникнення повторів інструкцій
🔄 Потік обробки повідомлень
1. Entry Classification
Повідомлення → EntryClassifier → K/V/T формат
├── V="off" → SoftMedicalTriage
├── V="on" → MainLifestyleAssistant
└── V="hybrid" → Гібридний потік
2. Гібридний потік
V="hybrid" → MedicalAssistant (тріаж)
→ TriageExitClassifier (оцінка готовності)
→ [lifestyle або medical режим]
3. Lifestyle режим
MainLifestyleAssistant → action
├── "gather_info" → збір інформації (продовжити lifestyle)
├── "lifestyle_dialog" → коучинг (продовжити lifestyle)
└── "close" → завершення → LifestyleSessionManager → medical режим
4. Оновлення профілю
Завершення lifestyle → LifestyleSessionManager
→ Аналіз сесії
→ Оновлення last_session_summary
→ Додавання до journey_summary
→ Контроль розміру даних
📊 Структура даних
SessionState
@dataclass
class SessionState:
current_mode: str # "medical" | "lifestyle" | "none"
is_active_session: bool
session_start_time: Optional[str]
last_controller_decision: Dict
lifestyle_session_length: int = 0 # Лічильник lifestyle повідомлень
last_triage_summary: str = "" # Результат медичного тріажу
entry_classification: Dict = None # K/V/T класифікація
Приклад оновлення профілю
{
"last_session_summary": "[04.09.2025] Обговорювали: питання про ходьбу; дієта з низьким вмістом солі",
"journey_summary": "...попередні записи... | 04.09.2025: 5 повідомлень"
}
🎯 Переваги поточної архітектури
1. K/V/T формат
- Простіший для розуміння ніж складні категорії
- Легше розширювати в майбутньому
- Консистентний timestamp для відстеження
2. М'який медичний тріаж
- Делікатніший підхід до пацієнтів
- Природні відповіді на вітання
- Не лякає одразу повним медичним режимом
3. Розумний lifestyle асистент
- Сам визначає коли збирати інформацію
- Сам вирішує коли давати поради
- Сам визначає коли завершувати сесію
- Менше API викликів
4. Контрольоване оновлення профілю
- Уникає розростання даних
- Зберігає тільки ключову інформацію
- Контролює розмір journey_summary
🧪 Тестування
Покриття тестами:
- ✅ Entry Classifier K/V/T: 8/8
- ✅ Main Lifestyle Assistant: 7/7
- ✅ Lifecycle потоки: 3/3
- ✅ Profile Update: працює
- ✅ Всього тестів: 31/31
Тестові сценарії:
# K/V/T класифікація
"У мене болить голова" → V="off"
"Хочу почати займатися спортом" → V="on"
"Хочу займатися спортом, але у мене болить спина" → V="hybrid"
"Привіт" → V="off" (м'який тріаж)
# Main Lifestyle дії
"Хочу почати займатися спортом" → action="gather_info"
"Дайте мені поради щодо харчування" → action="lifestyle_dialog"
"У мене болить спина" → action="close"
🚀 Деплой та використання
Файли системи:
├── app.py # Точка входу з create_app()
├── huggingface_space.py # HuggingFace Space entry point
├── lifestyle_app.py # Основна бізнес-логіка
├── core_classes.py # Класифікатори та асистенти
├── prompts.py # Промпти для Gemini API
├── gradio_interface.py # UI інтерфейс
├── requirements.txt # Залежності
└── README.md # Документація для HF Space
Змінні оточення:
GEMINI_API_KEY=your_api_key # Обов'язково
LOG_PROMPTS=true # Опціонально для debug
Запуск:
# Локально
python app.py
# HuggingFace Space
# Автоматично через huggingface_space.py
📈 Метрики та моніторинг
Автоматично відстежується:
- Кількість API викликів до Gemini
- Розподіл по режимах (medical/lifestyle)
- Тривалість lifestyle сесій
- Частота оновлень профілю
Логування (LOG_PROMPTS=true):
- Всі промпти до Gemini API з типом виклику
- Повні відповіді LLM з timestamps
- Класифікаційні рішення та обґрунтування
- Метрики продуктивності
🔮 Майбутні покращення
Короткострокові:
- Покращення розпізнавання прохань про завершення
- Додавання timeout для lifestyle сесій
- Оптимізація промптів на основі реальних тестів
Довгострокові:
- Додавання нових типів класифікації
- Інтеграція з медичними системами
- Персоналізація на основі історії взаємодій
- A/B тестування різних підходів
Система готова до продакшену з чистою архітектурою та розумною логікою! 🚀