## Requirements ### Requirement: 智能选题推荐入口 系统 SHALL 提供 `TopicEngine` 类,封装选题推荐的完整逻辑,通过 `recommend(count=5)` 方法返回推荐选题列表。 #### Scenario: 推荐选题返回 - **WHEN** 调用 `TopicEngine().recommend(count=N)` 时 - **THEN** 系统 SHALL 返回包含 N 个选题字典的列表,每个字典包含 `topic`(选题名称)、`score`(综合评分)、`angles`(创作角度列表)字段 #### Scenario: 推荐数量边界 - **WHEN** `count` 小于 1 或大于 20 - **THEN** 系统 SHALL 将 `count` 强制修正至合法范围 [1, 20],不抛出异常 ### Requirement: 多维度选题评分 每个候选选题 SHALL 从 4 个维度进行评分,各维度满分如下,合计 100 分: 1. **热点相关度**(`hotspot_relevance`):满分 30 分,与当前热点话题的关联程度 2. **账号契合度**(`account_fit`):满分 30 分,与账号人设和内容风格的契合程度 3. **内容稀缺度**(`content_scarcity`):满分 20 分,在账号历史内容中的稀缺程度(越少发过越高) 4. **互动潜力**(`engagement_potential`):满分 20 分,预估点赞/评论/收藏的综合表现 #### Scenario: 评分维度完整 - **WHEN** 选题推荐返回结果 - **THEN** 每个选题字典 SHALL 包含 `score_detail` 字段,其中包含上述 4 个子维度的分值 #### Scenario: 账号历史影响稀缺度评分 - **WHEN** 账号近 30 天内已发布过相同或极相似选题(语义相似度 ≥ 80%) - **THEN** 该选题的 `content_scarcity` 评分 SHALL 不超过 5 分 ### Requirement: 选题附带创作角度 每个推荐选题 SHALL 附带 2-4 个差异化的创作角度(`angles`),每个角度包含`angle_name`(角度名称)和 `hook`(开头 hook 句)。 #### Scenario: 创作角度多样性 - **WHEN** 同一选题返回多个创作角度 - **THEN** 每个角度 SHALL 采用不同的叙事视角(如:亲身体验 vs 对比测评 vs 干货攻略) #### Scenario: Hook 句格式 - **WHEN** 返回 `hook` 字段 - **THEN** hook 句 SHALL 为 15-30 字的小红书风格开头,包含至少一个情绪词或疑问词 ### Requirement: 热点数据整合 `TopicEngine` SHALL 调用 `HotspotService` 获取当日热点数据,并将热点话题权重纳入选题评分的 `hotspot_relevance` 维度。 #### Scenario: 热点服务可用 - **WHEN** `HotspotService` 正常返回热点数据 - **THEN** 系统 SHALL 将热点话题与候选选题做语义匹配,高匹配选题的 `hotspot_relevance` 评分加成不低于 10 分 #### Scenario: 热点服务不可用 - **WHEN** `HotspotService` 调用失败或返回空数据 - **THEN** 系统 SHALL `hotspot_relevance` 维度评分统一设为 15 分(满分 50%),不因热点数据缺失而中断选题推荐流程