9 月 18 日,Cactus Compute 发布了端侧模型 Needle 3。开发者可以从同一个 20 层模型里导出 2 到 20 层之间的任意深度,手表、手机、树莓派和更小的控制器各取一档,不用为每种硬件单独训练一个模型。Needle 3 只做三件事:工具调用、结构化抽取和文本嵌入,不陪用户聊天。
发布页上最醒目的两个数字都有前提。宣传的“8–29 MB”和 Hugging Face 上实际可下载的 20 层文件对不上;“从 4 层起超过 DeepSeek V4 Flash”出自厂商在单一测试集上微调后的实验,基础模型没有做到。
浅层子网在训练时就练过
一个普通的 20 层模型直接砍到 8 层,剩下的模块从没学过在缺少后续计算时独立完成任务。Needle 3 训练时就要求多个深度都能用。20 个网络块按固定顺序加入:先选首尾两块,再不断在已选块之间最宽的空档补一块,所以浅层子网里也有前、中、后部的计算,不只是最前面几层。2 层到 20 层共 19 个子网,一层套一层。
按 Cactus 的博客,训练时大部分步骤跑完整模型,20% 的步骤抽一个较浅深度,并用完整模型的输出去约束它。官方公布了 2、4、8、16、20 层五档的结果,参数量从约 2500 万到 1.21 亿;命令行的 --layers 参数可以导出其中任意深度。
按 .cact 格式说明,20 层模型的上下文是 8192 个 token,局部注意力窗口为 1024 个 token。开发者提供工具说明或数据结构,解码器把它编译成字节级语法,输出一定能解析成 JSON。这只保证格式。选错工具、填错参数、该调用时没调用,仍然要靠模型本身。
为了减少误执行,引擎给每个调用打置信分,低于 0.1 的放进 suppressed_calls,不直接执行。另有一组规则拦截:请求里否定了被调用工具的动作、必填的枚举值用户根本没提到、把目的地抄进出发地等情况,调用同样会被扣下。
基础模型接近 DeepSeek 的只有手机指令一项
Cactus 公布了六项评测:Mobile Actions、DroidCall、BFCL v4 三项测工具调用,DSTC8 和两项 SNIPS 测字段抽取。Needle 3 用发布的低比特文件运行,开着置信门控;其他开源基线在 vLLM 里以 FP16 精度运行;DeepSeek V4 Flash 走云端 API。这样能比较输出结果,但精度、运行环境和硬件都不相同。
Mobile Actions 有 961 条手机指令,20 层 Needle 3 得分 86.0,DeepSeek V4 Flash 为 88.4,12 亿参数的 LFM2.5 为 82.4。换到要求按顺序完成多次调用的 DroidCall,Needle 3 为 47.0,DeepSeek 为 60.5。BFCL v4 上 Needle 3 为 50.2,低于 DeepSeek、LFM2.5 1.2B、LFM2.5 350M 和 Qwen3.5 0.8B。
“从 4 层起超过 DeepSeek”来自另一组实验。Cactus 用 DroidCall 数据把每档子网微调一轮,测试时强制模型输出调用。4 层子网从 34.5 升到 62.5,高于同图中 DeepSeek 的 60.5;20 层升到 70.0。这说明同一份领域微调能带到很浅的子网上。它说明不了 2900 万参数的模型有了 DeepSeek 的通用能力:模型已经见过目标任务的数据,测试也没有涉及闲聊、知识问答或开放式推理。
抽取任务上差距更明显。DSTC8 对话槽位抽取,20 层 Needle 3 的字段 F1 是 40.7,DeepSeek 为 80.0,2.3 亿参数的 LFM2.5 也有 53.0。做发票、表单这类业务,语法约束只能保证返回的结构合法;字段找没找全、值对不对,要拿自己的数据重新测、重新微调。
权重和代码开放,训练过程没有开放
Needle 3 的权重和代码用 Apache 2.0 许可。开发者可以查看导出代码,下载各平台的引擎,在本地用 LoRA 训练适配器。首批生产构建的提交里,引擎覆盖 Android、iOS、WebAssembly,以及 RISC-V 和 MIPS 等嵌入式目标。
开放有两处边界。第一,官方说基础模型用 3600 亿 token 的专有结构化数据训练。本地微调和导出是 4 bit,发布版的 2 bit 文件要靠 Cactus 托管平台上的后训练和量化流程生成。代码可以审查,但靠公开材料没法从数据开始复现同一份权重和全部跑分。
第二,文件大小。发布页先写“8–29 MB”,后面又写“9 到 29 MB”。Hugging Face 上的 20 层 needle3.cact 是 35,335,380 字节,约 35.3 MB,比 29 MB 的上限多出约 22%。原因之一是文件并非全部按 2 bit 存储:嵌入层和多通道残差的混合矩阵用 4 bit,文件里还有归一化参数和分词器等内容。35 MB 依然很小,但做闪存、安装包和内存预算时,要按实际下载的文件算,不能拿参数量乘以标称位宽。
离线部署还要检查遥测。3.0.1 版源码显示,Python 包默认在后台上报事件名、版本、操作系统、架构和一个随机安装标识,代码注释写明不发送提示词、输出或路径。设置 NEEDLE_TELEMETRY=0 或 DO_NOT_TRACK=1 可以关掉。
团队是否采用 Needle 3,可以先回答三个能测量的问题:在自己的工具集上错误调用率是多少,最低能接受几层,实际文件和峰值内存能不能放进设备预算。


