Телеграм-бот, который разбирает идею по шагам и выносит вердикт GO / PIVOT / KILL. Не одна простыня в ответ на промпт, а восемь отдельных шагов с гейтом между ними: каждый шаг — свой вызов модели, своё сообщение и своя развилка «дальше / поправить / пауза».
| # | Шаг | Веб | В быстром режиме |
|---|---|---|---|
| 1 | Формулировка | — | да |
| 2 | Допущения (🔴 смертельные) | — | да |
| 3 | Спрос — проверка по реальным данным | да | — |
| 4 | Конкуренты | да | — |
| 5 | Премортем | — | да |
| 6 | Реальность ресурсов | — | — |
| 7 | Самый дешёвый тест | — | да |
| 8 | Вердикт | — | да |
Шаг видит сырую идею и все предыдущие шаги — и ничего про будущие. Поэтому он не может свернуть весь разбор в один ответ.
После брифа бот спрашивает кнопкой, что это: точка с помещением, услуга без
помещения или онлайн-продукт. Профиль меняет и системный промпт (кто перед тобой
и что убивает такое дело), и акценты отдельных шагов — PROFILE_SYSTEM и PROFILE_HINTS
в bot/steps.py.
Для точки спрос ищется в картах и отзывах района, конкуренты — в радиусе пешей доступности, ресурсы считаются в чеках за день против аренды и ФОТ, а дешёвый тест — это замер потока с секундомером, а не пост на реддите. Для выездной услуги то же самое через заявки с Авито и 2ГИС, стоимость заявки и потолок «сколько заказов влезает в неделю». Онлайн-профиль остался прежним.
«Разобрать идею» открывается не пустым полем, а списком из семи пунктов — идея, клиент,
что он делает сейчас, деньги, что уже есть, сколько вложишь, город. Следом идёт
пустой шаблон в <pre>: тапнул — скопировал — заполнил. Описание можно слать
несколькими сообщениями, они склеиваются; счётчик символов и кнопка «Готово» ждут,
пока человек не решит, что хватит. Короче 320 символов бот честно предупреждает,
что разбор выйдет общим, но начать не мешает.
Перед шагами 1, 3 и 6 бот отдельным дешёвым вызовом придумывает два вопроса под конкретную идею — не из фиксированного списка. Каждый приходит с 3-4 кнопками-вариантами, кнопкой «✍️ Своими словами» и двумя выходами: «→ Пропустить» и «→ Пропустить всё». Отвечать необязательно: пропуск — полноценный ответ, шаг просто идёт без этих данных.
Ответы копятся в таблице questions и подмешиваются во все последующие шаги блоком
«что пользователь рассказал о себе». Пропущенные в контекст не попадают.
Какие шаги спрашивают — флаг ask=True в bot/steps.py.
@BotFather→ новый бот → токен в.env(TELEGRAM_BOT_TOKEN=).- Ключ Anthropic в
.env(ANTHROPIC_API_KEY=). Модель по умолчанию —claude-sonnet-5, меняется строкойANTHROPIC_MODEL=там же. OpenRouter остался запасным путём: используется, только если ключа Anthropic нет. run.bat.
После вердикта (и в карточке любого разбора) кнопка «📄 Отчёт» отдаёт разбор одним
самодостаточным .html: обложка с плашкой вердикта, полоски оценок, оглавление, шаги,
допущения таблицей с маркерами 🔴🟡⚪, источники ссылками и разворот «на что этот отчёт
не отвечает» — он же прогрев к платному треку.
Внутри файла нет ничего внешнего: ни шрифтов, ни картинок, ни скриптов. Открывается из чата, работает офлайн, печатается в PDF через Ctrl+P (разрывы страниц уже расставлены). Markdown-выгрузка осталась, но видна только админу.
python tools/dry_run.py 2 fast # первые два шага быстрого маршрута
python tools/dry_run.py 8 full # весь разбор, с веб-поиском на 3-4
python tools/test_flow.py # офлайн-проверка опроса и отчёта, без ключей
python tools/demo_report.py # пересобрать демо-отчёт из exports/demo-razbor-*.md
bot/steps.py— все промпты. Тон и жёсткость правятся только здесь.bot/engine.py— сборка контекста шага и вызов модели.bot/handlers.py— телеграм-поток: гейты, пауза, «поправить», список разборов.bot/llm.py— Anthropic Messages API (серверныйweb_search, adaptive thinking, докруткаpause_turn); OpenRouter как запасной провайдер. Поиск включается только на шагах 3-4 и только по кнопке.bot/render.py— markdown-lite модели → безопасный Telegram HTML, разбивка на сообщения.bot/billing.py— звёзды, бесплатный первый разбор, рефералы.exports/— разборы, выгруженные файлом.
После вердикта GO или PIVOT бот предлагает пакет «Запуск»: финмодель, локация, юридический чек-лист, смета с поставщиками, план на 60 дней. После KILL не предлагает — допродажа к «не делай» выглядит хамством.
Оплата ручная, без провайдера: бот выставляет счёт с номером, покупатель переводит
по реквизитам из PAY_DETAILS и жмёт «Я оплатил», админу прилетает заявка с кнопками
подтвердить/отклонить. /orders показывает последние счета и всё, что ждёт проверки.
Двойное нажатие не плодит счета — открытый счёт по тому же разбору переиспользуется.
LAUNCH_ENABLED=0 в .env прячет предложение от всех, кроме админа. Пока артефактов
нет, так и должно быть: продавать то, чего не существует, нельзя. Заполни PAY_DETAILS,
иначе бот честно скажет, что платить некуда.
Списывается один раз, при старте разбора: полный — 30⭐, быстрый — 12⭐. Первый разбор бесплатный. Оплаченный разбор можно ставить на паузу и возвращаться бесконечно, «поправить» на шаге — бесплатно, до трёх раз.