Мхитар Манасян › bestmdidi Паспорт верифицирован
Сайты, Telegram-боты и Mini Apps - Next.js, Nest.js, Node.js
Рейтинг
71 965
№ 9 в каталоге
Отзывы
Профессионализм
10/10
Коммуникация
9 /10
Город
Москва
Опыт работы
6 лет
На сайте с
2022 года
Юридический статус
Самозанятый
Эксперт
Национальной Гильдии Фрилансеров
Freelance.Boutique
Премиум-сервис для лучших исполнителей
Безопасная сделка
Деньги списываются после приёмки

AI-чат-бот и AI-визуализация рекламы на LED-экране для сайта поставщика LED-экранов: RAG на трёх языках, заявки в Telegram, FLUX и проверка качества Claude. Python, FastAPI

Используемые навыки FastAPI PostgreSQL Python Искусственный интеллект Чат-боты

Описание

Заказчик - компания-поставщик LED-экранов: подбор, поставка и монтаж экранов для бизнеса. Сайт сделан на Tilda, его ведёт свой разработчик, заявки с сайта обрабатывают менеджеры.

Нужны были две новые функции сайта, которые работают без участия людей.

Первая - чат-бот. Отвечает посетителям на трёх языках, включая язык с письмом справа налево. Если ответ есть в базе знаний, выдаёт его. На свободные вопросы отвечает нейросеть по материалам компании. Если ответа нет или человек просит менеджера, бот собирает контакт и передаёт диалог менеджерам в Telegram.

Вторая - визуализация. Посетитель загружает рекламный макет и получает фото, где этот макет стоит на LED-экране в городской сцене, с перспективой, светом и тенями. Если результат слабый, сервис сам переделывает его и только потом просит другой макет.

Главное требование: модель ИИ должна меняться настройкой, а не правкой кода. Все обращения к моделям идут через шлюз Cloudflare AI Gateway. Фронтенд сайта делает разработчик заказчика, от меня - REST API, документация, готовые блоки для Tilda и демо-страницы. Один сервер, проект с нуля, бюджет фиксированный.

Решение

Сделал два независимых сервиса на Python и FastAPI с REST API, оба работают на одном сервере.

Чат-бот. База знаний - 110 пар «вопрос-ответ» на трёх языках из текстов сайта и подтверждённых ответов заказчика. Поиск по смыслу: эмбеддинги OpenAI и векторный поиск pgvector в PostgreSQL. Похожий вопрос получает готовый ответ из базы мгновенно, без вызова модели, но только при высоком совпадении и на языке вопроса, иначе бот ответил бы на чужом языке. На свободные вопросы отвечает Claude Sonnet 4.6 по найденным фрагментам, профилю компании и истории диалога. Модель возвращает строгий JSON и сама решает, когда звать менеджера; сломанный JSON до посетителя не доходит. Тема ограничена компанией, инструкции из сообщений посетителя игнорируются. Если нужен человек, бот просит имя и контакт и отправляет заявку с историей диалога в Telegram-группу менеджеров. После сдачи по просьбе заказчика добавил приглашение оставить контакт под каждым ответом: контакт ловится в любой момент, но по строгим правилам, чтобы цены, даты и размеры в вопросе не стали «телефоном».

Визуализация. Сначала геометрия: OpenCV вписывает макет в LED-зону сцены по 4 размеченным точкам, перспектива всегда точная и без ИИ. Затем нейросеть FLUX Kontext Pro встраивает его в сцену: свет, отсвет экрана, отражения, мягкие тени, сам макет менять запрещено. Потом Claude со зрением проверяет результат: резкость, читаемость текста и логотипа, артефакты, перспективу, не подменено ли содержимое. При браке генерация повторяется с замечаниями проверки в промпте, до 3 повторов. Посетитель получает превью и PNG 2048x1136.

