From 0384e2c7a925ffd31d3fea87d8bb86434e29aab0 Mon Sep 17 00:00:00 2001 From: yumao Date: Wed, 29 Jul 2026 16:19:38 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20research=20AI=20=E6=97=B6=E8=AE=AF?= =?UTF-8?q?=E8=B4=A8=E9=87=8F=E8=AE=BE=E8=AE=A1=EF=BC=88=E5=8E=BB=E9=87=8D?= =?UTF-8?q?=E3=80=81=E5=9B=BD=E5=86=85=E9=85=8D=E9=A2=9D=E3=80=81=E5=8F=AF?= =?UTF-8?q?=E4=BF=A1=E6=BA=90=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- ...6-07-29-ai-news-research-quality-design.md | 141 ++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 docs/superpowers/specs/2026-07-29-ai-news-research-quality-design.md diff --git a/docs/superpowers/specs/2026-07-29-ai-news-research-quality-design.md b/docs/superpowers/specs/2026-07-29-ai-news-research-quality-design.md new file mode 100644 index 0000000..8ce02e2 --- /dev/null +++ b/docs/superpowers/specs/2026-07-29-ai-news-research-quality-design.md @@ -0,0 +1,141 @@ +# Design: Research 模式 AI 时讯质量(去重 · 国内配额 · 可信源) + +Generated: 2026-07-29 +Repo: daily-robots +Status: APPROVED +Related: `skills/daily-ai-news-research/SKILL.md`, `daily/news/research.py`, `docs/superpowers/specs/2026-07-14-wecom-diversity-dedup-design.md` + +## Problem Statement + +当前 `DAILY_AI_NEWS_MODE=research` 下: + +1. **内容重复高**:同事件多源报道并列入榜(如 OpenAI 联名 / Altman 减速 / HF 入侵同簇;Kimi K3 开源与多条适配);`items` 与 `tech_items` 只按 link 去重,skill 还允许主题重叠。 +2. **几乎无国内资讯**:prompt 写「不区分国内国外,合并精选」,模型偏国际源;research 分支关闭国内 RSS,企微也不再出国内独立区块。 +3. **可信度不稳**:低质搬运 / 营销号可进榜(如证券之星类),与「以官方/权威为准」不符。 + +样例:`output/2026-07-29.ai-news-research.json`。 + +## Decisions(已确认) + +| 决策点 | 选择 | +|--------|------| +| 国内资讯路径 | **A:继续 research 合并展示**;不恢复国内独立区块;不引入 RSS 回填 | +| 国内配额 | 主列表至少约 30%(10 条 → **≥3 条国内**);`tech_items` **不强制**国内 | +| 去重范围 | **C**:同事件多源只留 1 条 + `tech_items` 相对 `items` 主题不得复述 | +| 可信度 | 国内/国际均以 **官方 + 权威媒体** 为准;不可信则不写,宁缺毋滥 | +| 实现路径 | **Prompt/skill 约束 + `research.py` 解析后硬校验**(推荐方案 2) | +| 条数不足 | **少返回**;禁止为凑满 limit / 国内配额灌低质或同事件条目 | + +## Explicit Non-Goals + +| 项 | 状态 | +|----|------| +| 恢复「国内 AI 时讯」独立企微区块 | ❌ 本期不做 | +| research 不足时用国内 RSS 补齐 | ❌ 本期不做(偏离路径 A) | +| 切回纯 RSS | ❌ 本期不做 | +| LLM 语义嵌入聚类 | ❌ 本期不做(规则 + 实体/关键词即可) | +| 改 `generate.py` research/rss 分支结构 | ❌ 不动 | + +## Architecture + +``` +Cursor Agent (WebSearch) + │ + ▼ +skills/daily-ai-news-research/SKILL.md + research prompt + │ JSON: items / tech_items + ▼ +parse_research_response (link 去重) + │ + ▼ +post_process_research_items + 1. trusted-source filter + 2. same-event dedupe (items) + 3. tech vs items topic filter + 4. CN quota packing (min_cn) + │ + ▼ +_apply_pushed_dedup → generate / wecom +``` + +仍走现有 `fetch_ai_news_research` → `generate.py` research 分支;企微保持一块合并时讯。 + +## Components + +### 1. Skill / prompt(`skills/daily-ai-news-research/SKILL.md` + `fetch_ai_news_research` 文案) + +更新要点: + +- 中英文检索都要做;主列表国内 ≥ `min_cn`(默认 30%),但**只收可信国内源**。 +- 删除「主题可重叠」「必须恰好 N 条硬凑」;改为「不足少返回」。 +- 同事件只保留一条最权威源;`tech_items` 不得复述 `items` 已覆盖的事件/产品发布。 +- 来源优先级:官方 blog/changelog/新闻稿、政府/监管原文、一线权威媒体、学术官方;禁止二手搬运、标题党、不明自媒体、证券营销号(无权威交叉验证则不写)。 +- 用户 prompt 从「不区分国内国外,合并精选」改为「合并展示,国内配额硬性,可信度优先」。 + +### 2. 后处理(`daily/news/research.py`) + +#### 2.1 国内判定(任一即国内) + +1. 可选字段 `region: "cn"|"intl"`(有则优先)。 +2. `source_name` / host 命中国内白名单(量子位、36氪、雷锋网、IT之家、财新、机器之心、钛媒体、虎嗅等)。 +3. 常见中文域(`.cn` 及已知国内 host)。 + +#### 2.2 可信源过滤 + +- 维护 `TRUSTED_HOSTS` / `TRUSTED_SOURCE_NAMES`(国际 + 国内权威;含官方域如 `openai.com`、`anthropic.com`、`blog.google` 等)。 +- 不在白名单 → **剔除**(保守:宁可短列表)。 +- 官方域优先于二手报道;同事件去重时官方源胜出。 + +#### 2.3 同事件去重(items) + +- 在 link 去重之后。 +- 归一化 title+desc;抽取主实体(公司/产品)+ 事件动词簇(开源、入侵、联名、适配…)。 +- 高置信重叠 → 只留排序更靠前且更可信的一条;保守策略避免误杀明显不同事件。 + +#### 2.4 tech vs items + +- tech 与任一 item 同事件,或同主实体且同属「发布/适配/SDK」簇 → 丢弃 tech。 +- 例:items 已有 Kimi K3 开源 → tech 中 HF / 昇腾 / 摩尔线程适配全部剔除。 + +#### 2.5 国内配额 + +- `min_cn = env DAILY_WECOM_AI_NEWS_CN_MIN`;若未设或 ≤0,则 `max(1, lim * 3 // 10)`(10 → 3)。 +- 去重后尽量保证最终 `items` 中国内 ≥ `min_cn`:国内可信条优先占位,再用国际可信条补满。 +- 可信国内不足 → 短列表 + 日志 `news_cn_short:N`;**不用低质源灌满**。 + +### 3. 配置 + +| 变量 | 默认 | 含义 | +|------|------|------| +| `DAILY_WECOM_AI_NEWS_CN_MIN` | `0`(= 按 30% 推算) | 主列表国内最少条数;正整数覆盖 | + +在 `.env.example` 注明;`.env` 可不改(沿用推算)。 + +### 4. 测试(`tests/test_ai_news_research.py`) + +- 国内判定(白名单 / `.cn` / `region`)。 +- 可信过滤:证券之星类 host 剔除;官方/权威保留。 +- 同事件:Altman 减速与员工联名若同属「减速/治理请愿」簇 → 只留 1 条;与 HF 入侵若实体+事件动词不同则可分簇保留(保守,避免误杀)。 +- tech:items 已有 Kimi K3 → 多条 Kimi 适配 tech 全剔除。 +- 配额:混合列表打包后国内 ≥ `min_cn`(在可信国内足够时)。 + +验收可对 `2026-07-29.ai-news-research.json` 跑后处理做人工对照。 + +## Failure Behavior + +| 情况 | 行为 | +|------|------| +| 无 `CURSOR_API_KEY` / Agent 失败 | 与现网一致:`enabled: False` | +| 去重/可信过滤后变短 | 接受短列表;日志 `news_dedup_drop` / `news_cn_short` | +| 可信国内为 0 | 不编造、不 RSS 回填;国际可信条照常(若有) | + +## Files Touched + +- `skills/daily-ai-news-research/SKILL.md` +- `daily/news/research.py` +- `tests/test_ai_news_research.py` +- `.env.example`(可选配置说明) + +## Out of Scope Reminder + +不改 RSS 抓取路径;不改 research/rss 模式切换结构;不恢复国内独立企微区块。