Кейсы CodeVibers / LikeXR Найти применение в бизнесе
Neuro Muzyka: генеративный продукт и пользовательский опыт
Neuro Muzyka — внутренний генеративный продукт CodeVibers, созданный для тестирования AI-музыкальных пайплайнов и пользовательского принятия. В кейсе — как мы вышли на MVP за 3 недели, где застряли и как это помогает нам сегодня предлагать клиентам AI-интеграции.
Что такое Neuro Muzyka?
Neuro Muzyka — это MVP-продукт, созданный в CodeVibers для внутреннего тестирования генеративного AI-музыкального стека. Он генерирует короткие (15–60 сек) фоновые треки по текстовому описанию (например, «лоу-фай хип-хоп, дождь за окном, 80 BPM») и позволяет пользователю оценить результат, сохранить или перегенерировать. Цель — не монетизация, а обучение: понять, как пользователи реагируют на AI-музыку, какие ограничения мешают внедрению и как строить UX для генеративных продуктов.
Пример пользовательского пути
Пользователь заходит на сайт → вводит описание → выбирает стиль (по умолчанию — «нейролоу», «киберпоп» или «эко-джаз») → нажимает «Сгенерировать». Через 8–12 секунд получает трек с визуализацией волны, BPM и тегами. Далее может:
- Слушать встроенным плеером;
- Скачать в MP3 (128 kbps);
- Сохранить в личный плейлист;
- Оценить (👍/👎) и оставить комментарий;
- Сгенерировать похожий (с вариацией).
Все действия логируются анонимно: время генерации, клики, оценки, комментарии — для анализа UX-фрустраций.
Архитектура MVP
flowchart TD
A[Telegram Web App / Web UI] --> B[FastAPI Backend]
B --> C[Stable Audio Open 2.0]
B --> D[Whisper v3 for lyrics (опционально)]
B --> E[Lyrics-to-Mood Parser]
C --> F[Audio Cache + Embedding DB]
E --> G[User Feedback Loop]
G --> H[Reinforcement Fine-tuning (on 500+ votes)]
B --> I[Rate Limiter: 3 req/min per user]
I --> A
Ключевые решения: открытая модель (Stable Audio Open), а не проприетарная; кэширование для сокращения времени отклика; Telegram Web App как быстрый старт (без отдельного фронтенда).
Типичные ошибки при запуске
- Переоценка качества AI-музыки. Пользователи ждали «как у человека», а получали шум в 20% треков. Решение: добавили «демо-тег» и предупреждение: «Это эксперимент. Трек может не совпасть с описанием».
- Слишком длинный тайм-аут. 12 секунд — это критично для UX. Сократили до 8 сек, убрав лишние пост-процессы (например, генерацию спектрограммы).
- Отсутствие контроля качества. Первые 100 треков были «на слух» — без мета-тегов. Добавили автоматическую теггинг по эмоциям (с помощью DistilBERT) и BPM-оценку.
Что проверить перед запуском генеративного MVP
| Критерий | Почему важно | Как проверить |
|---|---|---|
| Время генерации < 10 сек | Потеря внимания после 8 сек | Тест на 20 пользователях с таймером |
| Четкое демо-ограничение | Снижает ожидания, повышает лояльность | Проверка текста в UI и в README |
| Механизм обратной связи | Без оценок — нет данных для улучшения | Кнопки 👍/👎 + комментарий |
| Кэширование и fallback | Избегает 500-х при падении модели | Имитация ошибки модели: должен показываться fallback-трек |
Экономика MVP: что мы сэкономили
Запуск за 3 недели, бюджет — 120 000 ₽ (внутренние ресурсы). Основные статьи расходов:
- GPU-кредиты (Hugging Face + Yandex Cloud): ~45 000 ₽/мес (но только 2 недели активного теста → ~7 500 ₽)
- Разработка (2 инженера × 3 недели): ~100 000 ₽
- Тестирование (5 пользователей × 2 сессии): ~12 500 ₽
Итого: ~120 000 ₽. Без внутреннего ресурса — ~350 000 ₽ (внешний фронтенд + DevOps + QA).
Важно: мы не делаем монетизацию. Продукт — «лаборатория» для понимания, как AI-музыка влияет на вовлеченность в продуктах клиентов (например, в LikeXR).
Псевдокод: как работает генерация
function generateTrack(prompt: string, style: Style): Track {
// 1. Парсинг и улучшение промпта
const enrichedPrompt = moodParser.enhance(prompt, style)
// 2. Генерация аудио (Stable Audio Open)
const audioBytes = stableAudio.generate({
prompt: enrichedPrompt,
duration: 30, // сек
style: style.id
})
// 3. Пост-обработка
const bpm = estimateBPM(audioBytes)
const tags = tagger.extract(audioBytes)
// 4. Кэширование
cache.set(`track:${hash(prompt)}`, {
audio: audioBytes,
bpm,
tags,
createdAt: now()
})
return {
id: uuid(),
audioUrl: s3.upload(audioBytes),
bpm,
tags,
isDemo: true
}
}
Ключевая особенность: isDemo: true — флаг, который отображается в UI и влияет на логику (например, запрет на коммерческое использование).