Демонстрация гибридного подхода к выбору тренировок: комбинация правил на основе анкеты и интеллектуального выбора через ChatGPT для максимально точного подбора.
{
"pre_mood": "Нормально",
"pre_energy": "Средний",
"pre_sleep": "Нормально",
"pre_limits": "Нет"
} def suggest_block_by_state(mood, energy, sleep, limits, user_level):
# Плохое самочувствие → Блок 2
if limits in ("Лёгкое недомогание", "Плохо себя чувствую")
or sleep == "Очень плохо":
return 2
# Низкая энергия → Блок 1 или 2
if energy == "Низкий" or "Устав" in mood:
return 1 if user_level <= 2 else 2
# Высокая энергия → Блок 5 или 3
if energy == "Высокий" and mood == "Отлично":
return 5 if user_level >= 4 else 3
# Средняя энергия → Блок 3
if energy == "Средний":
return 3
# По умолчанию → Блок 2
return 2 Входные данные: mood = "Нормально" energy = "Средний" sleep = "Нормально" limits = "Нет" user_level = 3 Результат: Блок 3 (функциональные тренировки)
Рекомендованный блок: 1 Ограничения пользователя: "грыжа поясничного отдела" Результат проверки: ❌ Блок 1 не подходит Fallback: Блок 2 (мобильность - самый безопасный)
Ты помогаешь выбрать конкретную тренировку из блока 3 для пользователя.
ОПИСАНИЕ БЛОКА 3:
Функциональные тренировки на все тело с собственным весом
или небольшим отягощением. Разнообразные упражнения на баланс,
координацию, силу и стабилизацию.
ДАННЫЕ АНКЕТЫ ПОЛЬЗОВАТЕЛЯ:
- Настроение: Нормально
- Уровень энергии: Средний
- Качество сна: Нормально
- Ограничения/самочувствие: Нет
ИНФОРМАЦИЯ О ПОЛЬЗОВАТЕЛЕ:
- Уровень подготовки: 3/7
- Цели: улучшение осанки, укрепление корсета
- Ограничения/противопоказания: нет
ДОСТУПНЫЕ ТРЕНИРОВКИ В БЛОКЕ:
1. ID: 45, Название: Блок 3 Тренировка 1,
Длительность: 25 мин, Уровень: 3,
Зона: core, full_body, glutes, Инвентарь: не требуется
2. ID: 46, Название: Блок 3 Тренировка 2,
Длительность: 30 мин, Уровень: 3,
Зона: legs, core, balance, full_body, Инвентарь: не требуется
3. ID: 47, Название: Блок 3 Тренировка 3,
Длительность: 28 мин, Уровень: 3,
Зона: core, balance, full_body, mobility, Инвентарь: не требуется
ТВОЯ ЗАДАЧА:
Выбери ОДНУ наиболее подходящую тренировку на основе:
1. Состояния пользователя (настроение, энергия, сон, ограничения)
2. Уровня подготовки пользователя
3. Целей пользователя
4. Безопасности (учитывай ограничения)
Верни ответ ТОЛЬКО в формате JSON:
{"video_id": <число>, "video_title": "<точное название>"} {
"video_id": 47,
"video_title": "Блок 3 Тренировка 3"
} mood="Уставшая", energy="Низкий" suggest_block_by_state() → Блок 1✅ Блок 1 подходит get_videos_by_block(1) → 10 видео Уровень ±1 → 5 видео подходят recommend_video_from_block()video_id: 12"Блок 1 Тренировка 5 Нижние конечности (ролл)"# handlers/main_menu.py, функция pre_finish()
video = rec_service.get_recommended_video(
mood=mood,
energy=energy,
sleep=sleep,
limits=limits,
user_level=user.level,
user_goals=user.goals or "",
user_restrictions=user.restrictions or "",
video_service=video_service,
ai_service=ai_service
)
# Fallback на старый метод, если не удалось подобрать
if not video:
video = video_service.get_next_video_no_repeat(user.id, user.level)