7.3 KiB
7.3 KiB
Техническое задание №3: Модуль AI-генерации контента
Цель: Реализовать ключевую функцию SMM-модуля — автоматическую генерацию черновиков контента (текст и изображения) с помощью AI. Этот модуль будет ядром "умного" контент-плана, позволяя пользователям быстро создавать посты на заданную тему.
1. Data Transfer Objects (DTOs)
GenerateContentRequest.java
Используется для запроса на генерацию нового поста.
public class GenerateContentRequest {
@NotNull
private UUID campaignId; // К какой кампании относится пост
@NotBlank
private String topic; // Тема для генерации
@NotBlank
private String locale; // Локаль ("ru" или "kk")
}
GeneratedContentDto.java
Используется в ответе и представляет собой DTO для ContentQueue.
public class GeneratedContentDto {
private UUID id;
private UUID campaignId;
private String locale;
private String topic;
private PostDraftDto postDraft;
private List<String> assetsRefs;
private ContentStatus status;
}
// Вспомогательный DTO для JSON-поля postDraft
public class PostDraftDto {
private String title;
private String body;
private List<String> hashtags;
}
2. Интеграция с внешними AI-сервисами
Необходимо создать два новых сервиса-клиента для взаимодействия с внешними AI API.
LanguageModelClient.java (Агент "Writer/Researcher")
- Задача: Отправлять запросы к LLM (например, Ollama, OpenAI) для генерации текста.
- Методы:
String generatePostText(String topic, String locale): Генерирует основной текст поста.String generateTitle(String postText): Генерирует заголовок на основе текста.List<String> generateHashtags(String postText): Генерирует хештеги.
- Промпты (примерные):
- Для текста:
"Напиши экспертный пост для [соцсеть] на тему '[topic]' на [locale] языке. Стиль: [стиль]. Целевая аудитория: [аудитория]." - Для хештегов:
"Подбери 5-7 релевантных хештегов для этого текста. В ответе дай только список через запятую."
- Для текста:
ImageGenerationClient.java (Агент "Designer")
- Задача: Отправлять запросы к API для генерации изображений (например, Stable Diffusion, Midjourney API).
- Методы:
String generateImage(String textPrompt): Принимает текстовое описание и возвращает URL или путь к сгенерированному изображению.
- Логика: Сервис должен уметь формировать промпт для картинки на основе темы и основного текста поста.
3. Сервисный слой (Business Logic)
ContentGenerationService.java
Основной сервис, который оркестрирует процесс генерации.
- Зависимости:
LanguageModelClient,ImageGenerationClient,ContentQueueRepository,CampaignRepository. - Основной метод:
GeneratedContentDto generateContent(GenerateContentRequest request) - Алгоритм работы метода:
- Проверить существование кампании по
campaignIdиз запроса. Если не найдена — ошибка. - Вызвать
languageModelClient.generatePostText()для создания основного текста. - На основе полученного текста вызвать
languageModelClient.generateTitle()иlanguageModelClient.generateHashtags(). - Сформировать объект
PostDraftDtoиз полученных текста, заголовка и хештегов. - Вызвать
imageGenerationClient.generateImage(), передав промпт, основанный на теме и тексте. - Создать новую сущность
ContentQueue. - Заполнить ее данными:
campaign,topic,locale,postDraft(в виде JSON),assetsRefs(массив с путем к картинке). - Установить
status = ContentStatus.DRAFT. - Сохранить сущность в базу данных через
ContentQueueRepository. - Вернуть
GeneratedContentDtoсозданного черновика.
- Проверить существование кампании по
4. API Endpoint (REST Controller)
ContentController.java
Необходимо добавить новый эндпоинт в существующий ContentController.
POST /api/smm/content/generate- Описание: Запускает процесс генерации нового черновика поста.
- Тело запроса:
GenerateContentRequest - Успешный ответ (201 Created):
GeneratedContentDto(созданный черновик). - Ответ при ошибке (400 Bad Request): Если тело запроса невалидно.
- Ответ при ошибке (503 Service Unavailable): Если внешние AI-сервисы недоступны.
5. Обработка ошибок
- Сервис должен корректно обрабатывать ошибки от внешних API (LLM, Image API). Если один из сервисов недоступен, вся операция должна завершиться ошибкой, и в лог должно быть записано информативное сообщение.
- Необходимо реализовать глобальный обработчик исключений (
@ControllerAdvice) для перехвата ошибок от AI-сервисов и возврата клиенту статуса503 Service Unavailable.
Критерии выполнения
- Созданы и реализованы
LanguageModelClientиImageGenerationClient. - Реализован
ContentGenerationServiceс полной бизнес-логикой по генерации и сохранению черновика. - В
ContentControllerдобавлен эндпоинтPOST /api/smm/content/generate, который корректно принимает запрос и возвращает DTO созданного черновика. - При вызове эндпоинта в таблице
content_queueпоявляется новая запись со статусомDRAFT, заполненными полямиpostDraftиassetsRefs. - Реализована корректная обработка ошибок от внешних AI-сервисов.