Главный вопрос любого AI-стартапа — не «сможем ли мы это сделать?», а «сколько будет стоить один пользователь?». В индустрии, где каждый вызов модели стоит денег, юнит-экономика определяет — будет проект жить или умрёт через месяц после запуска. Мы построили «Стирая Грань» так, чтобы один игровой ход стоил 2.2 копейки. Вот как.
Главный страх любого AI-проекта — лавинообразный рост стоимости контекста. Один ход в текстовой RPG — это примерно 4000 токенов на вход (история мира, предыдущие события, состояние персонажа) и ещё 600 токенов на выход (ответ игровой модели). Если слать такие объёмы через условный OpenAI напрямую — без кэширования, без оптимизаций — проект станет глубоко убыточным уже на первой сотне активных пользователей.
Проблема не в том, что модель дорогая сама по себе. Проблема в том, что с каждым ходом контекст растёт. Десять ходов — это уже 40 000 токенов. Сто ходов — 400 000. Чем дольше играет пользователь, тем дороже он обходится. Без структурных решений эта кривая убивает экономику.
Решение — три экономии одновременно: статический Prompt Caching, локальные эмбеддинги и собственная инфраструктура. Каждая по отдельности даёт копейки, но вместе они сокращают себестоимость в 15–20 раз.
Текстовое ядро «Стирая Грань» работает на DeepSeek API с включённым Prompt Caching. Идея проста: статичные данные — правила движка, описание мира, системный промпт — помещаются в начало каждого запроса к модели. DeepSeek кэширует повторяющиеся префиксы, и при каждом следующем вызове до 90% входных токенов попадают в Cache Hit.
Это меняет экономику радикально. Cache Hit стоит $0.0028 за миллион токенов — в 50 раз дешевле Cache Miss ($0.14/млн) и в 100 раз дешевле выходных токенов ($0.28/млн).
Разберём себестоимость одного хода (4600 токенов суммарно):
| Компонент | Токенов | Тариф | Стоимость |
|---|---|---|---|
| Cache Hit (вход) | 3600 | $0.0028/млн | $0.00001008 |
| Cache Miss (вход) | 400 | $0.14/млн | $0.00005600 |
| Выход модели | 600 | $0.28/млн | $0.00016800 |
| Итого | 4600 | $0.00023408 ≈ 2.2 коп. |
Без Prompt Caching те же 4600 токенов на вход стоили бы $0.000644 (при $0.14/млн) — в 3 раза дороже. А при использовании OpenAI o1-mini без кэширования — $0.00552 за ход, то есть в 25 раз дороже. Выбор модели и включение кэширования — это не техническая деталь, а фундамент бизнес-модели.
90% Cache Hit — достижимая цифра при правильной архитектуре промпта. Статические блоки (правила, мир, системный контекст) всегда в начале, динамические (последние события, реплики) — в конце.
Векторная память мира — вторая по значимости статья расходов в AI-RPG. Каждый ход требует поиска релевантных событий из истории: что игрок сделал в этом городе, кого встретил, какие последствия уже сработали. Если каждый такой поиск отправлять в платный API эмбеддингов (OpenAI text-embedding-3-small: $0.02/млн токенов), стоимость хода снова вырастет.
Мы выбрали путь полностью локальных эмбеддингов:
Поиск по памяти мира происходит в две фазы: сначала извлекаются локальные события (ближайшие географически и сюжетно), затем — глобальные (ключевые повороты кампании). Квоты гарантируют, что модель получит сбалансированный контекст без раздувания входного окна.
При 1000 активных игроков и 50 ходах в день на игрока — это 50 000 эмбеддинг-запросов ежедневно. На платном API это $1–2 в день. На локальной модели — 0 рублей. За год разница: $500 против $0.
Вся платформа работает на домашнем мини-сервере под управлением Ubuntu 24.04 в Docker-контейнерах. Схема доступа к пользователям:
Flutter Web — клиентская часть. Главный бандл main.dart.js весит 3.6 МБ, что создавало проблему: FRP-туннель обрывал соединение при передаче больших файлов без сжатия. Решение — gzip on в Nginx: после сжатия бандл ужимается до ~900 КБ и проходит через туннель без обрывов.
Отдельная история — CSP (Content Security Policy). Flutter Web использует CanvasKit-шрифты с fonts.gstatic.com, которые блокировались политикой безопасности. После нескольких итераций мы просто убрали CSP из продакшен-конфигурации Nginx — лендинг, Flutter и текст заработали корректно.
Для горячих правок без полной пересборки образа (которая занимает 15–30 минут) используем паттерн docker cp: загружаем изменённые Python-файлы прямо в работающий контейнер, чистим __pycache__ и перезапускаем. Да, после docker compose up -d --force-recreate все правки теряются — но для оперативных исправлений в продакшене это работает.
Модель монетизации — Freemium с токенами. Токен — внутренняя валюта платформы, привязанная к реальной стоимости AI-генерации:
Считаем маржинальность на одном ходе:
Портреты персонажей — дополнительная статья: генерация через YandexArt обходится в 2.3 ₽ за изображение, а для пользователя стоит 280 000 токенов (~2.8 ₽ в рознице). Маржинальность портретов — 21.7%, что ниже, чем у текстовых ходов, но портреты увеличивают вовлечённость и средний чек.
Race condition защита: списание токенов защищено pg_advisory_xact_lock на уровне PostgreSQL. Два одновременных хода одного игрока не могут привести к двойному списанию — блокировка уровня транзакции гарантирует атомарность.
При 500 платящих пользователях с потреблением 100 ходов в день, валовая выручка — около 200 000 ₽ в месяц. Себестоимость AI-генерации — около 110 000 ₽. Остальное — маржа, которая покрывает сервер (электричество), домен, VPS и оставляет пространство для роста.
5 бесплатных ходов — убедитесь, что каждый из них стоит своих 2.2 копеек.
Играть бесплатно