源驱动管道样板参考

属性

中文

源驱动管道样板参考(tech-ai 栏目)

用途 1. 其他栏目(政治 / 经济 / 农业 / 文化 / 军事 / 大湾区)照此模板铺开的参考。 2. 日后检讨与修改参数变量的依据(见第 7 节参数清单)。 状态:tech-ai 栏已端到端跑通、用户验收满意。本文记录其「选源 → 筛选 → 打分 → 文章规格 → 翻译」全链路,及每一项可调参数。 铁律前提:网站(SSG 静态站)零智能;所有智能在平台完成(选源 / 抓取策略 / 跨源去重 / 评分 / 摘要重写 / 英文翻译 / 质量判断)。网页只渲染平台产出的静态结果。

0. 管道总览

40 个源站(RSS/主页)
   │  逐源抓 feed → 失败退抓主页
   ▼
候选池(每源最多 6 条,URL 去重)
   │  跨源同题去重(标题 Jaccard ≥ 0.5 归组)
   ▼
打分排序 score = recency + rel×0.5 + coverage×0.3 + heat×weight
   │  热度层(HN/百度/微博/Google趋势) 作为 heat 权重注入
   ▼
取前 20(每源≤2、每组≤2 双闸门)
   │
   ▼
落库 MD(frontmatter + 全文 + 原文链接)
   │
   ▼
平台智能加工:agent 译题/摘要(卡片墙) + DeepSeek 全文译中(详情页)
   │
   ▼
generate.py → entities.db → ssg.py → ~/Developer/PersonalOS-site/(8125 本地站,Obsidian 可见)

1. 信息源选择(选哪抓)

1.1 规模与结构约定

1.2 源配置字段(columns.registry.yaml 每源)

| 字段 | 含义 | |---|---| | name | 源站显示名 | | url | 站点主页 | | feed | RSS/Atom 地址(优先) | | region | cn 国内 / intl 国际 | | industry | 行业标签(ai/lab/media/venture/hardware/engineering/consumer/research…) | | lang | zh / en(决定后续是否走全文译中) |

1.3 tech-ai 40 源清单(参考模板)

国内 10(全中文、有 RSS)

| 源 | industry | lang | |---|---|---| | 量子位 | ai | zh | | 机器之心 | ai | zh(feed 用 RSSHub 镜像,直连 /rss 被拦) | | 新智元 | ai | zh(RSSHub 镜像) | | 雷锋网 | hardware | zh | | 36氪 | venture | zh | | 钛媒体 | venture | zh | | 虎嗅 | venture | zh | | InfoQ 中国 | engineering | zh | | 爱范儿 | consumer | zh | | 少数派 | consumer | zh |

国际 30

国际清单引自 2026 真实评测(34 天 2234 条故事)验证非僵尸源。

2. 报道筛选逻辑(收什么)

  1. 候选收集:每个源解析 feed 取条目,每源最多取 per_source × 3 = 6 条候选(默认 per_source=2),按 URL 去重(同 URL 不重复入池)。
  2. 跨源同题去重:标题 token 化后 Jaccard 相似度 ≥ 0.5 判为同一事件,归为一组(group)——把「多家媒体报同一件事」并成一条,防刷屏。
  3. 入选双闸门(取前 20 时)

- 同一最多入选 2 条(per_source); - 同一去重组最多入选 2 条(防同事件霸榜); - 直到凑满 top_n=20

  1. 时间窗:只收 lookback_days=3(近 3 天)内的报道。

3. 排序评分模型(谁排前)

每篇候选得分:

score = recency + rel×0.5 + coverage×0.3 + heat×weight

| 分量 | 计算 | 当前系数 | 说明 | |---|---|---|---| | recency 新鲜度 | 1 / (1 + 小时数/24);无发布时间按 48h | 1.0 | 越新越高 | | rel 主题相关 | 标题命中 AI_KW 关键词表则 +0.5,否则 0 | 0.5 | 科技栏专属加成(硬编码,见第 6/8 节) | | coverage 跨源覆盖 | 该去重组候选条数 × 0.3 | 0.3 | 越多家媒体报越高(=事件热度) | | heat 真实热度 | HeatIndex.heat_of(标题)(0~1)× weight | weight=0.4 | 来自热度层 |

