在手机、手表、机器人这些设备上跑大模型,过去几年的主流答案是拿通用小模型量化了塞进去——Gemma E2B 这类「什么都能干一点」的底座。Cactus Compute 刚刚开源的 Needle 3 把思路反过来:主动砍掉通用聊天能力,只做应用真正需要的三件事,把一个工具调用基座模型压成 8-29 MB 的单文件。

先说它主动放弃了什么

Needle 3 的定位是手机、可穿戴、机器人、智能家居、汽车和微控制器上的 foundation model,但和通用小模型不同,它只干三件事,而且全部在设备端完成:

  • 工具调用:给定 App 暴露的函数列表,模型挑出该调用的那个并填好全部参数;用户一次要两件事,就按顺序返回两次调用;没有工具能覆盖的请求返回空列表,而不是硬猜一个。
  • 结构化抽取:声明一个 schema,丢进一段乱文本,拿回类型化字段——发票、订单、通知、表单都行;解码由从 schema 编译出的字节级语法约束,输出保证能被解析。
  • 文本嵌入:同一个模型还能给句子返回向量,让 App 在本地做检索、匹配和路由。

官方的说法是,用这点容量换来的是「在移动端工具调用上打赢 10 倍大的模型、在抽取上打平 2-3 倍大的模型」——团队自报口径,benchmark 图放在模型卡上,工具调用按精确匹配、抽取按字段 micro-F1 计。

一份权重,从 2 层裁到 20 层

架构上 Needle 3 是一个 Laddered Simple Attention Network:FFN 换成 Monarch Hadamard MLP,注意力是带因果卷积抽头的 GQA,大部分参数放在一块用 gather 读取的 engram n-gram 记忆里——官方称 121M 参数的模型只做 50M 的算术量。训练方式让 2 到 20 层的任意深度都是一个可部署的模型,构建时按设备算力裁剪。

权重用 Cactus Quants 压到 CQ 2-bit(每权重 2.125 bit),整个文件 8-29 MB,每个平台的推理引擎不到 1 MB。另一个值得注意的设计:每个响应都带一个由学习出的置信度头给出的校准分数,引擎据此决定执行、确认还是拒绝——小模型明确知道自己什么时候不该动手。

微调之后才见真章

模型卡里分量最重的数字集中在微调部分:在 DroidCall 上微调后,所有子网络提升 18-36 个点,从 4 层(29M 参数)开始,微调后的子网络就能超过 DeepSeek V4 Flash——同样是官方自报。微调路径也很务实:在冻结的 20 层底座上跑 LoRA,然后一条 build 命令合并 adapter、裁出任意层数、导出 4-bit 文件,跑在同一个引擎上。

工程成熟度有迹可循:Apache-2.0 协议,GitHub 仓库 11.4k star、307 次提交,generation=2 参数保住了 Needle 2 老部署的兼容性。一个刺眼的细节:二进制默认打开遥测,关掉要设 NEEDLE_TELEMETRY=0——端侧隐私叙事下的小刺。

所以呢

Agent 的工具调用正在分层:云端用旗舰模型,端侧用什么?Needle 3 给的答案是「用专门的基座模型换掉通用小模型的聊天梦」。它的赌注是:在 8 MB 的世界里,会填参数比会闲聊值钱。这个赌注成不成立,看明年手机厂商和 IoT 团队接不接。

参考:Hugging Face 模型卡 · GitHub 仓库