Модели и панель. Нейросети подключены через 9 адаптеров к 4 типам задач на чистом HTTP, без SDK провайдеров. В панели администратора провайдер и модель выбираются отдельно для ответов, эмбеддингов, визуализации и проверки качества, смена применяется за 10 секунд без перезапуска. Расход на ИИ считается по каждому платному вызову. Все вызовы идут через Cloudflare AI Gateway: ключи провайдеров хранятся в Cloudflare, на сервере их нет; тесты проверяют, что ключ провайдера не уходит в запросе.

Сайт. Два готовых блока для Tilda на чистом JavaScript: чат-виджет с тремя языками и мобильной вёрсткой и форма визуализации с проверкой файла, превью и скачиванием. Плюс инструкция и Swagger для разработчика сайта. DNS-зону перенёс на Cloudflare: в DNS Tilda нельзя завести A-записи для поддоменов API.

Инфраструктура. Docker Compose, 5 контейнеров: бот, визуализация, PostgreSQL с pgvector, Redis и Caddy с сертификатами Let's Encrypt. CI/CD на GitHub Actions: ruff и pytest с настоящими PostgreSQL и Redis, сборка образа и передача на сервер потоком по SSH без реестра; стек перезапускается только после полной загрузки образа. Защита API и бюджета на ИИ: ключ доступа, CORS, ограничение частоты запросов и количества генераций. После сдачи передал репозиторий и пайплайн на аккаунт заказчика.

Результат

Оба сервиса работают на сайте заказчика с сентября 2026, после сдачи идёт сопровождение.

Разовые замеры на боевом сервере по живым моделям: ответ из базы знаний 0,2-0,4 с, ответ модели 3,3-7,4 с, генерация визуализации целиком 14-23 с.

Проверка качества работает как фильтр: бессмысленный тестовый макет получал оценку 0,10-0,30 и браковался во всех попытках, реалистичный рекламный макет прошёл с первой попытки с оценкой 0,95. По прайсу провайдеров попытка генерации стоит около $0,045, в худшем случае с тремя повторами до $0,18.

Заказчик сам переключает модели в панели и видит расход на ИИ, ключей провайдеров на сервере нет. Выкатка от пуша до перезапуска занимает около 2 минут и идёт только после зелёных тестов.

Объём: 2829 строк Python в 56 файлах, 102 автотеста (62 unit и 40 e2e с настоящими PostgreSQL и Redis), 1045 строк HTML и JavaScript в блоках для Tilda и демо-страницах, инструкция для разработчика сайта и инструкция по эксплуатации.

Публичной ссылки нет: сервисы работают на сайте заказчика, кейс обезличен, кадры сняты на демо-данных.

Оценили проект:

Другие проекты

Все проекты →
Веб-разработка и IT Доработка сайта санитарной службы на WordPress: вернул доступ после фильтрации, подтверждение заявок по SMS и умная маска телефона, два сервера с автопереключением
Доработка сайта санитарной службы на WordPress: вернул доступ после фильтрации, подтверждение заявок по SMS и умная маска телефона, два сервера с автопереключением
25
Веб-разработка и IT Двусторонняя интеграция amoCRM и торговой платформы ABCP для магазина автозапчастей: статусы возвратов в обе стороны, сделки едут по воронке сами. Node.js, TypeScript, Express
Двусторонняя интеграция amoCRM и торговой платформы ABCP для магазина автозапчастей: статусы возвратов в обе стороны, сделки едут по воронке сами. Node.js, TypeScript, Express
64
Веб-разработка и IT CommerceAPI - SaaS-платформа для интернет-магазинов с динамическим ORM и no-code конструктором каталогов | Next.js, Nest.js, PostgreSQL, Redis
CommerceAPI - SaaS-платформа для интернет-магазинов с динамическим ORM и no-code конструктором каталогов | Next.js, Nest.js, PostgreSQL, Redis
222
Веб-разработка и IT Чат-бот приёма заявок в мессенджере MAX для производства изделий из акрила: заявка с чертежами, срочный вопрос, статус заказа, чат менеджеров и админ-панель. NestJS + React
Чат-бот приёма заявок в мессенджере MAX для производства изделий из акрила: заявка с чертежами, срочный вопрос, статус заказа, чат менеджеров и админ-панель. NestJS + React
69