一个每天自己更新的 AI 动态档案
它做两件事:把散落在几十个源里的 AI 动态收进一个可回溯的本地知识库, 以及把这些数据变成可以被查到、被翻看的一层界面。 没有人工编辑,抓取、分类、归档、成页全部由流水线跑完。
—条归档
—天覆盖
—个信源
每小时自动更新
数据从哪来全部为公开 RSS / Atom / API
信源按「官方 → 学术与开源 → 行业媒体 → 社区」分层,官方源权重最高。当前生效的源与各自贡献:
怎么做的一条四段式流水线
-
抓取
19 个源并发拉取,单源超时 15 秒、失败重试两次,任何一个源挂掉都不影响整体。落一份原始快照到
data/raw/,任何时候都能重放。 - 归档与分类 URL 规范化后取哈希做主键,重复抓取不会产生重复数据。按关键词规则 + 来源先验打上分类和品牌,算一个热度分,写进 SQLite。
- 合并与切片 同一件事被多家报道时,用标题特征相似度合并成一条,标注「N 个来源」。再按北京时间的自然日切成「一天一个文件」。
- 原子发布 所有产物先写进临时目录,全部成功后才整体替换线上目录。构建中途失败时,访客看到的仍然是上一次的完整版本。
技术栈刻意保持零依赖
| 环节 | 选型 | 为什么 |
|---|---|---|
| 抓取与处理 | Python 3 标准库 | 不装任何第三方包,服务器上不用维护虚拟环境 |
| 知识库 | SQLite | 单一事实源,分类规则改了可以拿原始数据重算全部历史 |
| 前端 | 原生 JS,单文件 | 没有构建步骤、没有框架、没有 CDN 依赖 |
| 托管 | Caddy 静态托管 | 无后端进程,抗突发流量,自动 HTTPS |
| 调度 | systemd timer | 有日志、有状态查询、断电后可补跑 |
更新节奏采集与成页解耦
| 时点 | 动作 |
|---|---|
| 每小时 :10 | 抓取 → 归档 → 重建页面。整点错开 10 分钟,避免和源站的高峰撞车 |
| 00:10 | 就是「昨日成刊」那一次。按北京时间的自然日归档,不按抓取时间 |
| 09:10 | 补采。欧美白天发布的内容和 RSS 收录延迟的稿件在这一轮被追回 |
为什么不只在 0 点抓一次?RSS 有收录延迟——很多媒体在 23:50 发的稿,0:10 时还没进 feed。
只跑一次的话,每天最后一两个小时的新闻会稳定丢掉,而 AI 圈的突发常常就在晚上。
改成持续增量采集后,任何一个时点进来看到的都是当下最全的版本。
检索怎么工作
- 按天:左侧日期轴按自然日分组,每天一个独立切片文件,翻历史时才按需加载。
- 按关键词:输入框支持空格分隔的多个词,词与词之间是「同时满足」。比如
deepseek 开源只返回同时提到两者的条目。 - 同义词展开:中文报道很少写英文品牌名,所以搜
deepseek会同时匹配「深度求索」,搜qwen会带上「通义 / 千问」。 - 品牌标签:DeepSeek、WorkBuddy、千问、GPT、Claude 五个标签走全量检索,不受当前日期限制——否则大部分时候点进去是空的。
边界与合规
- 只存标题、摘要和原文链接,不抓正文、不做全文转载,所有内容点击跳转回原站。
- 摘要来自源站 RSS 自带的 description,属于源站主动分发的摘要信息。
- 抓取遵守 robots.txt,UA 中留有本站标识,单源失败即跳过,不做重试轰炸。
- 分类由规则完成,没有使用大模型生成内容,因此不存在 AI 幻觉内容;分类误差率约 10%,属于规则法的已知局限。
- 数据可回溯:原始快照按抓取时间保留,任何时候都能重放出某一天的完整状态。