周五晚上,恐怖片选好了,零食摆好了,灯也关了。然后画面里出现一只狗。这个晚上就毁了。

打开网易新闻 查看精彩图片

有人为这件事写了个工具。名字很直白,叫 caniwatch,一个 Python 命令行程序。你给它一个片名,再告诉它你不想看到什么,它去查内容指南,把查到的来源列出来,最后给一句简短建议。

作者做它的动机写在开头:爱恐怖片,但讨厌毫无预警的动物虐待情节。同一部电影,两种完全不同的夜晚。

查不到,就说查不到

这个工具最值得注意的一条设计是:信息缺失时,结果保持"未知"。它不会因为没搜到相关内容,就默认你可以放心看。

这条规则听起来像常识,但在内容筛查类工具里恰恰是最容易被牺牲的部分。沉默被当成安全,是这类产品最常见的偷懒方式。

技术栈是 Python 加 Typer、Rich、Pydantic,本地通过 Ollama 跑 Gemma 4。片名识别交给 TMDB,一般性内容提示交给 Tavily 搜索。本地模型拿到这些证据后,和你的个人顾虑做比对,输出一份带来源引用的结构化评估。

顾虑不出本机

作者专门强调了一点:你的顾虑不会进入公开搜索的查询词,它们留在你自己的机器上。

这也是他选择本地开源权重模型的理由。个人内容顾虑本身就可能是很私人的事,把细节发给托管模型的 API,很多人不愿意。本地跑模型,意味着每次检查不会产生托管推理账单,提示词可以自己看,模型可以自己换,流程可以自己改。

电影资料的检索仍然需要联网,但涉及个人的那部分在本地完成。

作者对定位说得很清楚:目前是一个可用的命令行原型,一个人做的。潜在付费人群是那些想要个性化内容建议、又不愿把敏感顾虑交给托管 AI 服务的影迷。他设想中的形态是一个小型付费应用,让这套东西走出终端。

代码用 MIT 协议开源,README 里有配置说明。

第一个用户没付钱

第一个使用者是他的伴侣。没付费,但喜欢这个概念,两人打算以后的恐怖片之夜都用它。

这个项目是作为 Hacktoberfest 开源 AI 挑战第二周"副业"主题的投稿发布的。作者最后写了一句:万圣节快乐。

一个只解决一个人具体麻烦的小工具,往往比一份宏大的产品路线图更能说明问题出在哪。内容筛查这件事,难点从来不是搜不到资料,而是搜不到的时候,工具愿不愿意老实承认。