热度层(heat.py)如何建

实测特性:Google Trends 是广谱大众热点,与专业 AI 新闻标题重合度低 → 平时对科技栏 heat 贡献小,等 AI 大事件冲上 google 趋势才发力。百度+微博+Google 这组「大众热度」更适合政治/经济/文化/军事栏。

4. 文章规格(落库长什么样)

每篇落库为 01-observation/raw/YYYY/MM/<日期>-tech-ai-<md5前8>.md

4.1 文件头属性(frontmatter)字段

| 字段 | 含义 | |---|---| | ulid / slug | 全局 ID(ULID + slug 双键) | | type: article / column: tech-ai | 实体类型 / 所属栏目 | | title / category | 标题(加工后为中文)/ 栏目中文名 | | date / rank / heat / heat_sources | 日期 / 排名 / 热度分 / 命中热度源 | | summary / summary_status | 摘要(初为原文前 200 字)/ pending_aiai_done | | source_id / source_url | 出处名 / 原文链接 | | region / industry / lang | 国内/国际 / 行业 / 语言 | | compliance_tier: internal / visibility: admin | 合规层 / 可见性(私密) | | relations: [] / original_id / fetched_at | 关系表 / 原文 MD5 / 抓取时间 |

4.2 正文结构

- 英文 14 篇:补 title_origin(存英文原标题)→ 正文前插 ## 中文摘要(agent 译)→ 正文后追加 ## 全文译文(DeepSeek); - 中文 6 篇:重写中性摘要(不照搬站方 description)。


5. 英文翻译(两层分工 · 管道默认)

- 实测:14 篇全文译中账单 ¥0.04,成本可忽略。 - 网络纪律:DeepSeek 国服须强制直连(绕过科学上网);Google Trends 须走科学上网——两脚本各自声明代理,VPN 切「规则/分流模式」即可并存。


6. 已知偏差 / 风险

  1. rel 相关性硬编码 AI 关键词:对科技栏是加成;其余栏(政治/经济…)目前 rel 恒为 0,评分退化为「新鲜度+覆盖+热度」。铺开其他栏需给 crawl_sources.py 加「每栏关键词表」配置(见第 8 节)。
  2. 沙箱超时 ≠ 管道错误:部分国际源(Google AI / Meta AI / HuggingFace / xAI / Guardian 等)在沙箱连不通,爬虫已优雅跳过;用户本机 launchd 跑可通
  3. trafilatura 自带联网在沙箱被挡 → 正式爬虫改「会话预下载 HTML 再交 trafilatura 解析」,更快且能控频。
  4. 机器之心直连 /rss 被拦 → 配置已改 RSSHub 镜像。

7. 参数变量清单(检讨与修改依据)★核心

类别说明: - YAML 可调 = 改 columns.registry.yaml 即可,用户零代码; - 代码硬编码 = 需 agent 改 crawl_sources.py / heat.py 才生效。

