一个找线上副业的意大利新手,把自己踩过的坑做成了一个网页工具。粘贴一条招聘或兼职帖,几秒后给出结论:✅ 看起来正常、⚠️ 小心、⛔ 大概率是骗局。它会把每一条红旗列出来,并引用触发判断的原话。

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

他列出的"机会"清单里全是陷阱:先交"入门套装"费、面试前就要身份证照片、招聘方直接把你拉去 Telegram、远程岗位要求用礼品卡买笔记本"之后再报销"。对没有经验的人来说,每一条都要花真实时间去判断,判断错了要花钱。

这个工具叫 Gig Scam Shield,纯 HTML/CSS/JavaScript,没有构建步骤,也没有后端。它由两层组成。

第一层:规则引擎

大约十条基于正则的检查,覆盖英语和意大利语,针对的都是经典套路:赚钱前先收费、要银行卡或银行信息、面试前要身份证或自拍、礼品卡/加密货币/"存这张支票"、把聊天转到 Telegram 或 WhatsApp、不切实际的报酬、制造紧迫感、转运包裹和"支付处理代理"类岗位、用免费邮箱的"公司"。

每条规则带权重,分数映射到等级。速度快、可解释,用 node:test 做了完整单元测试。

第二层:本地跑的开放权重模型

在 Web Worker 里用 transformers.js 加载 onnx-community/embeddinggemma-300m-ONNX,浏览器支持 WebGPU 就走 WebGPU,否则走 WASM/CPU。它先把一小份手写的 30 条标注帖(骗局/小心/安全)嵌入一次,之后每来一条新帖,就做一次 5 近邻投票,用余弦相似度加权。

应用还会显示最相似的那条参考帖,让人看到它为什么这么判断。

两层怎么配合:规则定下限,AI 只能把结论往上抬一级。一条要收费的帖子,即使模型犹豫,也仍然是"大概率骗局";一条换了说法、绕过正则的骗局,仍然会被抬上来。作者认为,对一个小的本地模型来说,这是正确的信任模型。

演示里有个"狡猾的"例子:规则只看到"礼品卡"(⚠️),但 EmbeddingGemma 认出了这个模式,把它抬到 ⛔。

走不通的那条路

最初的想法是用生成式 Gemma 当分类器:Gemma 3 270M,然后 1B,在浏览器里提示它回答 scam/caution/safe。在 WASM 后端实际能跑的量化版本下,答案不可靠——270M 模型把一条明显的"49 美元注册费 + 交出银行卡"帖子判成了"安全"。

还撞上一个实际障碍:4-bit 导出用了 GatherBlockQuantized 算子,WASM 后端没有实现,所以在 CPU 上需要 fp16/int8 文件,或者用特殊的"no_gather"导出。

换成嵌入 + 最近邻之后,一切都变好了:约 200 MB 而不是约 1 GB,CPU 上每次检查约 2 秒,结果确定,而且可解释。

测试结果

npm test 跑了 10 个单元测试,覆盖两种语言的规则、kNN 投票、组合逻辑和 CSV 引号处理。eval/eval-model.mjs 在 Node 里用真实模型跑 11 条留出帖:

  • 规则:7/11
  • EmbeddingGemma kNN:9/11
  • 组合:9/11

作者自己说得很清楚:这是个很小的集合,只能算 sanity check,不是基准测试。但它确实显示出模型能抓到规则漏掉的改写骗局,比如一条没有任何触发词的"金融代理"资金骡子帖。

另有一个端到端 Puppeteer 脚本,在无头 Chrome 里加载应用,在 WASM 上下载模型,跑四条示例帖,并检查历史记录持久化和 CSV 导出。

首次 AI 检查会下载一次模型,约 200 MB,之后走缓存。

谁会付钱

大概不是求职者本人。作者判断,会付钱的是替别人筛帖的人:Facebook/Telegram 求职群的管理员,他们每天要花几个小时删骗局帖;小型垂直招聘板和社区通讯;职业顾问和学生就业办公室。

对这些人来说,一个便宜、不把申请者数据发给第三方 API 的预筛工具,值一点月费——群管理员每月 5-10 欧元,带审核队列的招聘板更多。因为模型跑在用户设备上,每次检查的运行成本是零,这也是这个价格能成立的唯一原因。

开放权重在这里不是加分项,是商业模式本身。帖子常带个人上下文,群管理员处理的是别人的消息;模型跑在标签页里,什么都不上传,也就不需要写一份承诺"会小心处理数据"的隐私政策,因为数据根本没到过他手上。

闭源 API 按次收费,对一个每月卖几欧元、要检查几百条帖的工具来说,按调用计费会吃掉全部利润。现在干活的是用户自己的 CPU/GPU,静态站点免费托管在 GitHub Pages 上。首次加载后不需要账号,也不需要 API 密钥,客户端应用里也就没有密钥可泄露。

模型还能换。因为权重、ONNX 导出、运行时全是开放的,作者可以从 Gemma 3 270M 试到 1B,读 ONNX Runtime 的真实报错,换一个导出,最后在一个下午切到 EmbeddingGemma。换成闭源 API,就只能接受端点给什么是什么。

"知识"就是 src/examples.js 里一份可编辑的示例列表。招聘板老板可以按自己实际见到的骗局模式、用自己的语言往里加,工具立刻变好,不用付微调账单。

作者在文末说明:自己是初学者程序员,这个项目在规划、代码、测试和调试模型加载上得到了 AI 编程助手的大量帮助;问题本身、产品决策(规则当下限、隐私优先、谁来付钱)和测试选择是他自己的,他确保自己能解释每一个文件。