Как мы рефакторили бэкенд на NestJS, объединили запросы к ИИ-модерации в один, почистили теги в рекомендациях и подключили генерацию картинок для нового редактора
Заказчик это международная компания, которая делает платформу для авторов и читателей коротких историй. Истории пишут сами пользователи на любом языке, каждая не длиннее 1200 символов. У истории может быть несколько вариантов развития сюжета или концовки, их называют твистами. Истории бывают и познавательными: например, твист к биографии может продолжить её или переключиться на человека или компанию, которые в ней упоминались.
Твисты покупают за внутреннюю валюту платформы. Хотя бы одна ветка сюжета у истории всегда бесплатная. Автор получает деньги за каждую покупку и может вывести их, когда наберёт нужную сумму. Другие пользователи тоже могут дописывать твисты к чужим историям, если автор разрешил, и тогда доход получают оба. Все истории и твисты проходят модерацию через ChatGPT: модель описывает текст, оценивает его и отсеивает бессмыслицу.
Бэкенд-разработчик Фортех работал на проекте с июля по декабрь 2024 года, около пяти месяцев. В команде были фронтенд-разработчик, менеджер проекта, руководитель продукта, DevOps-инженер и дизайнер.
Модерация проходит через внешнюю модель, и каждый запрос к ней это время и деньги платформы.
Теги хранятся в двух местах: в базе платформы и в системе рекомендаций Gorse. Менять их нужно было в обоих местах согласованно.
Для генерации картинок нужно было выбрать внешний сервис, и первый кандидат не отвечал на вопросы команды.
Рефакторинг. Разработчик Фортех переработал репозитории и сделал универсальный механизм внедрения зависимостей. Связанность кода уменьшилась, а работать с ним стало понятнее.
ИИ-модерация. Раньше на каждый параметр модерации уходил отдельный запрос к модели, всего три. Разработчик исследовал промпты и объединил их в одну операцию.
Теги. Провели миграцию, которая объединила похожие теги и сократила их общее количество. Изменения внесли и в базу платформы, и в систему рекомендаций Gorse.
Подготовка к редактору. Для нового редактора историй сделали эндпоинт, который отдаёт фронтенду дерево истории со всеми её твистами. Для обложек и картинок изучили API двух сервисов генерации изображений. Freepik перестал отвечать на вопросы команды, а API Leonardo AI оказался удобнее, и интеграцию сделали с ним. Под редактор подготовили модули для ИИ-транзакций, работы с Leonardo AI, картинок историй и событий в Redis, а также декораторы, DTO и сервисы для них.
Продуктовые задачи. Сделали эндпоинт проверки доступности ника и поменяли ценообразование, чтобы покупать твисты стало дешевле.
Код бэкенда стал менее связанным, с ним проще работать благодаря универсальному механизму внедрения зависимостей.
ИИ-модерация проверяет историю одним запросом вместо трёх. Теги объединены в базе и в системе рекомендаций, их стало меньше.
Для нового редактора готовы эндпоинт дерева историй и модули под картинки, а генерация изображений подключена через Leonardo AI. Твисты стали дешевле, а при регистрации можно проверить, свободен ли ник.
Как удешевить и упростить ИИ-модерацию пользовательского контента?
Проверить, нельзя ли объединить несколько запросов к модели в один. Здесь три отдельных запроса на разные параметры заменили одной операцией с общим промптом.
Как выбрать сервис генерации изображений для продукта?
Сравнить API и то, как быстро команда сервиса отвечает на вопросы. В этом проекте первый кандидат пропал из переписки, и интеграцию сделали с Leonardo AI, у которого API оказался удобнее.
Что делать, если теги в продукте разрослись?
Объединить похожие и провести миграцию везде, где они хранятся. Здесь теги были и в базе платформы, и в системе рекомендаций, и их меняли в обоих местах.
Подключает ли Фортех ИИ к существующим продуктам?
Да. В этом проекте разработчик Фортех работал с ИИ-модерацией через OpenAI и подключал генерацию картинок через Leonardo AI.

Как фронтенд-разработчики Фортех полтора года вели продукт стартапа: от заметок на веб-страницах до приватного ИИ по документам пользователя

Как мы подняли сайт стартапа, который не собирался после прошлой команды, починили вход и анкету, сверстали новые экраны и мини-приложение в Telegram

Как мы делали поисковый сервис с обновлением до 10 мс, координацию серверов, автобукинг, шардирование MongoDB и подписки на Stripe

Как мы делали плагины расчётов и визуализаций для геологов, потоковый экспорт и импорт проектов и переводили процессы на WebSocket