| 变量 | 当前值 | 位置 | 类别 | 含义 | 检讨依据 / 建议可调范围 | |---|---|---|---|---|---| | lookback_days | 3 | registry | YAML | 只收近 N 天 | 新闻时效性强→3 合理;深度栏可放宽到 5~7 | | top_n | 20 | registry | YAML | 每栏精选条数 | 卡片墙密度;可 15~30 | | per_source | 2 | registry | YAML | 每源最多入选 + 候选上限基数 | 防刷屏;候选实际取 per_source×3 | | dedup | true | registry | YAML | 是否跨源去重 | 开关;阈值 0.5 在代码 | | jaccard 阈值 | 0.5 | crawl_sources.py | 代码 | 同题判定相似度 | 0.4~0.6;过低误并、过高漏并 | | 候选上限 per_source×3 | 6 | crawl_sources.py | 代码 | 每源入池候选数 | 影响覆盖率 vs 速度 | | 每源入选上限 | 2 | crawl_sources.py | 代码 | 同栏同源最多几条 | 与 per_source 联动 | | 每组入选上限 | 2 | crawl_sources.py | 代码 | 同事件最多几条 | 防同事件霸榜 | | rel 系数 | 0.5 | crawl_sources.py | 代码 | 主题相关加权 | 可 0.3~0.8 | | coverage 系数 | 0.3 | crawl_sources.py | 代码 | 跨源覆盖加权 | 可 0.2~0.5 | | recency 系数 | 1.0 | crawl_sources.py | 代码 | 新鲜度基准权重 | 通常固定 1.0 | | AI_KW | AI 关键词表 | crawl_sources.py | 代码 | 相关性命中词 | 硬编码,仅适配科技栏;其他栏须改为每栏关键词表 | | heat.enabled | true | registry | YAML | 是否接热度层 | 开关 | | heat.weight | 0.4 | registry | YAML | 热度在总分权重 | 0.2~0.6;调高→更偏大众热点 | | heat.hn.top | 30 | registry | YAML | HN 取前 N | 10~50 | | heat.hn.query | "AI" | registry | YAML | HN 关键词搜 | 其他栏改对应词(政治=politics?经济=finance) | | heat.baidu | true | registry | YAML | 百度热搜 | 开关 | | heat.weibo | true | registry | YAML | 微博热搜 | 开关(可能 403 跳过) | | heat.google_trends.geos | [US, HK] | registry | YAML | Google 趋势地区 | CN 已停服;专业栏可仅留 US | | schedule | "0 10 *" | registry | YAML | 每日抓取 cron | 与其他栏错峰 | | summary | ai | registry | YAML | 摘要方式标记 | 平台侧加工信号 | | DEEPSEEK_MODEL | deepseek-v4-flash | 环境变量 | YAML/环境 | 译中模型 | 量大可换 pro | | max_tokens(译中) | 8192 | deepseek_xlate.py | 代码 | 译中上限 | 长文防截断;可调 6144~16384 |


8. 铺开其他栏的注意事项

  1. 每栏各自 40 源:政治栏 40 站 ≠ 科技栏 40 站;行业、国内/国际完全分开。
  2. 每栏需各自关键词表:当前 rel 用硬编码 AI_KW,仅适配科技栏。铺开前须把「每栏关键词」提为 YAML 配置(如 keywords: [政治, 政策, 选举…]),否则其他栏 rel 恒为 0。
  3. heat.hn.query 按栏改:政治→politics、经济→finance 等,让 HN 热度贴合栏目。
  4. Google Trends 贡献评估:专业栏(科技/财经)与大众趋势重合度低,heat 主要吃百度+微博;大众栏(政治/文化/军事)吃 Google+百度+微博更明显。
  5. 先一个栏目端到端调通再铺开(用户定调):建议政治 / 经济先开刀。

9. 相关文件索引

| 文件 | 作用 | |---|---| | 01-observation/columns.registry.yaml | 栏目 + 源站 + 热度 + 调度配置(真相源,用户可读可改) | | 01-observation/_crawler/crawl_sources.py | 源驱动抓取 + 去重 + 打分 + 落库 | | 01-observation/_crawler/heat.py | 热度层(HN/百度/微博/Google Trends) | | build/deepseek_xlate.py | 详情页全文译中(DeepSeek) | | build/ai_digest.py | 有 key 时批量摘要/翻译备选(默认走 agent 直译) | | build/generate.py | frontmatter + 链接 → entities.db / relations.db | | build/ssg.py | 渲染静态站到 ~/Developer/PersonalOS-site/ |


本文档为 tech-ai 样板,其他栏目照抄结构并替换第 1.3 / 第 3 / 第 7 节中标注「按栏改」的参数即可。参数检讨以第 7 节清单为准。

出向关系

入向关系

← 返回全球观察