← 返回文章选择

想做一个帮我挑文章的 RSS 阅读器

AI Reader 的起点:订阅已经收得够多,想把每天挑选和阅读接在一起。

RSS 订阅里放着技术、财经、安全、AI、产品和地缘政治,看着挺全,真打开却无从下手。标题从上往下排,同一个话题能来好几篇;一篇只是转述发布消息,另一篇写了实现过程,在列表上看不出多少差别。为了决定读哪篇,往往已经点开了好几篇。

所以想做一个 AI Reader。抓取继续交给现成的阅读器,我想自己做的是挑选之后的界面:值得读的理由放在标题旁边,点开就是正文,读到不明白的地方接着问,不用把文章复制到别处再补一遍背景。

一个总分说不清为什么要读

最初打算给评分留五个维度:技术价值、商业价值、趋势价值、时效性和深度。

技术文章有代码、有过程,我可能愿意多花时间;市场消息有时当天知道就够了。这两类如果只放一个总分,很难说清为什么要读,也很难说清该今天读还是可以放着。分开以后,可以按当天的需要挑,不用每天追着同一份高分榜:想跟进展,先看当天的消息;想弄清一段实现,技术文章留着慢慢看。

让模型直接打绝对分,本身也不是它擅长的问法。Pairwise Ranking Prompting 的摘要说,逐点打分和整列排序这两种提示,现成的 LLM 并没有真正理解,改成“这两篇哪篇更相关”的成对比较要轻松得多。所以分数我只当粗筛用,真正帮我做决定的得是后面那段理由。

五个维度是四月的打算。后来代码里落下来的是三个 0–1 的维度:relevance、credibility、novelty,外加 rationale、evidence、summary 三块,由一份 JSON schema 在调用模型那一侧卡住结构。维度少了,理由反而更重了。

理由要能在正文里对上

我还想让评分附上理由,而且能在正文里找到对应内容。说一篇文章“分析深入”,究竟是比较了不同办法,还是只是篇幅长?理由得指到正文里的位置:哪几段在比较、比的是哪几种办法。扫一眼这几段,就能判断理由成不成立,再决定读不读。

理由看不明白,我还是得从头扫一遍,评分就没帮上忙。

这件事我比较在意,是因为模型当评委有现成的毛病。MT-Bench 那篇论文列了位置偏差、冗长偏差和自我增强偏差,同时也给出 GPT-4 评委和人类偏好的一致率超过 80%,和人与人之间差不多。能信一部分,但“写得长”很容易被当成“分析深入”,这正是上面那个问题。理由能指回原文,就是给这种偏差留一个人工核对的口子。

“指到正文里的位置”也有现成的做法。Anthropic 的 Citations 文档会把文档按句切块,回答里的引用直接带 cited_text 和位置索引,纯文本是字符区间,PDF 是页码。要做的事就变成:把正文和定位一起存下来,而不是只存一句评语。

后来项目也是这么落的。迁移脚本里分数、理由、证据、摘要是四个独立的 jsonb 字段,另有一张 model_calls 表记 provider、模型、schema 版本、状态、耗时和错误码。项目的 ADR 0035 写得更直接:主模型的输出不因为来自主模型就被信任,必须先过本地 schema 校验才能进库,修不好的带着原因隔离。

商业产品里,Feedly AI 的页面说模型会实时收集、分析、排序来自数百万来源的信息,配一套预训练分类,但没说排序依据,也没有能核对的理由。我想要的正是它没给的部分:为什么值得读,证据在哪几段。

第一版只做挑和读

Miniflux 已有订阅管理、刷新、已读和星标,还有读取文章的 API。第一版沿用它,少写一套抓取器。源站格式、全文提取、刷新失败这些问题已经够占时间,我暂时不想全接过来。

具体能白拿什么,官方文档写得很清楚。API 的条目列表支持搜索、按状态过滤和分页;fetch-content 接口能把原文抓下来,update_content=true 时把标题和正文写回数据库。功能页还说明它用本地 Readability 解析器提取正文,全文搜索由 Postgres 提供,整个程序只依赖 PostgreSQL。抓取和全文都有了,我只需要做挑选那一段。

从 Miniflux 抓文章到评分、挑选、阅读和提问的流程

文字版流程
Miniflux 抓文章
↓
读取正文,生成评分与阅读理由
↓
列表里选文章 → 打开正文 → 围绕这篇文章提问

这张图是四月给第一版划的范围。后来评分写入本地 Postgres,调用模型的任务放进 scorer-worker,页面也慢慢长成了工作台;在这个起点,这些还没有都实现。

抓取这条边界后来也挪了。项目的 ADR 0009 把 RSS/Atom 入库收回到 Python worker,用 httpx 取 feed、feedparser 解析,TypeScript API 只管源管理,Miniflux 从代码里消失了。开头那个“同一个话题来好几篇”,后来也有了专门的相似度证据表,用 pg_trgm 给标题和链接建索引;这些记录只当折叠的依据,本身不隐藏也不排名。所以“沿用 Miniflux”是第一版的决定,用它先把挑和读验证出来,划算;等挑选要碰到去重、正文质量这些事,抓取就不得不自己管了。

浏览器插件、替代收藏夹、整理知识库都可以继续做,但我先放着。能挑出今天想读的几篇,并在这里把其中一篇读完,第一版就有继续维护的理由。

留下几句话 读者来信

读到这里,有什么想法?欢迎留下你的看法。