feat: 审核体系全面改造 — 多维度评分 + 卖点优先级 + AI 语义匹配 + 品牌方 AI 状态通知

后端:
- 审核结果拆分为 4 个独立维度 (法规合规/平台规则/品牌安全/Brief匹配度)
- 卖点优先级从 required:bool 改为三级 (core/recommended/reference)
- AI 语义匹配卖点覆盖 + AI 整体 Brief 匹配度分析
- BriefMatchDetail 评分详情 (覆盖率+亮点+问题点)
- min_selling_points 代理商可配置最少卖点数 + Alembic 迁移
- AI 语境复核过滤误报
- Brief AI 解析 + 规则 AI 解析
- AI 未配置/异常时通知品牌方
- 种子数据更新 (新格式审核结果+brief_match_detail)

前端:
- 三端审核页面展示四维度评分卡片
- 卖点编辑改为三级优先级选择器
- BriefMatchDetail 展示 (覆盖率进度条+亮点+问题)
- min_selling_points 配置 UI
- AI 配置页未配置时静默处理
- 文件预览/下载/签名 URL 优化

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Your Name
2026-02-11 19:11:54 +08:00
co-authored by Claude Opus 4.6
parent 0c59797d5b
commit 0ef7650c09
43 changed files with 3909 additions and 1316 deletions
+13 -2
View File
@@ -215,7 +215,11 @@ class TestSellingPointCheck:
"content": "这个产品很好用",
"platform": "douyin",
"brand_id": brand_id,
"required_points": ["功效说明", "使用方法", "品牌名称"],
"selling_points": [
{"content": "功效说明", "priority": "core"},
{"content": "使用方法", "priority": "core"},
{"content": "品牌名称", "priority": "recommended"},
],
}
)
data = response.json()
@@ -223,6 +227,9 @@ class TestSellingPointCheck:
assert parsed.missing_points is not None
assert isinstance(parsed.missing_points, list)
# 验证多维度评分存在
assert parsed.dimensions is not None
assert parsed.dimensions.brief_match is not None
@pytest.mark.asyncio
async def test_all_points_covered(self, client: AsyncClient, tenant_id: str, brand_id: str):
@@ -234,7 +241,11 @@ class TestSellingPointCheck:
"content": "品牌A的护肤精华,每天早晚各用一次,可以让肌肤更水润",
"platform": "douyin",
"brand_id": brand_id,
"required_points": ["品牌名称", "使用方法", "功效说明"],
"selling_points": [
{"content": "护肤精华", "priority": "core"},
{"content": "早晚各用一次", "priority": "core"},
{"content": "肌肤更水润", "priority": "recommended"},
],
}
)
data = response.json()