Стандартні застосунки для медитації — Calm, Headspace — пропонують фіксовані плейлисти. Вони ігнорують контекст користувача. Користувач із високим стресом і 5 хвилинами до зустрічі отримує 30-хвилинну візуалізацію. Результат — completion rate 35-45%. Ми розробили гібридну рекомендаційну систему на основі NLP та евристик. Вона аналізує стан користувача, історію сесій та доступний час, підбираючи практику, яку користувач дійсно виконає. Маючи досвід впровадження десятків AI-рішень, ми гарантуємо надійне рішення під ключ. Для холодного старту застосовуємо кластеризацію за embeddings 1536-dim.
Як AI персоналізує медитації?
Система враховує чотири параметри: настрій (mood), рівень стресу (stress), доступний час (available_minutes) та час доби. Додатково аналізується історія сесій: які типи практик користувач завершував. Якщо stress >= 4, обирається дихальна вправа — швидко знижує стрес; якщо mood <= 2 — body scan; вранці — energizing, ввечері — sleep preparation. Тривалість підрізається під доступний час: 3, 10 або до 20 хвилин. LLM генерує персоналізоване введення українською, пояснюючи, чому саме ця практика допоможе зараз. Ми використовуємо few-shot промпти для налаштування поведінки LLM, що знижує ймовірність галюцинацій.
from anthropic import Anthropic
import json
from datetime import datetime
def recommend_meditation_session(user_state: dict,
user_history: list[dict]) -> dict:
"""
Контекстна рекомендація медитації.
user_state: mood (1-5), stress_level (1-5), available_minutes, time_of_day
"""
llm = Anthropic()
# Аналіз історії: які практики користувач завершує
if user_history:
completed = [s for s in user_history if s.get('completed')]
preferred_types = {}
for session in completed:
t = session.get('type', 'breathing')
preferred_types[t] = preferred_types.get(t, 0) + 1
top_type = max(preferred_types, key=preferred_types.get) if preferred_types else 'breathing'
completion_rate = len(completed) / max(len(user_history), 1)
else:
top_type = 'breathing'
completion_rate = 0.5
# Правила вибору практики
mood = user_state.get('mood', 3)
stress = user_state.get('stress_level', 3)
available_min = user_state.get('available_minutes', 10)
time_of_day = user_state.get('time_of_day', 'afternoon')
if stress >= 4:
session_type = 'breathing' # Найшвидше знижує стрес
elif mood <= 2:
session_type = 'body_scan' # Для втоми
elif time_of_day == 'morning':
session_type = 'energizing'
elif time_of_day == 'evening':
session_type = 'sleep_preparation'
else:
session_type = top_type
# Тривалість за доступним часом
if available_min <= 5:
duration = 3
elif available_min <= 15:
duration = 10
else:
duration = min(available_min, 20)
# LLM для персоналізованого введення
response = llm.messages.create(
model="claude-3-5-sonnet",
max_tokens=150,
messages=[{
"role": "user",
"content": f"""Write a personalized intro for a meditation session in Russian.
User state: mood {mood}/5, stress {stress}/5, available time {available_min} min
Time of day: {time_of_day}
Session type: {session_type}, duration: {duration} min
Completion rate: {completion_rate:.0%}
Write 2-3 sentences:
1. Acknowledge their current state
2. Explain why this specific practice will help right now
Be warm, non-judgmental, concise."""
}]
)
return {
'session_type': session_type,
'duration_minutes': duration,
'personalized_intro': response.content[0].text,
'completion_prediction': min(0.95, completion_rate + 0.1) if session_type == top_type else completion_rate,
}
Технічні деталі: оптимізація продуктивності
Для зниження latency на мобільних пристроях використовується квантизація моделі до INT8. Це скорочує розмір моделі в 4 рази без суттєвої втрати якості. P99 latency підтримується на рівні нижче 200 мс.
Чому персоналізація підвищує completion rate в 1.5-2 рази?
Статичний плейлист дає 35-45% завершених сесій. AI-підбір підвищує до 60-75%. Ключовий фактор — коротка виконана сесія ефективніша за довгу, покинуту на півдорозі. Система не пропонує ідеальну практику, а підбирає реалістичну, що відповідає поточному контексту. Додатково LLM генерує введення, яке валідує стан користувача і пояснює вибір — це знижує когнітивне навантаження та збільшує залученість. За даними дослідження Headspace, контекстна персоналізація збільшує retention на 40%. Система стійка до галюцинацій завдяки постобробці та фільтрації.
Ключові проблеми, що вирішуються персоналізацією
Низький completion rate — основна біль. Статичні плейлисти дають близько 40% завершених сесій. Наша гібридна система піднімає цей показник до 75% за рахунок врахування контексту: користувач із високим стресом отримує дихальну практику, а не довгу візуалізацію. Відсутність адаптації також усувається — система запам'ятовує вподобання та коригує рекомендації з часом. Евристики медитації визначають базовий тип практики, а LLM адаптує контент під конкретного користувача.
Порівняння підходів до рекомендацій
| Критерій | Статичний плейлист | AI-персоналізація (гібрид) |
|---|---|---|
| Completion rate | 35-45% | 60-75% |
| Врахування часу | Ні | Так (доступний час) |
| Адаптація під стрес | Сегментовано | Індивідуально |
| Використання LLM | Ні | Генерація введення |
| Збір історії | Ні | Так (preferred_types) |
| Компонент | Технологія | Призначення |
|---|---|---|
| Евристичне ядро | Python, правила | Швидкий вибір типу сесії |
| LLM | Claude 3.5 Sonnet | Персоналізоване введення |
| Векторизація (опц.) | OpenAI embeddings 1536-dim | Кластеризація користувачів |
| API | FastAPI, Docker | Мікросервіс |
Як ми це робимо: гібридний пайплайн
Евристичне ядро працює без навчання — правила на основі порогів (stress >= 4 => breathing). LLM (Claude 3.5 Sonnet або GPT-4o) використовується лише для генерації персоналізованого тексту, fine-tuning не потрібен. Для врахування історії застосовується проста частотна модель preferred_types. За необхідності додаємо embeddings (1536-dim) для кластеризації користувачів — це покращує рекомендації для холодного старту. Всі компоненти контейнеризовані в Docker, latency p99 < 200 мс. Ми використовуємо сертифіковані API та забезпечуємо конфіденційність даних.
Процес роботи
- Аналітика та збір даних — визначаємо джерела: опитування, сенсори, історія сесій.
- Проєктування правил та ML-пайплайну — налаштування евристик, вибір LLM, опціональна векторизація.
- Реалізація мікросервісу — REST API на Python (FastAPI), інтеграція з Anthropic або OpenAI.
- Тестування — A/B-тест на контрольній групі (не менше 500 сесій), вимірювання completion rate та p99 latency.
- Деплой та моніторинг — контейнеризація в Docker, дашборд метрик: GPU utilization, розподіл сесій за типами.
Що входить в роботу (deliverables)
- Мікросервіс з REST API на Python (FastAPI), документація Swagger.
- Модуль евристик та інтеграція з LLM.
- Дашборд метрик: completion rate, p99 latency, розподіл сесій за типами.
- Docker-контейнер для деплою, інструкція з розгортання.
- Рекомендації щодо A/B-тестування та моніторингу.
- Навчання команди (2 години онлайн) та підтримка протягом 2 тижнів після запуску.
Строки та вартість
Строки: від 2 до 6 тижнів залежно від складності інтеграції. Вартість розраховується індивідуально — залежить від обсягу даних, кількості моделей та вимог до latency. Персоналізація окупається за рахунок підвищення retention та зниження відтоку користувачів: кожен додатковий відсоток completion rate збільшує LTV користувача на 2-3%. Зв'яжіться з нами для оцінки вашого проєкту. Отримайте консультацію — оцінимо ваш проєкт безкоштовно.







