61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
|
|
import db from '../config/database';
|
|||
|
|
import { AIService } from './AIService';
|
|||
|
|
import { AuditService } from './AuditService';
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* [BIZ_MKT_10] 竞品广告素材深度模仿与差异化生成
|
|||
|
|
* 负责分析竞品爆款广告(TikTok/FB/IG),并利用 AI 模仿其风格同时加入差异化卖点
|
|||
|
|
*/
|
|||
|
|
export class AdMimicryService {
|
|||
|
|
/**
|
|||
|
|
* 基于竞品素材生成差异化新素材
|
|||
|
|
*/
|
|||
|
|
static async generateMimicry(
|
|||
|
|
tenantId: string,
|
|||
|
|
competitorAdId: string,
|
|||
|
|
originalContent: string,
|
|||
|
|
traceId: string
|
|||
|
|
): Promise<string> {
|
|||
|
|
// 1. 风格提取 (模拟调用 AIService 分析竞品素材风格)
|
|||
|
|
const style = await AIService.extractAdStyle(originalContent);
|
|||
|
|
|
|||
|
|
// 2. 差异化逻辑 (注入租户产品的独有优势)
|
|||
|
|
const differentiation = "Fast 2-day global shipping & Eco-friendly materials";
|
|||
|
|
|
|||
|
|
// 3. 生成新素材内容 (模拟基于 AI 的风格迁移生成)
|
|||
|
|
const mimickedContent = await AIService.generateAdFromStyle(style, differentiation);
|
|||
|
|
|
|||
|
|
// 4. 持久化记录
|
|||
|
|
await db('cf_ad_mimicry').insert({
|
|||
|
|
tenant_id: tenantId,
|
|||
|
|
competitor_ad_id: competitorAdId,
|
|||
|
|
original_content: originalContent,
|
|||
|
|
mimicked_content: mimickedContent,
|
|||
|
|
differentiation_logic: differentiation,
|
|||
|
|
similarity_score: 0.85 // 模仿相似度指标
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 5. 审计记录
|
|||
|
|
await AuditService.log({
|
|||
|
|
tenant_id: tenantId,
|
|||
|
|
action: 'AD_MIMICRY_GENERATED',
|
|||
|
|
target_type: 'AD_CREATIVE',
|
|||
|
|
target_id: competitorAdId,
|
|||
|
|
trace_id: traceId,
|
|||
|
|
new_data: JSON.stringify({ mimickedContent }),
|
|||
|
|
metadata: JSON.stringify({ originalAdId: competitorAdId, style })
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
return mimickedContent;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取租户所有广告模仿任务
|
|||
|
|
*/
|
|||
|
|
static async getMimicryHistory(tenantId: string) {
|
|||
|
|
return await db('cf_ad_mimicry')
|
|||
|
|
.where({ tenant_id: tenantId })
|
|||
|
|
.orderBy('created_at', 'desc');
|
|||
|
|
}
|
|||
|
|
}
|