这是什么
一个为法律研究团队搭建的选题情报工作台,每天自动从 38 个境外信源抓取 网络治理、AI 监管、隐私、平台反垄断相关动态,用 LLM 按 6 维度评分, 挑出最值得写进内部情报简报的选题。
打开网页就能看 3 层抽象的筛选结果:
- 4 档时间窗:过去 24h / 72h / 5 天 / 15 天,各算各的 Top 3
- 双栏分流:左边"事实"(写简报的骨——立法 / 执法 / 官方文件),右边"观点"(写简报的肉——评论 / 分析 / 智库解读)
- 议题聚类:同一议题被多个信源报道时,自动合并,给你完整素材
评分标准
每篇文章由 DeepSeek V3 按 6 个维度打 0-100 分,外加 6 个一票否决项。
6 维度(满分 100)
| 维度 | 权重 | 含义 |
|---|---|---|
| A. 主题对齐度 | 30 | A1 是否属于 5 大治理主题(25 分) + A2 命中关切议题加分(5 分) |
| B. 议题成熟度 | 20 | 风险冒头期(20) / 讨论立法期(15) / 规则成形期(8) / 落地执行期(3) |
| C. 信源权威度 | 15 | S 官方(15) / A 顶律所+顶刊(12) / B 主流(8) / C 行业(5) / D 社媒(2) |
| D. 议题热度 | 15 | 多源验证:被 N 个独立信源覆盖 → min(N × 3, 15) |
| E. 产业可借鉴性 | 10 | 海外做法是否值得参考:利好(10) / 中性(5) / 不利(0) |
| F. 稀缺性 | 10 | 中文世界报道越少分越高(S/A 级英文官方源常得高分) |
v1.4 把原"焦虑点命中"从主力评分(30 分)降级为加分项(5 分),主力改为"是否属于五大治理主题"。 这样评分更贴近信源展现的真实主题,而不是机械命中预设关键词。
五大治理主题(A1 判定范围)
- T1 · AI 治理:AI 法规 / 算法监管 / Agent 治理 / 基础模型安全 / 训练数据 / 标识办法
- T2 · 平台治理:DMA / DSA / 平台责任 / 反垄断(限数字平台)
- T3 · 数据与隐私:GDPR / 隐私法 / 数据跨境 / DPA 执法 / 生物识别
- T4 · 内容治理:在线安全 / deepfake / 虚假信息 / 合成媒体标识
- T5 · 未成年人网络保护:age assurance / child safety / AI companion
任何和这 5 个主题都无关的文章(如通用反垄断、卫星频率、非网络消费者保护等)直接命中 veto #7,不进流水线。
一票否决(命中即 total = 0)
- 纯商业新闻(融资 / 收购 / 财报),无监管角度
- 学术论文(非监管动态)
- 他国政治选举 / 地缘冲突(除非涉及网络治理)
- 30 天内已写过同议题(系统按议题指纹判断)
- 国内主管部门自身执法动态(主管部门一手信息充足,不必转报)
- 产业政策(芯片 / 制裁 / 贸易 / 出口管制)—— 硬黑名单 + LLM 双重过滤
- v1.4 新增:主题不相关—— 不属于五大治理主题任何一个(如通用反垄断、监控定价、卫星频率、环境气候医疗等)
v1.1 内容类型二分
每篇文章除 6 维度分数外还会打 1 个"内容类型"标签:
- 📋 立法事实:具体法案 / 法规的发布、生效、修订、撤回
- ⚖️ 执法事实:具体处罚 / 判决 / 和解 / 调查启动
- 📄 官方文件:监管者发布指南 / RFI / 报告 / 咨询 / 政策声明
- 💭 观点分析:评论 / 社论 / 学术分析 / 智库报告解读
这个标签驱动左右双栏布局:左栏 Top 3 事实(写简报"X 月 X 日,Y 国发布 Z 法"那段), 右栏 Top 3 观点(写简报"国际反应"或"学界质疑"那段)。名额完全独立,互不挤占。
信源
共 38 个 RSS 信源,两条路径接入:
① 直链 RSS(25 个,官方提供 feed)
- S 官方监管者:FTC · NIST · ICO · Ofcom · CMA UK · OAIC(澳)
- A 顶级律所 / 顶刊 / 研究所:Tech Policy Press · Lawfare · FPF · DLA Piper · Inside Privacy · HAI Stanford
- B 主流媒体:Politico EU Tech · Brookings TechTank
- C 行业媒体 / 研究机构:TechCrunch · Platformer · AlgorithmWatch · AI Now · Ada Lovelace · OII · EPIC · CDT · The Register
- D 社媒 / Substack:Import AI(Anthropic 的 Jack Clark)· Don't Worry About the Vase · AI Snake Oil
② 邮件订阅 → Kill the Newsletter! 转 RSS(13 个,绕开付费墙)
有些高价值信源(DataGuidance、MLex、律所 alert、官方 newsletter)只提供邮件订阅、不给 RSS, 通过 Kill the Newsletter! 中转邮箱把邮件转成 RSS 供抓取。
- DataGuidance(OneTrust · 隐私 / AI 监管专业媒体 · 本来付费墙)
- IAPP Daily Dashboard(全球最大隐私/AI 治理 newsletter · v1.4 新增)
- MLex AI(反垄断 / 科技政策专业记者)
- Lawfare / TechPolicy Press / Brookings TechTank(官方 Substack newsletter)
- Inside Privacy(Covington)· WilmerHale Privacy(顶级律所 client alert)
- HAI Stanford · NIST AISI
- EDPS · CNIL · OAIC(欧盟 / 法 / 澳数据保护机构)
⚠️ KtN 转发的文章,卡片上会有 📧 小标签。点"原文"跳到的是 KtN 的邮件归档页,不是原文网站。 真正的内容在卡片摘要里;如果需要原文,按标题去 Google 搜即可找到。
黑名单兜底
以下内容即使进了 feed 也会被自动过滤:
- 产业政策关键词硬过滤:
semiconductor,chip ban,ASML,entity list,tariff,出口管制等 - KtN 事务邮件:含
welcome,activate,verify,trial等关键词的欢迎 / 激活 / 续订邮件 - 产业政策关键词命中后,再让 LLM 二次确认是否"治理监管"议题,不是就归 0 分
信源健康度
正在加载…
每次 fetch 后自动更新。🔴 连续失败 ≥ 3 次(建议去 app/config.py 换 URL 或删掉);
🟡 偶发失败或近 7 天成功率 < 70%(观察几天);🟢 正常;❔ 新加的源尚无历史。
| 信源 | 档 | 最后成功 | 近 7 天 | 最近错误 | |
|---|---|---|---|---|---|
| 加载中… | |||||
版本演进
当前线上运行版本:v1.5(2026-05-07)
v1.5 · CI 可靠性强化(2026-05-07)
- 三层防污染保险丝:针对"冒烟测试 mock 数据污染线上 today.json"这类事故,建立 L1 workflow 层(push 事件产物不 commit)+ L2 清理层(每次真数据跑前自动
purge_mock.py)+ L3 体检层(检测到[XXX] 源·阶段·关切这类 mock 特征 reason 立即raise停流水线),从"已知污染路径"到"未知污染路径"全覆盖。 - workflow 事件分流:
daily.yml里 push/PR 触发时走--use-mock冒烟测试路径(快速验证代码能跑),cron 触发才走真数据路径并 commit 结果,互不串线。 - purge_mock.py:一键清除历史遗留 mock(标签型 reason、FUSE_TEST 之类的测试源名),把流水线状态从"不可信"强制拉回"可信"。
- 评分 reason 格式约束:真实 LLM 评分必须带
A1=/A2=/B=/C=公式痕迹,靠这个特征辨别人工 mock 数据,不需要额外加 schema / 加字段。 - cron 错峰双触发:原来
0 6 * * *(UTC 整点 = 全球高峰)经常被 GitHub Actions 跳过,改成17 6 * * *(北京 14:17)主跑 +17 7 * * *(北京 15:17)兜底;首次跑成功后第二次会自动 skip commit,不会重复污染。 - 漏跑前端告警:流水线每次跑完写
data/last_run.json,前端首页加载时检测now − last_run > 18 小时立即在顶部弹红条,附"前往 GitHub Actions 手动触发"链接。从此告别"页面静默挂着旧数据,几天后才发现 CI 没跑"。
v1.4 · 评分引擎大升级(2026-05-07)
- A 维度重构:从"命中焦虑点"主导 → 改为"是否属于五大治理主题"主导,加"关切议题"作为 5 分加分项。避免机械关键词匹配。
- 新增 veto #7 · 主题不相关:任何非 AI/平台/数据隐私/内容治理/未成年人保护的文章直接否决(如通用反垄断、卫星频率、监控定价等)。
- 双评取高:每篇文章调 2 次 LLM(温度 0.0 + 0.3),合并策略取高分、取非 veto,消除单次抽风。
- KtN 长摘要:邮件源的摘要长度从 600 字扩到 2500 字,让 LLM 能看到完整多议题内容。
- KtN 反营销识别:识别"推销自家讲座"类邮件("Register now"/"Join our webinar"/"How teams should prepare"),封顶 55 分。
- 评分保护 SCORE_DROP_GUARD:rescore 时若新评分比旧评分低 ≥ 15 分,自动保留旧评分(防 LLM 波动覆盖高分)。
- 收藏夹保护:用户 👍 过的文章放入
data/user_favorites.json,rescore_all 时完全跳过,评分永不变。 - 收藏夹远程同步:点 👍 节流 15 秒后自动 POST 到 Vercel Serverless 函数,函数再调 GitHub API 写入仓库,实现跨设备同步。首次打开时自动从仓库拉取合并。
- LLM 主题聚类:每个时间窗(24h/72h/120h/360h)跑一次 LLM 归纳 3-6 个热点主题,带 emoji + 中文关键词,替代原来机械的 fingerprint 聚类。
- title_cn 兜底:前端检测到 LLM 归纳失败或 KtN 通用标题时,从摘要前 60 字扒一个临时标题(带"[未归纳]"前缀),不再直接露出英文垃圾标题。
v1.3 · Prompt 稳定性强化(2026-05-06)
- 加入评分稳定性硬约束、content_type 反例对照表(8 个典型错判场景)、KtN newsletter 多议题识别规则。
- max_tokens 从 800 → 1200,支持更长 reason/多议题拆分。
- 统一对外文案中性措辞(去掉特定机构口径词)。
v1.2 · 用户体验升级(2026-05-06)
- 中文标题归纳:每篇英文文章由 LLM 生成 15-30 字简洁中文标题(
title_cn)。 - 收藏夹:点 👍 自动加入"我的收藏"(localStorage),独立页面查看,支持 JSON 导出导入跨设备。
- 关于本站:本页面。
- 信源健康度监控:每次 fetch 记录每个 feed 的成功/失败,本页下方可视化展示;新增
stale状态识别"能抓但长期无新文章"的源。 - 情报池按时间窗动态扩容:过去 24h 每栏展示 8 条,72h 15 条,5 天 25 条,15 天 40 条;前端支持分段折叠(默认展 10 条,点"展开剩余 N 条"可见全部)。
- 新增 IAPP Daily Dashboard 信源(经 KtN 中转),对冲 DataGuidance 试用到期的风险。
v1.1 · 双栏内容分流(2026-05)
- content_type 四分:每篇文章打 1 个"内容类型"标签 —— 📋 立法事实 / ⚖️ 执法事实 / 📄 官方文件 / 💭 观点分析。
- 左右双栏 + 双 Top 3:左"事实栏"(简报骨架)、右"观点栏"(简报肉),名额独立,互不挤占。
v1.0 · 初版骨架(2026-04)
- 6 维度 100 分评分 + 6 条一票否决规则,首版 prompt。
- 37 个 RSS 信源金字塔(S/A/B/C/D 五档权威度)+ KtN 邮件→RSS 转换。
- GitHub Actions cron 每日自动抓取 + 评分 + 出 JSON,Vercel 静态托管。
- 议题指纹聚类(同议题多信源归并)。
升级原则:历史文章评分默认冻结;只在 prompt 有重大升级时手动触发 rescore_all; 用户收藏的文章永远不 rescore;SCORE_DROP_GUARD 兜底防 LLM 单次波动覆盖高分。
技术架构
每天北京时间 14:00 自动运行:
┌────────────────────────────────────────────────┐
│ GitHub Actions (境外 Ubuntu runner) │
│ │
│ 1. fetch.py 抓 38 个 RSS (境外直连) │
│ 2. score.py DeepSeek V3 按 rubric 评分 │
│ 3. cluster.py 议题聚类 + fingerprint 归并 │
│ 4. build_today.py 出 today.json │
│ 5. git push 把新数据推回仓库 │
└──────────────────┬─────────────────────────────┘
│ webhook 自动触发
↓
┌────────────────────────────────────────────────┐
│ Vercel 检测到新 commit → 重新部署(30s) │
└──────────────────┬─────────────────────────────┘
│
↓
https://xxx.vercel.app/v2/
任何设备打开 → 当日新选题
关键技术选择
- Python stdlib only:fetch/score/cluster/build 全部用标准库(urllib + xml.etree + sqlite3),不引 feedparser / requests / openai-sdk,避免环境问题
- DeepSeek V3:国内直连免翻墙,15 条评分约 ¥0.01,每天 300 条每月约 ¥3,对比 Claude Sonnet 便宜 50 倍,本任务准确率 85-90% 够用
- 双评取高(v1.4):每篇调 2 次 LLM(温度 0.0 + 0.3),合并取高分 / 取非 veto,显著降低单次抽风影响。成本 ×2,但质量稳定性收益大。
- SQLite:零依赖、跟着仓库 git 走,天然有版本历史;每天 briefing.db 被 CI 提交一次,任意时间回滚
- 纯静态前端 + Vercel Serverless:前端不用框架(HTML + CSS + 原生 JS),Vercel 静态托管秒部署;收藏夹同步走 Vercel Serverless 函数(/api/fav)调 GitHub API 写入仓库,任何设备自动同步
- 收藏夹双层存储:localStorage 即时生效 + 节流 15 秒后推到仓库
data/user_favorites.json,服务器永不存"当前用户是谁"(本项目单用户) - LLM 主题聚类(v1.4):每个时间窗跑一次 LLM,把合格文章归纳成 3-6 个主题(🤖 Agent / 👶 未成年人 / ⚖️ 监管等),替代机械 fingerprint 匹配
- 三层防污染保险丝(v1.5):CI 冒烟测试和真数据跑通过 workflow 事件分流(push/PR → mock,cron → 真数据)+ 启动前自动清理 mock + 启动后特征体检 raise 三层串联,任何未来新增的脚本 / 迁移 / 手动 INSERT 写入 mock 都会在流水线前段暴露,保证 today.json 永远干净
数据流时间线
- 06:00 UTC(北京 14:00)GitHub Actions cron 自动启动
- 06:01–06:03 Python 流水线跑完
- 06:03 git push 到仓库
- 06:04 Vercel 检测到 push,自动重部署
- 06:05 URL 指向新版本
GitHub 免费账号的 cron 可能延迟 0-15 分钟(流量高峰更多),所以实际是 14:00-14:30 之间跑完。
使用建议
日常工作流(每天 5-10 分钟)
- 早上打开 URL,切到你要写的时间窗 Tab(日报用 24h,周报用 120h)
- 左栏 Top 3 事实 → 挑 1 条作为简报第一、二段的骨架
- 右栏 Top 3 观点 → 挑 1-2 条作为"国际 / 学界反应"那段的引用素材
- 议题聚类区 → 如果你挑的事实有对应聚类,点开看相关观点,全套素材一次性拿
- 认可的选题点 👍 → 存进"我的收藏",后续复盘用
- 质量差的选题点 👎 → 记下来,下次升级 prompt 时参考
什么时候会失败
- GitHub Actions 故障(历史上每月 1-2 次)→ 当日 URL 显示昨天数据,看 githubstatus.com 等恢复
- DeepSeek 余额耗尽 → 评分失败但 fetch 不受影响,redeploy 前 today.json 还是旧的;充值后重新触发 workflow 即可
- 某个 RSS 源 403 / timeout → 常态,workflow 不阻塞,只影响该源的覆盖度
不建议的使用方式
- 不要把这个 URL 直接当真相 —— 它是选题助手,最终判断权在你
- 不要迷信评分 —— 分数只反映"符合内部关切议题的程度",不反映新闻本身的重要性
- 不要把 URL 公开分享 —— 虽然页面本身是公开的,但你点的 👍 反映你的价值判断
更多
- 源代码:GitHub 仓库
- 评分标准完整规范:见仓库
scoring_spec_v1.md(含 v1.0 + v1.1 patch) - 信源体系:见仓库
research_intel_sources.md - 部署文档:见仓库
DEPLOY.md