14MB 运行完整 AI Agent:Cactus Needle 2 的边缘设备函数调用引擎

一个 45M 参数的模型,压缩到 14MB 的单一二进制文件,28MB 内存跑完整个推理会话。Cactus Compute 发布的 Needle 2 在树莓派 5 上达到 500 tokens/s 的解码速度,在 Meta Quest 3S 和 Apple Vision Pro 上跑出 400 到 1,500 tokens/s,在 200 美元以下的 Android 手机上稳定 300 到 700 tokens/s。它甚至能在 ESP32 微控制器上运行。

Needle 2 官方 Banner

这些数字之所以成立,是因为 Needle 2 从根本上重新定义了"模型需要做什么"。它不写散文,不回答知识问题,不做多轮对话。它只做一件事:把一句自然语言映射到一组带类型参数的函数调用。开灯不需要前沿模型,调空调不需要世界知识。Cactus 把这个问题缩小到 45M 参数能覆盖的范围内,然后用一套全新架构和训练方法将其塞进 14MB。

Simple Attention Network:砍掉 FFN 的 Transformer

Needle 2 的核心架构叫做 Simple Attention Network(SAN),论文见 arXiv:2607.18363。标准 Transformer 中约三分之二的参数存在于前馈网络(FFN/MLP)中。SAN 的设计思路是:如果模型不需要存储世界知识(因为它只做函数调用),FFN 就可以被完全移除。

Simple Attention Network 架构图

SAN 用 Hadamard MLP 替代传统的密集 FFN。Walsh-Hadamard 变换是一个固定正交矩阵,以 n log n 时间应用,不消耗任何可学习参数。通道混合操作通过学习对角矩阵(D_k = diag(d_k))与固定 Hadamard 矩阵的乘积实现,将原本需要大量参数的 up/down 投影压缩到几乎为零。

此外,SAN 引入了 engram 记忆系统:世界知识不再存储在权重矩阵中,而是放在散列 n-gram 表中,每个 token 解码时只读取少量行。这种设计在边缘设备上尤其有利,因为每次从闪存读取的字节数直接决定延迟和功耗。

多通道残差流(multi-lane hyper-connections)给一个 27 层、512 宽度的网络提供了远超其实际宽度的路由灵活性,代价仅为每层几个点积运算。

训练与 Cactus Quants:从源头训练 2bit

Needle 2 在专有的 115B token 语料上预训练,在 38B token 上做后训练(含紧凑推理轨迹和精心设计的分布)。作为参照,LFM2.5-230M 在 19 万亿 token 上预训练,约为 Needle 总训练量的 120 倍。

关键的一步是 Cactus Quants(CQ2-bit)。小型模型在事后量化下会崩溃,因此 Needle 2 从预训练到后训练全程针对 Cactus Quants 训练,权重、激活值和 KV cache 统一量化到 2bit。部署时用的 2bit 模型就是训练时的模型本身,没有精度损失。

权重在推理时永远不会解压到 RAM:2-bit 编码在向量寄存器内部展开,融合为整数点积,常驻内存始终保持在 14MB 的 blob 大小,算术路径全程 int8。

有限内存设计:256 token 滑动窗口

注意力机制使用 256 token 的滑动窗口,KV cache 大小有上界,无论会话多长。系统提示和工具声明作为永久 sink 被 pin 住,保证模型永远不会忘记自己有哪些工具可用。这使得总会话内存稳定在 28MB 左右,能够运行在 ESP32-P4(32MB PSRAM)、STM32H7 和 NXP i.MX RT 等微控制器上。

引擎还利用字节级语法做推理优化:语法匹配器在 logit 生成之前就知道哪些 token 合法,引擎只为候选行计算输出分数,在结构化 token 上可跳过高达 98% 的词表投影。这一优化不会改变任何输出,每个 trick 要么是精确等价的,要么是逐 token 验证过的。

Benchmark:5 倍到 70 倍小的模型

在 Google Mobile Actions(961 行,有序严格精确匹配)上,Needle 2 的名称准确率达到 98.3%,高于所有对手:

模型准确率名称准确率非空率1-call2-call
LFM2.5 230M (f16)69.193.098.976.155.0
FunctionGemma 270M (f16)64.087.398.973.046.2
Needle 2 (CQ2-bit)63.798.399.471.348.4
Apple FM (on-device)57.694.295.564.543.8

在 Seal-Tools in-domain(700 行,大候选工具列表,多数为多调用行)上,Needle 2 的优势更明显:

