为了参加 Hugging Face 的“构建小型模型”黑客松,我想打造一个实用、本地化且超越演示价值的工具。最终成果是“巴基斯坦通知助手”,这是一款以安全为核心的 AI 工具,旨在帮助巴基斯坦民众在点击链接、拨打电话、分享验证码或进行支付之前,识别可疑信息。
这个想法源于一个常见问题:人们经常收到看似来自银行、快递公司、税务部门、交警、公用事业公司、移动运营商或政府部门的短信。有些是真的,很多则是诈骗。难点往往不在于阅读信息本身,而在于知道接下来该怎么做。
“巴基斯坦通知助手”并非真实性验证工具。它不会声称某条信息是官方真实信息还是欺诈信息。相反,它充当一个分流工具。它接收文本或截图,并返回风险标签、简短说明、可见的警示标志以及安全的后续操作步骤。
为何符合“构建小型模型”理念
该项目符合“后院 AI”赛道,因为它专注于一个特定的本地问题:巴基斯坦境内诈骗式通知和可疑信息。
我没有构建一个大型通用助手,而是想看看,当范围明确、产品行为定义清晰、且界面围绕真实用户设计时,一个小型模型能走多远。
我最初测试了一个更大的 Qwen 模型,但最终的生产选择是 Qwen3.5 4B Q8(通过 llama.cpp 运行)。它通过了我的十项评估中的所有高风险诈骗案例和两个截图案例。这使其成为小型模型安全助手的实用选择。
该项目使用了:
Hugging Face Space
→ custom Gradio frontend
→ queued Gradio Server endpoint
→ Modal endpoint
→ CUDA llama.cpp
→ Qwen3.5 4B Q8 MTP GGUF + vision projector
这让我构建了一个小型模型技术栈,既能处理文本也能处理截图,同时保持在黑客松 32B 模型限制以下。
应用的功能
“巴基斯坦通知助手”同时支持英语和乌尔都语。这是最重要的产品决策之一,因为巴基斯坦的可疑信息通常用英语、乌尔都语、罗马乌尔都语或三者混合写成。
乌尔都语模式不仅仅是翻译界面。当用户切换到乌尔都语时,应用会将布局改为从右到左,翻译标题、标签、风险卡片、验证消息和结果控件,同时要求模型用清晰的乌尔都语文字生成评估内容。
这意味着用户可以提交一条可疑消息,并收到完整的乌尔都语安全响应,包括风险标签、解释、警示信号、安全后续步骤,以及在适当时提供可选的回复草稿。对于本地安全工具而言,这一点至关重要,因为当建议以人们最熟悉的语言书写时,更容易被信任并付诸行动。
该应用会查找以下警示信号:
- 紧急威胁或账户冻结用语;
- 索要 OTP、PIN 码、密码、CVV 码、CNIC 详细信息或银行卡数据;
- 可疑的支付链接或个人手机号码;
- 冒充银行、电信公司、快递公司、税务机关或警方;
- 要求预先付费的奖品、退款、工作或福利。
随后,该工具会为用户提供更安全的后续步骤,例如通过独立查证的官方渠道进行核实,而不是使用可疑消息中的链接或电话号码。
我在构建过程中的收获
这个项目让我明白,使用小模型进行构建,与其说是追求最高的基准分数,不如说是要在质量、速度、成本和产品安全性之间找到恰当的平衡。
1. 当范围明确时,小模型效果最佳
最大的教训之一是,当任务被精心限定范围时,小模型的表现可以出奇地好。
Pakistan Notice Helper 不需要成为一个通用的诈骗调查员。它需要识别可见的风险信号,避免过度断言,并提供安全的后续步骤。这使得产品范围、提示词设计和输出约束与模型本身同等重要。
该应用的设计宗旨是:这看起来有风险,以下是警示信号,以及接下来你应该如何安全操作。它的设计目的不是要说:这绝对是真实的或绝对是虚假的。
2. 从更大的模型开始
我从 Qwen3.6 27B 开始,质量非常出色。在我的测试中,它处理可疑消息的表现非常好,并生成了有力且可靠的解释。
问题在于部署成本和实用性。该模型需要更大的显存、更高配置的 GPU 机器,并且在冷启动时需要更长的恢复时间。对于流量不稳定的黑客马拉松演示来说,这并不理想。它虽然能用,但对于我想构建的那种小型、专注的工具来说,过于昂贵和笨重了。
就质量而言,对于这个任务,我会给较大的模型打 95/100 分。但仅有质量是不够的。我还必须考虑成本、速度、冷启动,以及应用能否保持响应。
3. 测试更小的本地选项
在那之后,我尝试转向一个更小的视觉语言模型,MiniCPM-V 4.6 Q8,希望它能更本地化地运行并降低服务成本。
那次实验效果不佳。它在 GPU 上运行非常慢,当我尝试通过 ZeroGPU 运行时,遇到了配额和运行时问题。即使界面显示我还有大约 35 分钟的配额,应用的行为也不可靠。我仍不完全确定是什么导致了这些问题,但这使得部署变得不稳定。
于是我回退,并通过 Modal 部署了该模型。部署本身很快,并在几秒钟内开始响应,但模型质量不够好。它在检测可疑消息方面表现不佳,并且在我的太多测试用例上失败了,所以我不得不放弃它。
4. 寻找“刚刚好”的模型
随后,我查看了 Artificial Analysis 上的小型开源模型排名,找到了最适合这个项目的模型:Qwen3.5 4B。
它足够小,能契合“构建小型化”的精神;速度足够快,能满足应用体验;能力也足够强,能实现我所需的安全行为。与 Qwen3.6 27B 相比,对于这个任务,我会给它打 80/100 分,而较大的模型接近 95/100 分。
但这个权衡是合理的。
4B 模型服务成本更低、加载更快、部署更简单,并且在较小的 Modal 机器上也很实用。这种在模型质量、速度、成本和冷启动行为之间的平衡,使其成为巴基斯坦通知助手(Pakistan Notice Helper)的“刚刚好”模型。
5. 提示词和输出约束至关重要
一些早期版本以有用的方式失败了。
思考模式在返回最终的结构化 JSON 之前就消耗了 500 个 token 的输出预算,因此我在生产环境中禁用了思考功能。一张密集的罗马乌尔都语截图达到了原始的补全限制,因此图片请求现在会获得更大的 token 预算。
另一个模型回复建议了一个看起来官方但未经核实的域名。这是一个严重的产品问题,所以我更新了系统提示词,禁止编造 URL、电话号码、组织名称和事实。
这些修复让系统更安全、更可预测。模型不再只是被要求“检测诈骗”,而是被要求遵循一份严格的安全契约。
6. 乌尔都语用户体验需要真正的产品工作
乌尔都语界面所需的工作也比我想象的要多。
直译听起来很不自然。某些标题需要不同的行高。混合的乌尔都语和拉丁语模型名称可能会意外地重新排序。移动端控件需要更多的垂直空间,尤其是在从右到左的布局中。
我还测试了一个打包的 Nastaliq 网络字体。它单独看起来很美,但在产品 UI 内部却降低了可读性,让界面感觉不那么一致。我移除了它,并恢复使用系统阿拉伯字体栈,同时保留了改进后的乌尔都语文案和从右到左布局。
这些不仅仅是设计细节。它们影响着应用是否感觉清晰、可用和值得信赖。
7. 主要经验教训
最终的经验教训是:最适合产品的模型并不总是最大的模型。
对于这个项目,Qwen3.6 27B 提供了最佳的原始质量,但 Qwen3.5 4B 提供了最佳的产品平衡。它体积小、速度快、成本低,并且对于定义明确的任务来说已经足够好了。
正是这种权衡,让这个项目感觉非常适合“小型构建”。
使用 Codex 进行构建
Codex 帮助我在整个项目中推进得更快,尤其是因为这不仅仅是一个简单的模型演示。巴基斯坦通知助手需要一个自定义前端、一个 Gradio 后端、一个由 Modal 托管的 llama.cpp 服务器、截图支持、乌尔都语模式、测试、文档以及一个更安全的输出管道。
完整代码可在 GitHub 仓库中找到。
我将 Codex 用作工程协作伙伴,而不仅仅是代码生成器。它帮助我检查现有代码仓库、实施变更、运行测试、调试问题、更新文档,并确保 Modal、Gradio 和 llama.cpp 的配置与已部署系统保持一致。
最有用的部分之一是构建了一个自定义的 HTML、CSS 和 JavaScript 界面,同时通过 Gradio Server 保持与 Hugging Face Spaces 的兼容性。该应用没有使用默认的 Gradio 组件布局,而是采用了一个产品风格的前端,在后台与 Gradio 的队列化 API 路由和 SSE 协议进行通信。
这使得最终的 Space 感觉更像一个真正的本地安全工具,而不是一个标准的模型演示平台。Codex 还帮助完成了反复的 UI 优化,包括英语/乌尔都语切换、移动端布局修复、结果卡片、缓存示例、追踪控制,以及更清晰的部署流程文档。
对我来说,最大的好处是迭代速度。我可以描述我想要的产品的行为,审查实现代码,进行测试,然后不断优化应用,直到前端、后端、模型端点和安全约束能够协同工作。
隐私安全的追踪记录
我还添加了一个可选的公开追踪功能,以便人们了解应用的使用情况,同时不会暴露用户的私人内容。
追踪选项在应用内可见,并且可以在每次请求前禁用。启用后,它仅记录有限的请求级元数据,而不是完整的用户消息或截图。文本会被脱敏并截断。图像通过固定的摘要来表示,不会被存储。
追踪记录排除了原始截图、链接、标识符、生成的解释、回复草稿、错误、凭据,以及任何可能意外重复私人细节的自由格式模型输出。
我还发布了追踪数据集,以便人们可以审查其模式,并了解共享了哪些类型的元数据。
您可以在此处查看数据集:
这一点之所以重要,是因为敏感信息不仅可能从原始输入中泄露。即使原始消息被移除,模型解释、回复草稿、提取出的电话号码、URL 或异常消息仍可能重复出现个人详细信息。为避免这种情况,追踪系统仅发布有限的类别、布尔值、计数和固定摘要。
该应用仍会将实时文本和图像发送到私有 Modal 端点进行推理,因此我并不将其标榜为匿名本地推理。用户被警告不要提交敏感个人数据,并且可以在每次请求前关闭公共追踪共享。
目前的结果
这个小型评估套件并非真实世界的准确率评估,但对于回归测试很有用。
最终评估结果如下:
| 测量项 | 结果 |
|---|---|
| 初始严格通过数 | 10 项中通过 9 项 |
| 初始平均得分 | 89.5/100 |
| 最终回归通过数 | 10 项全部通过 |
| 最终回归平均得分 | 100/100 |
| 高风险诈骗案例 | 全部通过 |
| 截图案例 | 两项均通过 |
| MTP 草稿采纳数 | 440 个 token 中采纳 222 个 |
| 草稿采纳率 | 50.5% |
最重要的结果并非分数本身。而是在经过提示词、输出合约和 UI 修复后,一个限定范围的 4B 模型能够保持我所需要的安全行为。
下一步将构建什么
下一个主要功能将是一个智能体验证工作流。
目前,巴基斯坦通知助手(Pakistan Notice Helper)止步于分类阶段。它会读取提交的文本或截图,识别可见的风险信号,并给出安全的后续步骤。在下一个版本中,我希望该应用能更进一步,帮助验证该通知是原件、复制品,还是已在网上被讨论为诈骗。
对于该工作流,我计划使用 Olostep 进行网络搜索和网页抓取。智能体可以搜索网络上的当前诈骗警告,检查是否有其他人报告过类似消息,识别被冒充的组织,并将这些说法与独立发现的官方来源进行比对。
我还计划使用 OpenAI Agents SDK 来管理这个验证工作流。智能体不会简单地随机浏览。它会遵循一个受控流程:提取可能的机构名称、搜索相关警告信息、抓取相关页面、对来源进行排序,然后将证据与模型的评估结果一同呈现。
这个工作流需要严格的安全边界。智能体绝不能信任可疑消息中的链接、电话号码或联系方式。它只能使用独立发现的来源,并明确区分证据与推理结论。
这里也存在产品层面的权衡。当前应用通常在约 5 秒内返回结果,冷启动时约需 9 秒。加入网络搜索、页面抓取、来源核查以及智能体推理,会增加推理成本和响应时间。一个完整的验证工作流可能需要接近 30 秒,这比当前的分诊体验要慢得多。
正因如此,我将黑客松版本的重点放在了快速安全指导上。对于可疑消息,速度至关重要。当前版本能帮助用户暂停操作并快速避免风险行为,而未来的智能体版本则可以在用户愿意等待更长时间时,提供更深入的验证。
最后总结
巴基斯坦通知助手(Pakistan Notice Helper)在设计上追求小巧。
它不试图解决所有类型的欺诈问题。它不自称能验证官方通知。它不能替代银行、快递公司、电信运营商或政府门户网站。
相反,它的作用是帮助用户暂停操作、识别危险信号,并采取更安全的下一步行动。
我花了三个紧张的日子来构建这个项目,包括编写代码、部署、测试、改进和打磨细节。大部分进展来自于与产品本身相处的时间:测试真实案例、发现细微缺陷、调整提示词、优化界面,以及思考每个决策背后的工程限制。
这个过程让项目变得好得多。因为我花了更多时间在测试和规划上,而不是简单地添加功能,所以我有更多空间去思考模型大小、延迟、冷启动、成本、安全边界、乌尔都语可用性,以及一个小模型究竟能做好哪些事情。
我在使用小模型进行构建的过程中学到了很多。最大的教训是,当问题具有局部性、聚焦性且经过精心设计时,小模型会变得强大。它们或许无法解决所有问题,但只要范围设定得诚实,它们仍然能够帮助解决实际问题。
在这个数字世界里,我们被诈骗、欺诈和可疑信息所包围。巴基斯坦通知助手并非完整的解决方案,但它是一个小小的开端:黑暗天空中的一束光,旨在帮助人们放慢脚步、保持更安全的状态,并在为时已晚之前做出更好的决策。
这正是我在此次黑客马拉松中想要构建的那种小型 AI:本地化、聚焦、诚实地面对自身的局限,并对其所服务的人群有用。
项目链接
您可以在此处试用该应用、审查代码并查看公开的追踪数据集:
- 网页应用:Hugging Face Spaces 上的巴基斯坦通知助手
- YouTube 演示:巴基斯坦通知助手演示:检查可疑短信、账单、银行提醒和通知
- GitHub 仓库:kingabzpro/pakistan-notice-helper
- 公开追踪数据集:Hugging Face Datasets 上的巴基斯坦通知助手追踪记录
GitHub 仓库包含应用程序代码、部署配置、文档、模型实验笔记以及其他项目细节。Space 托管了实时应用,而数据集则展示了用于发布有限请求级元数据(不暴露原始用户消息或截图)的隐私安全追踪格式。
注意:该应用旨在提供安全指导,而非法律、财务、银行或政府验证方面的建议。