Как я завайбил на Antigravity свой low-code конструктор чат-ботов с блэкджеком и AI-ассистентом: от идеи до реализации.
Всем привет! Вот и настал тот день, когда мне приспичило сделать своего чат-бота с ИИ. И не просто чат-бота а целый конструктор чатботов с ИИ ассистентом.
Недавно на бесплатном мастер-классе от известной учебной платформы проходили реализацию чат-бота в Telegram с использованием ИИ. Бот строился на базе no-code платформы Salebot. Это платформа с множеством функций, где действительно можно достаточно быстро собрать своего бота. В целом она неплохая: низкий порог вхождения, небольшая стоимость (около 2 т.р./месяц), удобный интерфейс.
Однако, как и у всех подобных систем, есть минусы: результат не всегда прогнозируемый, иногда ошибки появлялись и исчезали сами по себе. После многократной переделки процесса и поиска багов меня посетила идея: сделать свой конструктор чат-ботов.
Конечно, спроектировать и разработать конструктор — это не бином Ньютона, и опыт разработки подобных систем у меня был в прошлом. Но, к сожалению, свободного времени, как раньше, у меня нет, а ум требует творить. Подобная система с минимальным функционалом — это примерно не менее 60 часов работы. Что ж, вызов принят. Ну, начнём.
Проектирование
Начну я с упрощённой модели работы конструктора Salebot. Предположим, что схема состоит из функциональных блоков, которые связаны между собой.
Сценарий — это последовательность функциональных блоков. Каждый блок содержит:
- Уникальный номер (ID).
- Код выполнения на языке Python. На мой взгляд, это самый подходящий скриптовой язык для таких задач: низкий порог входа, простота и огромное комьюнити.
- Логика переходов. В коде я буду обозначать условные и безусловные переходы к другим блокам, а также вывод меню.
- Хранение контекста. Значения, которые мы собираем у пользователей, будем хранить в отдельном справочнике Key -> Parameter. Для сохранения и получения буду использовать методы вида SetParam(..) и GetParam(..).
Базово разделю свой конструктор на серверную (Backend) и фронтовую (Frontend) части. Начнём с серверной части, стек — Python.
Детально заострять ваше внимание на самом процессе проработки архитектуры не буду, так как это происходило по большей части в голове. В качестве результата я сформировал подробный промт для построения подобной системы, который и стал фундаментом.
Полный текст промта тут не поместился и я его выложил в Git:
Архитектура и База Данных
Архитектура получилась следующая:
ER Диаграмма
Для реализации гибкости нам нужны 4 основные таблицы. Вот как они выглядят в SQLAlchemy:
Table: blocks (Сценарий)
ПолеОписаниеidInteger (PK) — Уникальный ID блока.nameString — Служебное название.script_codeText — Python-код, выполняемый в этом блоке.is_startBoolean — Флаг стартового блока.
Table: user_sessions (Состояние)
ПолеОписаниеuser_idString — ID пользователя (внешний).current_block_idInteger (FK) — Ссылка на текущий блок.updated_atDateTime — Время последнего действия.
Table: trace (Логирование / История)
Важно: Хранит полную историю запросов и ответов для отладки.
ПолеОписаниеblock_idInteger (FK) — В каком блоке находился юзер.directionString — 'inbound' (от юзера) или 'outbound' (от бота).contentText — Текст сообщения.
Ядро системы (Core Engine)
Класс ChatbotEngine отвечает за выполнение сценария. Это сердце нашего конструктора.
Контекст исполнения (exec sandbox):Внутри скрипта, лежащего в БД, доступны следующие "магические" функции:
- input_text: Текст сообщения от пользователя.
- event: Тип события ('message' — ответ пользователя, 'enter' — вход в блок).
- set_param(key, value) / get_param(key): Работа с памятью.
- send_message(text): Отправка ответа + логирование в trace.
- go_to(block_id): Переход на другой блок.
Пример "Seed" сценария для инициализации:
Запуск генератора кода и первые результаты
Теперь осталось дело за малым — выбрать систему для "вайб кодинга". В этот раз решил попробовать новомодный инструмент Antigravity. Вы можете использовать уже проверенный Cursor.
Добавление умных ассистентов (GigaChat)
Простой линейный бот — это скучно. Подключим к нему "мозги". Я разработал архитектуру подключаемых модулей. Ниже представлен код модуля интеграции с GigaChat.
Генератор справился с требованиями. Я добавил этот код в проект, создал стартовый блок с вызовом модуля, и бот "ожил".
Реализация интерфейса конструктора
Бэкенд готов, но править скрипты в базе данных — удовольствие сомнительное. Для полноценного продукта нужен UI. Я сгенерировал фронтенд (административную панель) со следующими возможностями:
- User Management: Управление пользователями, просмотр trace-логов, поиск по имени (формат @Example).
- Visual Flow Editor: Визуальное отображение блоков, drag-and-drop.
- Code Editor: Редактирование Python-кода блока в браузере с подсветкой синтаксиса, форматированием и кнопкой тестирования.
- Trace & Debug: "Режим бога" — возможность просмотра переменных сессии и принудительного изменения текущего блока пользователя.
Запуск
Результат и выводы
В итоге получился полностью рабочий MVP конструктора. Сам процесс создания получился интересным и увлекательным. Никакой рутины — только реализация идеи. Инструменты AI-генерации кода позволили пропустить этап написания бойлерплейта и сосредоточиться на архитектуре.
Запуск бота
Планы по развитию:
- Ролевой доступ к админке.
- Мультисценарность (несколько ботов в одной БД).
- Интеграция VK и YandexGPT.
- RAG для работы с документами.
- Омниканальность (склеивание профилей по телефону).