2 рубля за сказку с озвучкой: как я считал юнит-экономику AI
Идея была простая: сделать что-то небольшое в свободное время, что возможно в каком-то будущем превратится в параллельный источник дохода, не требуя от меня много личных часов. Остановился на Telegram-боте, который генерирует персонализированные сказки на ночь: родитель задаёт участников, обстановку, тему — бот пишет сказку, при желании озвучивает. Сразу оговорюсь: это не история успеха. Проект сейчас на стадии тестирования монетизации, и не факт, что он вообще взлетит даже после рекламы среди более широкой аудитории. Но процесс разработки — с реальными цифрами, граблями и решениями — мне кажется интереснее, чем ждать финального результата, чтобы об этом написать. Отдельная причина, почему я вообще сел за это: я впервые системно попробовал делегировать реализацию AI-агенту (Claude Code), а не писать код сам. Опыта с агентной разработкой у меня было буквально два дня, в течении которых я сделал простое Андроид приложение. Ну а дальше расскажу, как это выглядело изнутри.
Технические решения и почему - Java + Spring Boot - PostgreSQL - Telegram Bot API - GigaChat как LLM для генерации текста сказок. - Yandex SpeechKit — для озвучки (женский голос рассказчика). - Yandex Object Storage — хранение готовых аудиофайлов. - Хостинг — Timeweb Cloud, обычный VPS.
Роль Claude Code в разработке Здесь, наверное, самая интересная часть для тех, кто пишет код руками двадцать лет, а потом решает этого не делать. Я собрал план проекта (user stories, user journey, activity diagram, WBS) в Notion, продублировал его в PLAN.md в папке проекта — специально для Claude Code, чтобы у него был контекст. Дальше работал так: беру один пункт WBS, отдаю Claude Code, он реализует, я смотрю diff, подтверждаю или прошу переделать, только после этого переходим к следующему пункту. Это медленнее, чем дать агенту сразу целый эпик и уйти пить кофе, зато полностью контролируемо — что мне, как человеку, который двадцать лет отвечает за качество чужого кода в продакшене, было психологически важно на старте. Условно один цикл выглядел так: прошу добавить в бота предопределённые обстановки для сказки (лес, космос, подводное царство и т.п.), Claude Code предлагает структуру enum + маппинг в промпт, я прошу уточнить, как это ляжет на существующую схему БД, он поправляет, я подтверждаю миграцию. Честно: за первые дни я не столько «программировал через агента», сколько заново учился формулировать задачи так, чтобы не пришлось трижды переспрашивать. Это отдельный навык, и он не приходит автоматически из двадцати лет опыта написания кода руками.
Неожиданности и грабли 1. GigaChat плохо держит числовую цель по длине. На практике GigaChat довольно упрямо держится «естественной» длины около 450–700 слов почти независимо от инструкции про длительность. 2. Риск очереди при росте пользователей. Бесплатный тариф GigaChat (Freemium) обрабатывает запросы в один поток одновременно. 3. Модерация текста вторым LLM-проходом. Изначально не закладывал это в MVP, но по ходу разработки стало понятно, что для контента, который читают детям, одного прохода генерации недостаточно — добавил отдельный проход, который проверяет сгенерированный текст перед отправкой пользователю.
Экономика Посчитал себестоимость сказки — это оказалось приятно воспроизводимо: два независимых замера для ~4-минутной озвученной сказки сошлись почти один в один — 2,07 ₽ и 2,0664 ₽. Разбивка по второму замеру: GigaChat — 0,8712 ₽ (42%), Yandex SpeechKit (TTS) — 1,1952 ₽ (58%). То есть озвучка сейчас дороже самой генерации текста — не то, что я интуитивно ожидал в начале.
На данный момент бот развёрнут и работает на боевом VPS, есть тесты, модерация текста вторым проходом, приватный эндпоинт аналитики, поддержка нескольких профилей, запоминание сказок, сиквелы. В целом, получился приятный бот, который может помочь укладывать детишек спать. Намеренно отказался от графики и видео, чтобы не активизировать детей перед сном.