Instagram 里有个收藏夹叫「python」,还有一个叫「ai」。每次刷到一条号称60秒教会你点什么的短视频,手指一点保存,心里就觉得自己已经学会了。
那个文件夹从来没被打开来学过。保存这个动作本身就像进度条,既然有了进度,就不必真的去读。这是作者自评「我身上最懒的一件事」。
他的解法不是逼自己自律,而是找了个更懒的办法:让一只树懒去读。
它到底干了什么
这个项目叫 SlothShelf,定位是本地优先的 AI:读你存了却从没打开过的链接,然后告诉你哪几条值得花时间。
用法很直接——粘贴链接、丢一个书签文件,或者导入 WhatsApp 的「发给自己」记录。跑在你自己笔记本上的 Gemma 模型会逐页读完,为每个链接写一张卡片:
- 结论:读、略读还是跳过,附一行理由
- 一段话讲清要点
- 4 到 8 个关键点:工具、命令、步骤、数字
- 一份「值得知道」清单,列出文中提到的工具和概念,外加读完之后可以试的一件事
到了周日,它生成一份 PDF 摘要:最值得看的几条给出完整细节,剩下的按主题分组,再附一份「可以放心跳过」清单,以及所有它读不了的内容。逻辑很简单——该读的是这份 PDF,不是那 40 个标签页。
技术栈:本地模型 + Atlas 当记忆
写卡片的是 Gemma(gemma2:2b),做向量的是 nomic-embed-text,两者都通过 Ollama 运行,页面文本不离开笔记本。这里用上了 Ollama 的结构化输出:模型必须返回符合 Pydantic schema 的 JSON(结论、关键点、术语、主题),应用拿到的是能直接入库的数据,而不是还得自己解析的一段散文。
MongoDB Atlas 在这里不只是存储,而是记忆。三个集合分工明确:
- Links:一个链接一条文档,含卡片和 768 维向量
- Memory:我的目标,加上每个标签的权重——我对卡片做出反应时权重会动(读 +1,喜欢 +2,跳过 -1)
- Digests:每个 ISO 周一条文档
Atlas Vector Search 承担两件事。一是按意思找:输入「那个讲评估 RAG 的东西」,能召回最接近的已存链接,哪怕原文里根本没有这些词。二是口味检索:在 Gemma 判断一个新链接之前,先把它此前喜欢过的相近链接拉出来塞进提示词。所以这只树懒不是拿一套通用的「好内容」标准打分,而是对着你真正留下来的东西打分。
它还会给自己记分。应用会显示一个一致率:在我实际处理过的链接里,我的选择和树懒的结论有多少次对得上。一个告诉你该读什么的工具,本来就该告诉你它有多准。
为什么非要用开放模型
一个收藏夹文件夹暴露的东西,比你以为的多。它显示你在盯哪些职业方向、对哪些技能心虚、怕哪些黑客松。作者不想把这份东西交给一个 API,而开放权重让他不必交。
开放模型做到、闭源 API 做不到的三件事:
- 默认隐私:Gemma 在本机读页面,Atlas 只存卡片、向量和我的信号
- 没有计价器:读一整个积压意味着几百次调用,本地跑一堆内容花的是时间不是钱,也就没人需要判定某个链接「不值得花 token」
- 零件可换:卡片模型在 .env 里就一行,Ollama 能跑的任何模型都能上,每条提示词都能查看和修改
真实数字
作者拿自己的收藏跑了一遍:导入链接 6 条,Gemma 读了 5 条,结论是 3 条读、1 条略读、1 条跳过;从摘要里真正打开的链接 4 条。一致率 78%,样本是 42 条链接。
导入 6 条、打开 4 条——这个转化率放在任何「稍后读」工具上都算体面。前提是,你得先承认自己不会读。
热门跟贴