模型准确率名称准确率1-call2-3 call4+ call
Needle 2 (CQ2-bit)32.664.963.021.814.6
LFM2.5 230M (f16)26.945.454.517.110.4
FunctionGemma 270M (f16)16.356.047.04.52.1

Seal-Tools out-of-domain(654 行,整个工具领域被排除在训练集外,测试 schema 泛化能力):

模型准确率名称准确率1-call2-3 call4+ call
Needle 2 (CQ2-bit)28.758.756.427.115.4
LFM2.5 230M (f16)17.035.042.613.79.8
FunctionGemma 270M (f16)15.648.950.011.06.3

BFCL v4 单轮(3,641 行)是通用函数调用基准。Needle 在 Python 简单调用上达到 61.2%,仅比六倍大的 FunctionGemma 270M 低一个百分点:

类别Apple FMLFM2.5 230MFunctionGemma 270MNeedle 2
Python Simple86.885.562.361.2
Java Simple67.048.038.029.0
JavaScript Simple66.056.044.032.0
Multiple84.078.560.057.0
Relevance100.068.881.281.2
Overall61.760.846.142.6
Well-formed95.094.2100.093.4

Cactus 明确指出两个不对称性:精度方面,基线模型保留 f16,因为传统事后量化到 2bit 会让非压缩训练的模型崩溃;范围方面,Needle 只训练了 agentic 工具调用,所有基线都是携带聊天、散文和世界知识的通用语言模型。这两点各自有利于不同方,没有干净的方式同时拉平。

计算效率:70 MFLOPs/token

在边缘设备上,从闪存或 DRAM 移动一个字节的功耗比一次乘加运算高几个数量级。Needle 2 的架构同时压缩了两端:

模型参数量矩阵活跃参数MFLOPs/token
Needle 245M35M70
同形状 Transformer(密集 MLP)82M82M164
同参数量 Transformer43M43M87
LFM2.5 230M230M230M460
FunctionGemma 270M270M270M540
Apple FM~3B~3B~6,000

Needle 2 每个解码 token 最多读取一次 14MB blob,在结构化 token 上更少。对比 LFM2.5,Needle 的每 token MFLOP 降低 7 倍;对比 Apple FM,降低 85 倍。

生产部署与 Python SDK

Needle 2 以 Apache 2.0 许可证开源,权重托管在 HuggingFace。Python 包安装后即可使用:

python
import needle

@needle.tool
def set_thermostat(temperature: int, mode: str = "auto"):
    """Set the thermostat.
    Args:
        temperature: target temperature in Celsius
        mode: heating strategy to use
    """
    return {"temperature": temperature, "mode": mode}

agent = needle.Needle(tools=[set_thermostat])
agent.run("make it 21 and cool the room")

模型返回结构化 JSON 调用,每个响应携带置信度分数。低于阈值的请求返回空调用(即拒绝),应用可以决定重新提问或升级到云端模型。内置工具检索头在每轮只向模型渲染前 5 个工具,配合字节级语法约束,确保输出永远是合法的函数调用。

对于自定义工具词表,45M 参数的模型足够小,可以在本地 Mac/PC 上几分钟到几小时内完成 LoRA 微调。Pebble 的 Index 01 智能戒指已经在生产环境中使用 Needle:戒指没有屏幕,语音指令必须即时转为动作,本地运行消除了对网络连接的依赖。

边缘 AI 的真正战场

Edge AI 的讨论长期聚焦于 Mac 和 PC,但全球有超过 210 亿台连接 IoT 设备,PC 只有约 15 亿台。新兴市场中大多数手机售价低于 200 美元。算上廉价手机、树莓派、微控制器、可穿戴设备、小型机器人和智能家居设备,大约五分之四的边缘设备成本低于 200 美元。这些设备没有 GPU,没有 NPU,只有几百 MB RAM。Needle 2 的目标硬件正是这片被忽视的庞大市场。

Cactus 的赌注是:函数调用不需要世界知识,不需要开放式散文,45M 参数就够了。从结果看,这个赌注在很大程度上成立。Needle 2 在设备控制类 benchmark 上与比它大 5 倍到 70 倍的模型互有胜负,在通用函数调用上虽然落后于 Apple FM,但考虑到前者运行在 ESP32 上、后者运行在 iPhone 上,这种差距有着完全不同的工程含义。

来源:Cactus Compute | HuggingFace | GitHub | 论文 arXiv:2607.18363