Cactus Needle 2 是一款仅 45M 参数的 Agent 模型,二进制 14MB、内存占用 28MB,可在树莓派和低端手机运行。核心设计用 Walsh-Hadamard 变换替代 FFN,256-token 滑动 KV 窗口固定内存,Raspberry Pi 5 上达 ~500 tok/s。
TL;DR:tool-calling 现在已经可以是 45M 参数模型承担的工作负载。Needle 2(Apache-2.0)以单个 14MB 二进制文件发布,在约 28MB 内存中运行完整会话,目标是手机、Raspberry Pi 和 MCU。我没有测试或运行过它;这是对官方 README、model card、产品页面和架构论文的综述。
数字在算术上是对的。45M 参数以 CQ2(~2 bits/weight,在预训练时量化而非事后量化)计算为 45e6 × 2 / 8 = 11.25 MB——这是 14MB 二进制文件的主体,与"权重从不解压到 RAM"一致。256 token 滑动 KV 窗口配合以 KV sink 固定的工具,使会话内存保持在 28MB 左右,与对话长度无关。官方速度声称:Raspberry Pi 5 上约 500 tok/s 解码,VR 头显上 400–1,500 tok/s,200 美元以下的手机上 300–700 tok/s,约 70 MFLOPs/token(对比 LFM2.5 约 460 和 Apple FM 约 6,000)。
这个设计是对上下文的押注,而不是对权重的。FFN 被固定的正交 Walsh–Hadamard 变换(n log n,无需读取权重)取代;记忆来自哈希 n-gram"engram"表;路由是 Sinkhorn 标准化的。README 引用了 arXiv:2607.18363,这是一篇对照研究,其中纯注意力 transformer 在匹配参数数量时与标准 transformer 持平(差距 0.006 nats),但在上下文接地答案上更好,而在知识必须存在于权重中的地方更差——这契合一个 tool-calling 模型,却不契合聊天机器人(DroidCall 17.0%)。
行为契约。输入文本,输出 JSON:一个字节级语法由你声明的 schema 编译而来,约束每一个 token,因此调用不可能是畸形(malformed)的。没有声明 tool 的请求返回空调用 [];没有自由文本回退。参数只包含输入中已有证据的值——可选字段被省略而非猜测。置信度是校准头和调用解码概率的最小值;低于阈值时它会升级而不是执行。超过五个工具时,一个检索头将 schema 嵌入一次,只有 top-5 进入上下文——未选中的工具不可达,而非仅仅是不太可能。
如何读懂基准测试。Mobile Actions:63.7%(LFM2.5 69.1%、FunctionGemma 64.0%、Apple FM 57.6%);BFCL v4 单轮 42.6% 总体,93.4% 格式良好;Seal-Tools 域内 32.6% / 域外 28.7%。注意不对称性:Needle 以 2 bits 运行、256 token 窗口,而基线以 f16 全上下文运行,且所有数字都是厂商自行报告的,尚无第三方复现。
谁应该关注。为边缘和嵌入式工程师构建 tool caller。Schema 编译进解码语法;LoRA 微调在冻结基座上合并,导出时融合为一个 .cact 文件,运行在同一个引擎上——无需重新编译。如果需要一个通用助手则跳过:训练数据是专有的(115B + 38B token),没有自由文本回退,且 256 token 窗口是一个硬性预算。作为参考,Pebble 已在 Index 01 手表应用中本地运行它。
Project: https://github.com/cactus-compute/needle · README: https://github.com/cactus-compute/needle/blob/main/README.md · Model card: https://huggingface.co/Cactus-Compute/needle2 · Paper: https://arxiv.org/abs/2607.18363 · Product page: https://cactuscompute.com/needle