# MiamiFlow — CRM танцевальной студии, которой управляют четыре ИИ-агента

Продакшен-CRM, на которой работает реальная танцевальная студия, с четырьмя ReAct-агентами (tool-use) на передовой: Ева онбордит клиентов и продаёт абонементы в Telegram, Анна ведёт операции ресепшена в вебе, Майя — управленческий копилот администратора, Вика продаёт аренду зала. За ними — собственный LLM-шлюз для надёжности под нагрузкой, распознавание скриншотов оплаты с подтверждением человеком и model-agnostic стек. Живёт на miamistudio.org.

- **Author:** Фёдор Чищин
- **Role:** Solo engineer & architect
- **Period:** 2025 — настоящее
- **Stack:** Python · FastAPI · SQLAlchemy · PostgreSQL · Redis · Next.js · TypeScript · aiogram · OpenRouter · Docker · Railway
- **Source:** https://fedorthinks.com/ru/work/miamiflow

---

## Проблема

Танцевальная студия держится на сотне мелких операций: онбординг родителей, продажа абонементов, сбор
оплат, бронь аренды зала, отметка посещаемости и ответы на одни и те же вопросы весь день. Почти всё это
ложится на одного-двух администраторов, делающих рутину в чате и таблицах. MiamiFlow заменяет этот ад
настоящей CRM — и ставит на передовую четырёх ИИ-агентов, которые реально _делают_ работу, а не просто её
хранят.

## Что делает — четыре агента, четыре задачи

MiamiFlow работает в продакшене для реальной студии, и четыре ReAct-агента (tool-use) несут клиентскую и
операционную нагрузку:

- **Ева** — Telegram-агент для родителей и учеников. Она онбордит новых клиентов, создаёт профили детей,
  записывает их в группы, **продаёт абонементы** и отвечает на вопросы о расписании, ценах, правилах и
  тренерах. Выдаёт QR-коды для оплаты и даже **читает скриншоты оплаты**, чтобы сопоставить их с нужным
  счётом, — а затем передаёт человеку-администратору на проверку и активацию. Тёплый, узнаваемый голос.
- **Анна** — веб-чат-агент для ресепшена. Вместо кликов по формам персонал просто говорит Анне, что
  нужно: зарегистрировать оплату, изменить абонемент, найти ученика, написать группе, — и она превращает
  обычный язык в правильные операции по всей CRM.
- **Майя** — **управленческий копилот администратора**. Спроси у неё, как обстоят дела с посещаемостью,
  финансами, долгами или расписанием, — и она вытащит цифры и сделает действия по всей школе через широкий
  ReAct-набор инструментов: отчёты, финансы, расписание, тренеры и не только.
- **Вика** — второй Telegram-агент, посвящённый **продаже аренды зала**: проверка доступности, расчёт
  цены и бронирование зала.

Вокруг агентов — полноценная админ-поверхность: счета, абонементы, журналы посещаемости, финансы и долги,
заработок тренеров, скидки, соревнования, локации, мониторинг агентов и учёт стоимости LLM.

## Что я построил

В одиночку, от и до: FastAPI-бэкенд (чисто разложенный на API, сервисы, модели и агентов с их
инструментами), админ-приложение на Next.js + TypeScript с десятками экранов, два Telegram-бота, базу
данных и миграции и самих агентов.

Агенты — это настоящие ReAct-циклы с **типизированными инструментами**: каждая возможность (записать
ребёнка, продать абонемент, принять оплату, забронировать аренду, поискать по документам студии, вытащить
отчёт о посещаемости) — это инструмент, который модель может вызвать. Майя, помощник администратора,
стримит свои рассуждения и вызовы инструментов по SSE, так что персонал видит, как она работает, а не ждёт
чёрный ящик.

## Архитектурные решения

**Собственный LLM-шлюз.** Когда три агента и два бота разом дёргают модель, упираешься в лимиты провайдера
и молча теряешь запросы (HTTP 429). Поэтому я построил **LLM Gate** — внутренний OpenAI-совместимый прокси
между приложениями и провайдерами (OpenRouter, Groq), который делает rate limiting, очередь запросов,
приоритизацию и circuit breaking. Переключить любой сервис на него — это правка одной строки `base_url`.
Это слой устойчивости, который держит агентов надёжными под реальной конкурентной нагрузкой.

**Model-agnostic по дизайну.** Каждый LLM-вызов идёт через шлюз поверх OpenRouter, так что модель — это
настройка: быстрая и дешёвая по умолчанию, сменяемая на Claude, GPT или другую модель без правки кода
агентов. Тот же тезис, что я повторяю: не женись на одной модели.

**Human-in-the-loop там, где двигаются деньги.** Продажа автоматизирована; _подтверждение оплаты_ — нет.
Ева распознаёт скриншот оплаты и прикрепляет его к счёту, но человек-администратор проверяет его и
активирует абонемент. Чувствительные, необратимые действия намеренно загорожены человеком.

**Стоимость и поведение, которые видно.** Логирование и стоимость по каждому LLM-вызову плюс экран
мониторинга агентов — студия видит, что агенты делают и сколько это стоит. Наблюдаемость встроена, а не
приколочена сбоку.

**Чистая архитектура, с тестами.** FastAPI с SQLAlchemy и миграциями Alembic, Redis, слоистый бэкенд с
чисто отделёнными агентами и инструментами, наборы e2e / performance / security тестов, в Docker и с
деплоем на Railway.

## Текущий статус

MiamiFlow **работает в продакшене** на [miamistudio.org](https://miamistudio.org), ведя ежедневную жизнь
реальной студии — реальные клиенты, реальные счета, реальные деньги. Я сделал его в одиночку, дирижируя
ИИ-агентами по поэтапной спеке и владея архитектурой, дизайном агентов и ревью. Это самый полный пример
того, о чём я всё время говорю: ИИ-агенты, которые не просто болтают, а реально делают работу — безопасно,
наблюдаемо и в продакшене.
