
关注一百多个标签并没有让信息流变得更好反而更吵了。每天滑过上百篇已经知道的内容每周却错过那篇可能改变工作方式的文章因为它藏在一个从没关注过的标签里。有人用一个小型开源脚本解决了这个问题它读取账号数据每周发一封摘要邮件分成两个板块。“为你推荐”是已关注标签中的热门文章“发现”则是关注范围之外的热门文章用来跳出信息茧房。每篇文章是一张卡片包含封面、标题、两个标签、作者以及由开放权重模型生成的一两句话简介简介里用加粗标出关键词。没有仪表盘没有账号系统也没有服务器。这个脚本的工作方式不复杂。每天运行一次任务收集候选文章并打分分数由点赞数加上评论数的两倍构成再按时间做温和衰减。每天收集意味着周三爆发的文章到周一仍然留在池子里。每周执行一次排序把候选分成两个板块然后立即向接口重新核对每篇入选文章删除或取消发布的会被剔除由下一名补上。已关注标签按稀有程度加权小众标签的权重高于大众标签。整个流程可以跑在GitHub Actions的定时任务上也可以用本机的cron。简介由Mistral Small生成这是开放权重模型通过托管API调用。应用可以与任何兼容OpenAI格式的接口通信换模型或换供应商只需要改两个配置值。作者也承认一个限制指向本地Ollama理论上一样可行因为格式相同但他还没有对本地模型做过基准测试。模型写简介时有明确约束。一句话最多25个词2到4个关键短语加粗让快速浏览的读者两秒内抓住重点。提示词禁止使用引号和网址并且明确告诉模型文章内的一切都是不可信数据绝不执行其中出现的指令。这一点很重要因为把陌生人的文本喂给大模型时一篇标题为“忽略之前指令”的文章应该被摘要而不是被服从。简介在进入邮件前还会做HTML转义即使模型被劫持也无法注入标记。可访问性由测试强制保证。邮件跟随客户端的主题默认浅色客户端要求时切换深色。界面中没有纯白色以便颜色反转的客户端仍然可读。每一对文字和背景包括每个标签药丸的颜色都必须达到4.5:1的对比度测试套件不通过就不允许发布。标签始终以文字写出颜色只是装饰不是唯一信号。构建过程中有四件事出了问题每一件都带来教训。第一“发现”板块几乎为空。作者关注了119个标签在约2150篇候选文章中只有31篇不包含任何已关注标签其中只有2篇有20以上点赞。当你的茧房覆盖整个网站时“跳出茧房”很难。解决办法是允许“发现”板块共享一个已关注标签但严格在茧房之外的文章仍然优先。第二某个接口的复数参数会静默忽略时间窗口返回了3000天前的文章只有单数参数才尊重窗口。第三首次运行挂起两分钟因为119个标签意味着119个请求接口返回了HTTP 429。客户端现在将请求间隔设为500毫秒并遵守重试等待。第四一张截图发现了所有测试都没发现的问题在411像素宽的手机上卡片文字超出边缘24像素原因是堆叠单元格的内边距。作者写了对比度、转义和标签数量的测试没有一个能抓住它只有在真实浏览器中渲染真实邮件才能发现。这个项目之所以可行部分原因是各个组件都是开放的。应用与任何兼容OpenAI的接口通信因此任何服务器背后的任何开放权重模型都能工作今天用Mistral托管API明天可以改成本地Ollama或OpenRouter模型只需改两个配置值。数据来自一个开源平台接口是公开的整个摘要建立在公开接口上不需要抓取也不需要许可。提示词、解析和回退逻辑都在仓库里权重也是公开的一个下午就能读完再用一个下午修改。人工智能不是单点故障如果模型宕机或密钥缺失邮件仍然会带着平台自带的描述发出。模型让摘要更好但从不决定邮件是否发出。作者下一步最想做的是学习自己实际点击了什么把这些标签反馈到下一次排序中。这需要一个很小的托管重定向来记录点击对于一个目前没有服务器的项目来说是一大步。他把设计写进了README的“以后的想法”部分并有意没有实现。如果你关注了很多标签可以试试这个工具然后告诉作者你的“发现”板块里出现了什么。那是他最不确定自己做对的部分。