五美元的婴儿床,可能是一件被召回、根本不允许转卖的产品。而它身上没有任何东西会告诉你这件事。
![]()
这就是ClearToList想解决的问题。在美国,销售被召回的产品是违法的,哪怕是二手、哪怕你只是周末在Facebook Marketplace上翻货的一个人。而大量被召回的东西,恰好就是旧货店里堆成山的品类:婴儿床、摇篮、睡袋、高脚椅、推车、玩具。
开发者把2015年以来的CPSC召回数据全部拉了一遍。大约每5条召回里就有1条是儿童产品,而这些儿童产品中超过一半(55%)在产品数据里压根没列型号或UPC。想知道它是不是被召回,只能靠它长什么样。
市面上的召回查询工具都要文字输入:品牌、型号、你店铺目录里的SKU。一个二手转卖者的收获里这些全都没有——没盒子、没SKU,一半时候连品牌都不知道。
于是有了ClearToList。拍一张物品照片,它找出最接近的召回记录;再拍一张标签照片,用型号或UPC来定论。答案只有三种,以价格圆点贴纸的形式标在你自己的照片上:
- 已召回:物品上的型号或UPC与某条召回匹配,别上架。
- 查标签:它看起来像被召回的产品。仅凭这一点说明不了什么,所以它会要求你再拍标签。
- ⬜ 未找到匹配:什么都没匹配上。这从来不等于“安全”,所以故意没有绿色贴纸。
只有“已召回”才是警报。第一版里,东西只要看起来像被召回的产品也会报警。结果发现很多正常的白色婴儿床长得就像被召回的白色婴儿床,这次评估说服他砍掉了这个逻辑。
买家也能用。看到一条Marketplace商品?截图下来,付钱之前先查一遍。如果看起来像被召回的产品,页面会给出一段话,让你发给卖家索要标签照片。转卖者还能一次查一整批货(最多10张照片),拿到一份CSV或PDF报告。
谁来付钱
目前没人付,现在也不收任何费用。他对商业模式的猜测是:买家和随手查免费,父母不该为了知道一张婴儿床是否被召回而掏钱;转卖者按月付费,换取更大的批量、已查过的物品后来被召回时的提醒,以及每件物品带日期的“已检查”记录——买家回头找你时,这份记录就是你要的东西;寄卖店和儿童二手店按门店付费,它们每天从陌生人手里收二手婴儿用品,风险最高;Marketplace授权是远期设想,把检查嵌进转售应用的发布流程里。
怎么做的
数据来自CPSC召回API,2015年以来的全部召回,约3400条在范围内、约1.27万张产品照片。摄取只拉变化的部分,API挂了就退回缓存,一个GitHub Actions任务每晚刷新并重新部署站点数据。安全座椅不在其中,那归NHTSA管,不归CPSC。
扫描流程分几路:SigLIP 2在约1.27万张召回照片上做图像搜索;Gemma 4读取照片并返回JSON,包含物品类型、品牌、可见文字、型号、UPC;型号和UPC做精确匹配,品牌做匹配,EmbeddingGemma搜索召回文本;加权倒数排名融合把结果合到一起。普通产品照片由图像主导,只有当照片基本就是一张标签、Gemma确实读出了字,文本才会领先。
最终判定靠一条笨规则,不靠模型:编码匹配就是“已召回”,除非物品上的品牌与召回记录矛盾;最接近的照片非常相似就是“查标签”;否则“未找到匹配”。他想要一个十行代码就能读懂、而不是由模型非确定性给出的答案。
选读取模型时,他在30张留出照片上试了Gemma 4 E2B和E4B。第一版提示词很糟,Gemma老说“婴儿产品”而不是“摇篮”;要求给出具体物品类型后两者都到15/30,E4B更快(中位数3.6秒对6.2秒),于是选了E4B。一次完整扫描约7秒。
一个坑是SigLIP放在GPU上留给Gemma和EmbeddingGemma的空间太小,Ollama每次扫描都要换入换出,多花25秒。把SigLIP挪到CPU后问题解决,在CPU上仍然远低于一秒。
站点跑在Render免费层,自身不跑模型。照片检查进入一个小型内存队列,一个独立的GPU worker通过签名的HTTPS外连取任务,不接受任何入站连接,只回传召回ID和匹配到的编码,Render在显示“已召回”之前会用自己的数据副本再核一遍编码。
安全方面:上传按实际字节校验,上限8MB、约3000万像素,并重新编码以剥离GPS和文件里的隐藏内容;照片只存在内存里,检查完立刻删除;按人限流、免费检查有每日上限、队列满了会拒绝、还有上传总开关;worker请求带时间戳和nonce做HMAC签名;Gemma从标签上读到的任何内容都视为不可信,不能决定判定结果,页面配有严格的内容安全策略;没有cookie、没有IP、没有追踪,只有匿名每日计数和一个“这有帮助吗”按钮。
实际学到了什么
每个测试查询都是一张留出的召回照片,被处理成手机拍摄的样子(裁切、旋转、暗光、模糊),这张照片及它的所有近似重复项都从索引里隐藏。唯一的得分方式就是找到同一条召回的其他照片。负样本用的是Wikimedia上同品类、正常未被召回的产品授权照片。规则在开发集上选定,测试只跑一次。
儿童产品的测试照片是物品照,几乎从不显示型号,所以“已召回”在那里基本不会触发——标签照片就是为此存在的。
- 只看物品照片,大约三分之一的时候能看到正确的召回;正确召回进入前三的比例是它的两倍(67%),但他只在匹配非常接近时才展示候选清单,因为每次都展示几乎会把开发集上所有正常产品都标出来。
- 标签才是可信度的来源。“已召回”五次里对四次,在124个相似品上没有发出一次误报。在标签特写上,Gemma读文字能找到图像搜索找不到的召回(60%对18%)。
- 他在动手前就设了止损线:儿童产品前三命中率约60%,否则放弃这个想法。预研冲到71%,测试落在67-69%。但这个数字回答的是“搜索够不够好到可以在上面盖东西”,不是“用户看到什么”。
在线上站点,儿童产品的“未找到匹配”还会显示三张灰色的“最接近的召回供核对”。加上这个,正确召回出现率是63%。代价是98%的正常相似品也会拿到建议,这正是它们被标成灰色、从不被称为匹配的原因。
这些数字跑了三轮才拿到。第一轮里有个Gemma“验证器”,准确率大约一半,还对31%的正常儿童物品报了警。
为什么开源创新重要
账只有在一次扫描基本免费时才算得过来。一个转卖者一周可能查几百件物品。在开源模型上,一次扫描的成本只是API调用的一小部分,而且没有随用量增长的按次账单。这决定了“对父母免费”是一个真承诺还是一次试用。
人们家里的照片保持私密。大家拍的是自己家里的东西,有时旁边就是孩子的东西。这些照片进他的worker、被检查、被删除,从不发给第三方模型API。
他能真正调优。强制Gemma输出严格JSON、把E2B换成E4B、把SigLIP挪到CPU、在开发集上选阈值,这些全部在仓库里版本化,不会因为供应商更新模型而让评估结果漂移。整条流水线以后还能在召回照片上做微调。
站点这周末才上线,所以还没有真实用户故事。如果你在eBay、Poshmark或Marketplace上翻货,或者在买二手婴儿用品,拿一件东西跑一遍,在评论里告诉他哪里对、哪里错。
这是筛查辅助工具,不构成法律建议。召回数据来自美国消费品安全委员会,与CPSC无关联、未获其背书。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.