Обычно истории про пет-проекты заканчиваются фразой: «Я сделал, всем понравилось, хэппи-энд». Ага, сейчас.
Моя история разработки телеграм-бота Вельмиры (ИИ-Мастера Подземелий) превратилась в войну на два фронта: против корпорации добра и против собственной аудитории.
Акт 1. Красный день календаря
В один «прекрасный» день я захожу в админку и вижу КРОВЬ. В смысле, всё красное от логов ошибок. Личка разрывается: «Бот сдох!», «Верните Вельмиру!».
Я пишу самой Вельмире — она то молчит, то отвечает голосом: «Отстань, на меня напали гоблины, мне нужно 10 минут на отдых».
Тут сделаю отступление. Эту фичу с «отдыхом» мы придумали с подписчиками ещё до краха.
Идея была такая: скучное «Error 500» — это для слабаков. Пусть Вельмира (она же живая девушка-НРИшница по лору) отмазывается как реальный человек.
Мы загрузили 100+ фраз и озвучек:
«Так, стоп. Мой мозг перегрелся от ваших планов. Пошла заварить драконьей мяты. Буду через 5 минут».
«Даже у вечных сущностей бывает перерыв на обед. Не скучайте».
Самое смешное, что в день глобального сбоя некоторые новички не поняли, что это ошибка сервера. Они реально сидели и ждали, пока она «допьёт чай».
Google решил, что халява кончилась. Лимиты бесплатных ключей для Gemini срезали с 1000 запросов в день до... 20. Двадцать, Карл!
Моя ферма ключей превратилась в тыкву за одну секунду.
Акт 2. Экономика должна быть экономной
Пришлось доставать кошелек и покупать платный ключ.
И тут я столкнулся с классикой: пользователи, которые месяцами играли бесплатно, начали спрашивать:
— А почему так дорого (в смысле лимиты)? А вон там аналог платный, но работает...
— Куда донатить? (Спойлер: человек 5 спросили, но не задонатил никто. Разрабы, знакомо?)
Чтобы не разориться (я же плачу за каждый токен из своего кармана), пришлось включить режим «Еврейского менеджмента»:
Смена мозгов: Перевел бота на модель Flash Lite. Она дешевле, водит неплохо, но её легче обмануть (об этом ниже).
Теория «25 минут»: Я посчитал, что средний игрок играет в дороге на работу/учебу. Это 25 минут туда + 25 минут обратно. Плюс два перерыва по полчаса.
Итог: Лимит 100 запросов в день бесплатно.
Этого хватает, чтобы проживать историю каждый день вместо думскроллинга. В таком режиме приключение растягивается на неделю, и тебе интересно узнать, что будет дальше, но при этом не дает пустить меня по миру.
Конечно, тех, кто привык тратить по 1000 запросов в день, это взбесило. И началась...
Акт 3. Война с Абузерами (и моя наивность)
Я решил тестировать систему платных тарифов. Но деньги брать пока рано, поэтому я выложил в открытый доступ тестовые данные банковской карты (заглушка для проверки эквайринга).
Суть простая: вводишь тестовую карту -> система думает, что ты оплатил -> получаешь плюшки (+100 несгораемых запросов).
Один честный парень, Александр, пишет мне:
— Админ, тут баг. Я «покупаю» подписку тестовой картой, она продлевается, а 100 запросов каждый раз падают на баланс. Я могу так делать вечно.
Я, наивная душа, отвечаю:
— Всё норм! Это же тест. Логика такая: когда заработает реальный эквайринг и пользователь внесет настоящие деньги, он должен получить товар. Поэтому начисление идет по тарифу, чтобы отработать систему один в один как в продакшене.
Я думал, люди поймут, что реальные токены я оплачиваю своими деньгами, и не будут наглеть.
Народ начал «пылесосить» подписку по 10-20 раз подряд, накручивая себе тысячи запросов на халяву.
Пришлось урезать бонус за подписку со 100 до 5 запросов.
И знаете, что сделал самый главный «злоупотреблятор»? Он психанул и за 3 дня привел 9 реальных рефералов (за каждого давали +50 лимита).
Оказалось, нет лучшего маркетолога, чем игрок, которому урезали халяву.
Акт 4. Таверна, где сгорают мои деньги
У нас есть чат-группа «Таверна Вельмиры». Там бот сидит как обычный участник. С ней можно поболтать, она кидает мемы, приветствует новичков.
Но так как аудитория — ролевики...
Они начали устраивать в чате PvP-замесы. Перестрелки, взрывы таверны, драки на мечах.
Вельмира (и мой кошелек) в шоке. Конечно, запрос к API идет не на каждое сообщение, а только если ответить ей или тегнуть (триггер).
Но пользователям так нравится её бесить, что они триггерят её в КАЖДОМ сообщении.
— Я кидаю фаербол в бармена! @Velmira — пишет игрок.
— Минус 💸💸💸 со счета разработчика, — отвечает Google.
Пришлось ввести лимиты и туда. Хочешь устроить дебош в таверне — плати своими дневными запросами.
Акт 5. Битва за баланс (или как стать Богом)
С переходом на Flash Lite старые «дыры» в логике стали еще заметнее, а игроки — еще изобретательнее.
«Я Бог 1-го уровня»
Эта проблема была и раньше, но с введением лайт-версии усилилась кратно. Игроки проявили чудеса «социальной инженерии»: с помощью хитрого промптинга и десятков попыток они умудрялись убедить Вельмиру, что «+1000 к Силе для новичка — это нормально, просто у него генетика хорошая». И она сдавалась!
Решение: Полностью механическая генерация. ИИ теперь только ассистент, цифры ставит код.
Бонус: Прикрутил экспорт в longstoryshort.app. Теперь бот — это инструмент: накидал перса за 5 минут, экспортировал в json понятный сайту проекта и пошел играть в реальное D&D с друзьями.
«Синдром Плюшкина»
Игроки собирали весь мусор: палки, камни, вилки. Потом убеждали торговцев купить это за миллионы золота.
Решение: Ограниченный инвентарь (слоты). Теперь 1000 мечей в кармане не унесешь.
«Отряд самоубийц»
У меня была простая система опыта: 1 очко = 2 уровень. 3 очка = 3 уровень. Очко давалось за завершение сюжета.
Что делали игроки?
Начать игру -> «Я прыгаю со скалы» -> Конец игры -> +1 Опыт.
Повторить 200 раз — ты 20-го уровня.
Решение: Умная прогрессия. Опыт теперь капает за действия, битвы и квесты. Суицид на старте не дает ничего, кроме экрана Game Over.
Последний рубеж: Вечные приключения
И последнее, над чем я сейчас работаю перед релизом — Суммаризация.
Многие просят: «Хочу играть вечно!». Но у нейронок есть память (контекстное окно), и чем дольше история, тем она дороже и тем быстрее бот начинает забывать, как вас зовут.
Я делаю систему, которая будет «сжимать» вашу прошлую историю в краткий пересказ. Это сэкономит токены и позволит сделать приключения бесконечными. Как допилю — сразу в релиз.
Итог: Зачем я всех душню?
Многие скажут: «Зачем ты мешаешь нам веселиться?»
Но я готовлю полноценный Мультиплеер.
Да, он есть и в базовой версии, но там царит хаос. В новой версии это будет сбалансированная система. И будет нечестно, если в одной пати окажется честный воин 1-го уровня и «набагоюзивший» себе +1000 статов Бог, который скупил полмира за проданные палки.
Мы прошли через ад с Google, выдержали натиск халявщиков и стали только лучше. Конечно, где-то я мог приукрасить ради красного словца, но логи врать не умеют, а все совпадения — совершенно случайны (нет).
В новом тестовом боте я уже внедряю улучшенный диспетчер боя, генерацию голоса НПС и визуализацию локаций. В следующем посте я могу рассказать подробно, какие фичи там действительно есть и как они реализованы технически (со всеми внутренностями) — если, конечно, вам это интересно.
Если вам близка боль инди-разработки или просто интересно посмотреть, как ИИ пытается водить D&D, заходите тестить, ломать и искать баги:
🤖 Стабильный бот: @DndMasterWH_Bot (тут все работает, но лимиты строгие)
🧪 Тестовый бот: @WiseHomeAI_bot (тут новые фичи, баги и эксперименты)
🎁 Лайфхак для тех, кому мало лимитов:
Я спрятал несколько пасхалок на сайте проекта https://superaistory.fun/. Если их найти, можно получить пачку бесплатных запросов на баланс. Намеки, где искать, лежат в закрепе нашей группы в Телеграме.
Если вы узнали себя в «Абузерах» — отпишитесь в комментах, банить не буду (честно).
А остальным вопрос: донатили ли вы когда-нибудь в бесплатные пет-проекты просто из солидарности, или «работает бесплатно — и слава богу»?))