feat: effect feedback loop, evergreen topics, merged search, content quality checks
- Topic selection: add historical effect analysis (framework/strategy/title performance weighting when stats available), add 2-3 evergreen topics alongside trending ones - Step 3: merge material collection and content enhancement into single search pass, with framework-specific search strategies - Step 5: split verification into writing quality (A) and content quality (B), add checks for hook strength, quote density, angle sharpness per framework - Fix exemplar category mapping for new frameworks (opinion → hot-take, retrospective → story-emotional) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
09f7034794
commit
87c4a7d293
3 changed files with 108 additions and 63 deletions
103
SKILL.md
103
SKILL.md
|
|
@ -141,7 +141,7 @@ python3 {skill_dir}/scripts/fetch_hotspots.py --limit 30
|
||||||
|
|
||||||
**降级**:脚本报错 → WebSearch "今日热点 {topics第一个垂类}"
|
**降级**:脚本报错 → WebSearch "今日热点 {topics第一个垂类}"
|
||||||
|
|
||||||
**2.2 历史去重 + SEO**:
|
**2.2 历史分析 + SEO**:
|
||||||
|
|
||||||
```
|
```
|
||||||
读取: {skill_dir}/history.yaml(不存在则跳过)
|
读取: {skill_dir}/history.yaml(不存在则跳过)
|
||||||
|
|
@ -151,18 +151,27 @@ python3 {skill_dir}/scripts/fetch_hotspots.py --limit 30
|
||||||
python3 {skill_dir}/scripts/seo_keywords.py --json {关键词}
|
python3 {skill_dir}/scripts/seo_keywords.py --json {关键词}
|
||||||
```
|
```
|
||||||
|
|
||||||
**降级**:SEO 脚本报错 → LLM 判断
|
历史分析(有 stats 数据时):
|
||||||
|
- 统计哪种 `framework` 的文章表现最好(阅读量/分享率)→ 推荐框架时加权
|
||||||
|
- 统计哪种 `enhance_strategy` 的文章表现最好 → 增强策略选择时参考
|
||||||
|
- 近 7 天已写的关键词降分(去重)
|
||||||
|
|
||||||
**2.3 生成 10 个选题**:
|
**降级**:SEO 脚本报错 → LLM 判断;history 无 stats → 跳过效果分析,仅做去重
|
||||||
|
|
||||||
|
**2.3 生成选题**:
|
||||||
|
|
||||||
```
|
```
|
||||||
读取: {skill_dir}/references/topic-selection.md
|
读取: {skill_dir}/references/topic-selection.md
|
||||||
```
|
```
|
||||||
|
|
||||||
每个选题含标题、评分、点击率潜力、SEO 友好度、推荐框架。近 7 天已写的关键词降分。
|
生成 **10 个选题**,其中:
|
||||||
|
- **7-8 个热点选题**:基于 2.1 的热点,按 topic-selection.md 规则评分
|
||||||
|
- **2-3 个常青选题**:不依赖热点,从用户的 `topics` 领域生成长尾内容(教程/方法论/经验总结/工具推荐),标注为"常青"。适合 content_style 为干货型/测评型的用户
|
||||||
|
|
||||||
|
每个选题含标题、评分、点击率潜力、SEO 友好度、推荐框架。
|
||||||
|
|
||||||
- 自动模式 → 选最高分
|
- 自动模式 → 选最高分
|
||||||
- 交互模式 → 展示 10 个,等用户选
|
- 交互模式 → 展示全部,等用户选
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -176,35 +185,28 @@ python3 {skill_dir}/scripts/seo_keywords.py --json {关键词}
|
||||||
|
|
||||||
7 套框架(痛点/故事/清单/对比/热点解读/纯观点/复盘),自动选推荐指数最高的。
|
7 套框架(痛点/故事/清单/对比/热点解读/纯观点/复盘),自动选推荐指数最高的。
|
||||||
|
|
||||||
**3.2 素材采集**:
|
**3.2 素材采集 + 内容增强**(合并执行,共用搜索结果):
|
||||||
|
|
||||||
```
|
|
||||||
WebSearch: "{选题关键词} site:36kr.com OR site:mp.weixin.qq.com OR site:zhihu.com"
|
|
||||||
WebSearch: "{选题关键词} 数据 报告 2025 2026"
|
|
||||||
```
|
|
||||||
|
|
||||||
采集 5-8 条真实素材(具名来源 + 具体数据/引述/案例)。**禁止编造**。
|
|
||||||
|
|
||||||
**降级**:WebSearch 无结果或不可用 → 用 LLM 训练数据中可验证的公开信息。但需告知用户:"素材采集未能使用 WebSearch,建议在编辑锚点处多加入你自己的内容。"
|
|
||||||
|
|
||||||
**3.3 内容增强(关键——决定文章是否值得读)**:
|
|
||||||
|
|
||||||
```
|
```
|
||||||
读取: {skill_dir}/references/content-enhance.md
|
读取: {skill_dir}/references/content-enhance.md
|
||||||
```
|
```
|
||||||
|
|
||||||
根据 3.1 选定的框架类型,执行对应的增强策略:
|
根据 3.1 选定的框架类型,一次搜索同时完成素材采集和内容增强:
|
||||||
|
|
||||||
| 框架 | 策略 | 核心动作 |
|
| 框架 | 搜索策略 | 从结果中提取 |
|
||||||
|------|------|---------|
|
|------|---------|-------------|
|
||||||
| 热点解读 / 纯观点 | 角度发现 | WebSearch 已有文章 → 提取主流观点 → 生成 3 个差异化角度 → 选最尖锐的 |
|
| 热点解读 / 纯观点 | `"{关键词} site:mp.weixin.qq.com OR site:36kr.com"` + `"{关键词} 观点 OR 评论"` | 真实素材(数据/引述)**+** 已有文章的主流观点(供角度发现) |
|
||||||
| 痛点 / 清单 | 密度强化 | 检查每个 H2 是否有可操作要点 → 补充工具名/步骤/参数 |
|
| 痛点 / 清单 | `"{关键词} 教程 OR 工具 OR 实操"` + `"{关键词} 数据 报告"` | 真实素材 **+** 具体工具名/步骤/参数(供密度强化) |
|
||||||
| 故事 / 复盘 | 细节锚定 | WebSearch 真实细节 → 补充时间锚/数字锚/对话锚/感官锚 |
|
| 故事 / 复盘 | `"{人物/事件} 采访 OR 专访 OR 细节"` + `"{关键词} 数据 报告"` | 真实素材 **+** 时间锚/数字锚/对话锚/感官锚(供细节锚定) |
|
||||||
| 对比 | 真实体感 | WebSearch 真实用户评价 → 场景化对比 → 补充踩坑信息 |
|
| 对比 | `"{方案A} vs {方案B} 评测 OR 体验"` + `"{方案A OR 方案B} 踩坑 OR 缺点 site:v2ex.com OR site:zhihu.com"` | 真实素材 **+** 真实用户评价和踩坑信息(供真实体感) |
|
||||||
|
|
||||||
增强策略的输出(角度/密度要点/细节/用户声音)并入框架大纲,一起传入 Step 4 写作。
|
每次搜索 2 轮,从结果中**同时**提取:
|
||||||
|
1. **素材**:5-8 条真实素材(具名来源 + 具体数据/引述/案例)。**禁止编造**。
|
||||||
|
2. **增强材料**:按 content-enhance.md 对应策略的要求提取(角度/密度要点/细节/用户声音)。
|
||||||
|
|
||||||
**降级**:WebSearch 不可用时,角度发现和真实体感策略用 LLM 自身知识替代(效果降低但不阻断)。密度强化和细节锚定不依赖搜索,始终执行。
|
两者并入框架大纲,一起传入 Step 4 写作。
|
||||||
|
|
||||||
|
**降级**:WebSearch 不可用 → 用 LLM 训练数据中可验证的公开信息。但需告知用户:"素材采集未能使用 WebSearch,建议在编辑锚点处多加入你自己的内容。"密度强化不依赖搜索,始终执行。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -261,10 +263,10 @@ Category 映射规则:
|
||||||
|
|
||||||
| 框架类型 | exemplar category |
|
| 框架类型 | exemplar category |
|
||||||
|----------|-------------------|
|
|----------|-------------------|
|
||||||
| 痛点型/深度解读 | tech-opinion |
|
| 痛点型 | tech-opinion |
|
||||||
| 故事型 | story-emotional |
|
| 故事型 / 复盘型 | story-emotional |
|
||||||
| 清单型/对比型 | list-practical |
|
| 清单型 / 对比型 | list-practical |
|
||||||
| 热点解读型 | hot-take |
|
| 热点解读型 / 纯观点型 | hot-take |
|
||||||
| 其他 | general |
|
| 其他 | general |
|
||||||
|
|
||||||
如果匹配到的范文不足 3 篇,用 general category 补足。
|
如果匹配到的范文不足 3 篇,用 general category 补足。
|
||||||
|
|
@ -314,24 +316,31 @@ Category 映射规则:
|
||||||
|
|
||||||
**5.1 SEO**:3 个备选标题 + 摘要(≤54 字)+ 5 标签 + 关键词密度优化
|
**5.1 SEO**:3 个备选标题 + 摘要(≤54 字)+ 5 标签 + 关键词密度优化
|
||||||
|
|
||||||
**5.2 去 AI 逐层验证**(writing-guide.md 自检清单,每项必须通过):
|
**5.2 质量验证**(两个维度,每项逐一检查):
|
||||||
|
|
||||||
| 层级 | 检查项 | 标准 | 规则 |
|
**A. 写作质量**(writing-guide.md 基础规则):
|
||||||
|------|--------|------|------|
|
|
||||||
| 统计 | 句长方差 | 最短与最长句相差 ≥ 30 字 | 1.1 |
|
| 检查项 | 标准 | 规则 |
|
||||||
| 统计 | 词汇温度 | 任意 500 字 ≥ 3 种温度 | 1.2 |
|
|--------|------|------|
|
||||||
| 统计 | 段落节奏 | 无连续 2 个相近长度段落 | 1.3 |
|
| 句长方差 | 最短与最长句相差 ≥ 30 字 | 1.1 |
|
||||||
| 统计 | 情绪极性 | 负面情绪 ≥ 2 处,无平铺直叙 | 1.4 |
|
| 词汇温度 | 任意 500 字 ≥ 3 种温度 | 1.2 |
|
||||||
| 统计 | 副词密度 | 无连续两句以副词开头 | 1.5 |
|
| 段落节奏 | 无连续 2 个相近长度段落 | 1.3 |
|
||||||
| 统计 | 风格漂移 | 不同 H2 语气/正式度有差异 | 1.6 |
|
| 情绪极性 | 负面情绪 ≥ 2 处,无平铺直叙 | 1.4 |
|
||||||
| 语言 | 禁用词 | 命中数 = 0 | 2.1 |
|
| 禁用词 | 命中数 = 0 | 2.1 |
|
||||||
| 语言 | 破句 | ≥ 3 处 | 2.2 |
|
| 真实锚定 | 每个 H2 ≥ 1 条真实素材,零编造 | 3.1 |
|
||||||
| 语言 | 意外用词 | ≥ 1 处非常规但说得通的表达 | 2.3 |
|
| 具体性 | 每 500 字 ≥ 2 处具体细节 | 3.2 |
|
||||||
| 语言 | 连贯性 | ≥ 1 处跑题再拉回 | 2.4 |
|
|
||||||
| 内容 | 真实锚定 | 每个 H2 ≥ 1 条真实素材,零编造 | 3.1 |
|
**B. 内容质量**(基于 Step 3.2 的增强策略检查):
|
||||||
| 内容 | 具体性 | 每 500 字 ≥ 2 处具体细节 | 3.2 |
|
|
||||||
| 内容 | 密度波浪 | 高密度段后跟低密度段 | 3.3 |
|
| 检查项 | 标准 | 适用框架 |
|
||||||
| 内容 | 维度贯穿 | 激活维度全文可见 | 3.4 |
|
|--------|------|---------|
|
||||||
|
| 增强贯穿 | 增强策略的核心输出(角度/密度/细节/体感)在全文可见,不只出现在一段 | 所有 |
|
||||||
|
| 开头钩子 | 前 3 句能制造悬念、冲突或好奇心(不是背景铺垫) | 所有 |
|
||||||
|
| 金句密度 | 至少 1 处可独立截图转发的句子 | 所有 |
|
||||||
|
| 操作密度 | 每个 H2 有可操作要点(工具/步骤/参数) | 痛点/清单 |
|
||||||
|
| 角度锐度 | 核心观点能引发同意或反对,不是"两面都有道理" | 热点解读/纯观点 |
|
||||||
|
| 场景感 | 至少 2 处有时间/地点/对话等画面细节 | 故事/复盘 |
|
||||||
|
| 真实声音 | 至少 1 处引用真实用户评价或体验 | 对比 |
|
||||||
|
|
||||||
不通过 → **定向修复**:只替换不达标的具体句子/段落,不动已通过的部分。每轮最多改 3 处,改完立即重新检查该项。2 轮仍不过 → 标注跳过,继续下一项。
|
不通过 → **定向修复**:只替换不达标的具体句子/段落,不动已通过的部分。每轮最多改 3 处,改完立即重新检查该项。2 轮仍不过 → 标注跳过,继续下一项。
|
||||||
|
|
||||||
|
|
|
||||||
34
dist/openclaw/references/topic-selection.md
vendored
34
dist/openclaw/references/topic-selection.md
vendored
|
|
@ -85,18 +85,36 @@
|
||||||
- 如果在**7-30 天**内出现 → 综合评分扣 1 分,标注"ℹ️ 月内有相关文章"
|
- 如果在**7-30 天**内出现 → 综合评分扣 1 分,标注"ℹ️ 月内有相关文章"
|
||||||
- 超过 30 天 → 不扣分
|
- 超过 30 天 → 不扣分
|
||||||
|
|
||||||
## 历史偏好参考
|
## 历史效果闭环
|
||||||
|
|
||||||
如果 history.yaml 中有带 stats 的文章(阅读量、分享量),分析表现最好的文章的共同特征:
|
如果 history.yaml 中有带 stats 的文章(阅读量、分享量),做以下分析:
|
||||||
- 哪种框架类型表现好?→ 推荐框架时优先
|
|
||||||
- 哪种标题风格表现好?(数字型/反直觉/痛点)→ 拟标题时参考
|
1. **框架偏好**:统计每种 framework 的平均阅读量和分享率 → 推荐框架时,表现好的框架加 1-2 分
|
||||||
- 不要强制套用——只作为参考信号,选题本身的质量仍然最重要
|
2. **增强策略偏好**:统计每种 enhance_strategy 的平均表现 → 在 Step 3.2 选择增强策略时参考
|
||||||
|
3. **标题风格**:分析高表现文章的标题特征(数字型/反直觉/痛点/提问)→ 拟标题时参考
|
||||||
|
4. **content_style 验证**:如果用户设置的 content_style 与实际高表现文章的类型不符 → 在选题报告末尾提示
|
||||||
|
|
||||||
|
不要强制套用——只作为加权信号,选题本身的质量仍然最重要。stats 数据不足 5 篇时跳过此分析。
|
||||||
|
|
||||||
|
## 常青选题
|
||||||
|
|
||||||
|
除了热点选题,额外生成 **2-3 个常青选题**——不依赖时效性,长尾流量价值高。
|
||||||
|
|
||||||
|
常青选题来源:
|
||||||
|
- 从用户的 `topics` 列表出发,生成教程/方法论/经验总结/工具推荐类选题
|
||||||
|
- 参考 SEO 数据中搜索量高但竞争度低的关键词
|
||||||
|
- 如果有 history.yaml,避免与已写过的常青内容重复
|
||||||
|
|
||||||
|
常青选题的评分规则:
|
||||||
|
- 热度分固定为 5(不依赖热搜,但也不是 0)
|
||||||
|
- 相关度和切入价值正常评分
|
||||||
|
- 标注"🌲 常青",与热点选题混排
|
||||||
|
|
||||||
## 选题不足时的处理
|
## 选题不足时的处理
|
||||||
|
|
||||||
- 如果能找到 10 个相关度 ≥ 5 的选题,直接输出
|
- 热点选题 + 常青选题合计 10 个
|
||||||
- 如果只能找到 5-9 个,用相关度 3-4 的选题补齐到 10 个,但标注"相关度偏低"
|
- 如果热点相关度 ≥ 5 的不足 7 个,用常青选题补足
|
||||||
- 如果相关度 ≥ 5 的不足 5 个,告诉用户"今天热点跟你的领域匹配度不高",输出能找到的 + 建议用户自己给选题
|
- 如果加上常青仍不足 10 个,告诉用户"今天热点跟你的领域匹配度不高",输出能找到的 + 建议用户自己给选题
|
||||||
|
|
||||||
## 注意
|
## 注意
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -85,18 +85,36 @@
|
||||||
- 如果在**7-30 天**内出现 → 综合评分扣 1 分,标注"ℹ️ 月内有相关文章"
|
- 如果在**7-30 天**内出现 → 综合评分扣 1 分,标注"ℹ️ 月内有相关文章"
|
||||||
- 超过 30 天 → 不扣分
|
- 超过 30 天 → 不扣分
|
||||||
|
|
||||||
## 历史偏好参考
|
## 历史效果闭环
|
||||||
|
|
||||||
如果 history.yaml 中有带 stats 的文章(阅读量、分享量),分析表现最好的文章的共同特征:
|
如果 history.yaml 中有带 stats 的文章(阅读量、分享量),做以下分析:
|
||||||
- 哪种框架类型表现好?→ 推荐框架时优先
|
|
||||||
- 哪种标题风格表现好?(数字型/反直觉/痛点)→ 拟标题时参考
|
1. **框架偏好**:统计每种 framework 的平均阅读量和分享率 → 推荐框架时,表现好的框架加 1-2 分
|
||||||
- 不要强制套用——只作为参考信号,选题本身的质量仍然最重要
|
2. **增强策略偏好**:统计每种 enhance_strategy 的平均表现 → 在 Step 3.2 选择增强策略时参考
|
||||||
|
3. **标题风格**:分析高表现文章的标题特征(数字型/反直觉/痛点/提问)→ 拟标题时参考
|
||||||
|
4. **content_style 验证**:如果用户设置的 content_style 与实际高表现文章的类型不符 → 在选题报告末尾提示
|
||||||
|
|
||||||
|
不要强制套用——只作为加权信号,选题本身的质量仍然最重要。stats 数据不足 5 篇时跳过此分析。
|
||||||
|
|
||||||
|
## 常青选题
|
||||||
|
|
||||||
|
除了热点选题,额外生成 **2-3 个常青选题**——不依赖时效性,长尾流量价值高。
|
||||||
|
|
||||||
|
常青选题来源:
|
||||||
|
- 从用户的 `topics` 列表出发,生成教程/方法论/经验总结/工具推荐类选题
|
||||||
|
- 参考 SEO 数据中搜索量高但竞争度低的关键词
|
||||||
|
- 如果有 history.yaml,避免与已写过的常青内容重复
|
||||||
|
|
||||||
|
常青选题的评分规则:
|
||||||
|
- 热度分固定为 5(不依赖热搜,但也不是 0)
|
||||||
|
- 相关度和切入价值正常评分
|
||||||
|
- 标注"🌲 常青",与热点选题混排
|
||||||
|
|
||||||
## 选题不足时的处理
|
## 选题不足时的处理
|
||||||
|
|
||||||
- 如果能找到 10 个相关度 ≥ 5 的选题,直接输出
|
- 热点选题 + 常青选题合计 10 个
|
||||||
- 如果只能找到 5-9 个,用相关度 3-4 的选题补齐到 10 个,但标注"相关度偏低"
|
- 如果热点相关度 ≥ 5 的不足 7 个,用常青选题补足
|
||||||
- 如果相关度 ≥ 5 的不足 5 个,告诉用户"今天热点跟你的领域匹配度不高",输出能找到的 + 建议用户自己给选题
|
- 如果加上常青仍不足 10 个,告诉用户"今天热点跟你的领域匹配度不高",输出能找到的 + 建议用户自己给选题
|
||||||
|
|
||||||
## 注意
|
## 注意
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue