票是在他刷 Discord 的时候卖完的。GDG DevFest 班加罗尔站的通知就躺在频道里,没被点开,最后一张票悄悄售罄。差了一天。
他的结论很直接:不缺通知,缺的是知道“什么不能错过”的东西。于是有了 Clutch——一个本地优先的 AI 代理,盯住 Discord、Luma、KonfHub、Hacktoberfest 和 RSS 五个来源,用 Gemma 3 在本地给每个活动打分,只把真正相关的塞进 Google 日历。
规模上,这套东西跑过 330+ 场活动、5 个来源,最终收敛成一份日历。用作者的话说,一个日历,一个信息流,什么形态都行。
Gemma 怎么分辨噪音
兴趣画像是一份 YAML 文件,写清楚你要什么。示例画像里填的是:AI/ML、开源、黑客松、机器人、班加罗尔。跑出来的结果长这样:
- [HIGH] 0.79 用 Omega 构建智能体(班加罗尔)
- [HIGH] 0.77 物理 AI 演示之夜(班加罗尔)
- [HIGH] 0.76 Hacktober Hack(班加罗尔)
- [INFO] 0.19 CSS Grid 布局的 10 个技巧
- [INFO] 0.05 用扭扭棒做花束
- [INFO] 0.05 中世纪欧洲有毒金属的社会动态
花束工作坊根本到不了模型面前——预过滤先按关键词把明显的噪音拦掉。真正进模型的,才轮到 Gemma 3 从兴趣、紧迫度、稀缺性、影响力四个维度打分,输出结构化 JSON,一次调用批量处理 5 场活动。
提示词承担了大部分判断:同城吗?线上吗?值不值得跑一趟?过期活动一律把紧迫度压到 0。评分标准也写死在提示词里——泛泛的博客文章 0.1 到 0.2;同城且对口的黑客松 0.8 以上;话题很好但城市不对 0.2 到 0.4,除非是线上;线上工作坊对口 0.6 到 0.8。
让日历自己催你
提醒不靠弹窗,靠颜色。活动刚进日历是蓝色,截止日临近转橙,再转红,过期自动删除。用的是 Google 日历原生颜色 ID,没有 emoji,时间本身就是触发器,不需要你配置任何规则。
整条流水线是:5 个连接器抓取,预过滤,Gemma 3 打分,写入 Google 日历,再由 Temporal 维持一个 4 小时的持久化循环。连接器并行抓取,一个挂了其余照跑;4 小时定时器能扛住重启,每个活动在 Temporal 界面里都看得见。去重做了三层——内存、SQLite、日历侧,同时活跃的活动上限 10 个。
每个连接器都是独立的 pip 包,装完 Clutch 就能发现它。作者希望社区补上 Telegram、Slack、GitHub、Meetup——任何机会藏在噪音里的地方。
为什么非要本地跑
Clutch 读的是你的 Discord 消息、活动信息流、社区频道。这些是注意力数据。Gemma 跑在本地,意味着这些数据一步都不离开你的机器。换成闭源 API,每一条社区消息都要发去你控制不了的地方。开放权重意味着可以离线、可以在飞机上、可以在防火墙后面跑,模型也能随时换——今天 Gemma,明天 Llama。
作者的建议是别在干活的 MacBook 上跑它。扔到树莓派、旧笔记本、任何吃灰的机器上,让它 24 小时当你的私人注意力服务器。Gemma 在派上确实慢,每场活动约 30 秒,而不是 4 秒——但放在 4 小时的循环里,这不算问题。慢而稳,本来就是重点。
他自己这周就用 Clutch 盯了这个黑客松的截止日。跑通了。
热门跟贴