智猩猩AI整理

编辑:金水

全球联网设备里,真正能跑 GPU 或 NPU 的只是少数。真正的大头,是那几十亿台价格在 200 美元以下的手机、树莓派,还有各种微控制器。

可就算是 FunctionGemma 270M、LFM2.5 230M 这种已经算小的模型,在便宜手机上跑起来依然吃力——光是 f16 权重,就得占掉几百 MB。

更尴尬的是,当 Agent 的核心工作只是「把人话翻译成函数调用」时,我们却一直拿几百 MB、几十亿参数的大模型去干「打开客厅灯」这种事。

用云端大模型做解析,等于用大模型的价钱买了一个解析器的活,还顺手把用户对话上传了。

因此,研究人员开源了一个45M参数的端侧工具调用模型Needle 2,适用于手机、可穿戴设备、智能家居系统和机器人等。

整个模型只是 14MB 的二进制文件,在大约 28MB 的 RAM 上就能运行整个会话。

底层基于他们提出的SAN(Simple Attention Network,简单注意力网络)架构;

并配套发了架构论文《A Controlled Study of Attention-Only Transformers》。

打开网易新闻 查看精彩图片

在工具名识别(98.3%,公开基准全场第一)和陌生 schema 泛化(域外 28.7%,领先第二名 11.7 个点)上超过了比它大 5–70 倍的小模型;开源后它在 GitHub 上多次冲上Github趋势榜,并积累起约 8.8k star。

打开网易新闻 查看精彩图片

但要先把结论说清楚:Needle 2 不是完整 Agent。它不会闲聊,也不做自主规划与多步推理,只承担 Agent 里自然语言到函数调用这一环。

本文想讨论的也不是小模型战胜大模型,而是一个更实际的问题Agent 内部的工作,能不能拆开分给不同大小的模型?

打开网易新闻 查看精彩图片

01

它怎么做到这么小

核心思路很简单,先搭一个更省参数的骨架,再让模型从训练开始就活在 2-bit 里,最后用四条硬约束把可预测性锁死。

1. 删掉 FFN,用固定变换换掉最占地方的零件

论文有一组很说明问题的控制实验,在 6M–87M 参数规模下,直接删掉 Transformer 最占参数的前馈层(FFN),loss 差 0.47 nats;但把省下的参数重新分给更多注意力层,差距立刻缩到 0.006 nats。

更有意思的是,纯注意力网络在从上下文找答案上更强,在从权重里回忆知识上更弱,而工具描述本来就在上下文里,短板正好用不到。

那 FFN 被换成了什么?一个固定的 Walsh-Hadamard 变换(正交矩阵,零可学习参数,算得快)。

非线性靠学习到的对角缩放和输入相关的门控补上。世界知识则放进哈希 n-gram 的查表记忆(engram),真正参与矩阵乘的活跃参数只有约 35M。

骨架最终是,27 层、512 宽、GQA、多路残差流,再加上 QK-normalization 让训练稳住。

打开网易新闻 查看精彩图片

2. 量化上它生来就是 2-bit

权重、激活、KV cache 全程在量化态下训练,部署的就是训练时的模型,不是近似版。

体积账很直接45M 参数 × 2 bit ≈ 11MB 出头,加上引擎和元数据,整个二进制大约 14MB。

推理时权重永不解压进内存,直接在寄存器里展开做计算;语法匹配还能提前跳过大量非法 token,单个二进制还会自动探测 CPU 选最优内核。

3.让小模型敢上生产的是四条硬约束

语法约束解码(物理上吐不出格式错误的 JSON)、无自由文本兜底(处理不了就返回空调用)、置信度门控(低于阈值就升级大模型)、256-token 滑动窗口把内存钉在约 28MB。

一句话就是用可预测性换掉通用性。它不追求聪明,但绝不给你意外。生产环境里,后者往往更值钱。

02

性能评估

(1)实验配置

官方在五个公开基准上测,用最严的 ordered strict exact match 口径(函数名、顺序、每个参数全对才算成功)。

测量条件也很明确。Needle 2跑的是真正出货的C++引擎和生产配置:CQ2 2-bit量化、工具检索开启、256-token滑动窗口(含窗口驱逐),没有任何放宽。

对比的基线里,LFM2.5和FunctionGemma用发布checkpoint在vLLM上以f16、全上下文运行,Apple FM则用设备端版本。

(2)核心结果

先看最直接的设备动作基准 Mobile Actions(961 行)。

这一项Needle 2 拿63.7% 排第三,略输LFM2.5 的 69.1% 和 FunctionGemma 的 64.0%,但工具名识别 98.3% 是四家唯一破 98 的,非空率 99.4% 也是最高。

也就是说它认工具认得最准,只是整调用对上的没那么多。

打开网易新闻 查看精彩图片

真正让 Needle 2 扬眉吐气的是 Seal-Tools 域外。

这里整块工具域被故意排除在训练之外,专门考它没见过的 schema 怎么泛化:

Needle 2 准确率 28.7%,而第二名 LFM2.5 只有 17.0%、FunctionGemma 15.6%,领先 11.7 个点,工具名识别 58.7% 同样第一;

域内(700 行)它也一样领先(32.6% vs 26.9% vs 16.3%)。

打开网易新闻 查看精彩图片

在BFCL v4 单轮实验中,Overall 只有 42.6% 排最后,Apple FM 61.7%、LFM2.5 60.8% 都远在前面。

Python simple 它拿 61.2,距离大它 6 倍的 FunctionGemma(62.3)只差 1 分;

真正拉胯的是 Java(29.0)、JavaScript(32.0)和并行多调用(22.5),而这些恰恰是企业 SDK、它训练分布外的场景。

打开网易新闻 查看精彩图片

从这三张表得出的结论,它赢在两处(工具名识别第一、陌生 schema 泛化领先 11.7 点),输在两个综合场景(Mobile Actions 第三、BFCL 垫底);

但别忘了,它是 2-bit、256 token 窗口、45M 参数,对手是 f16、全上下文、大它 5–70 倍,把体积和内存放进等式,性价比曲线才是它真正的主张。

03

使用教程

安装很简单,一行命令就行:

pip install cactus-needle

推理引擎会从 Hugging Face 自动下载并缓存一次,之后不用联网。

气隙环境的离线安装方式写在 doc/apis.md 里。

装好后,声明一个工具就能跑通闭环:

# [{'city': 'Lagos', 'temp_c': 27, 'sky': 'clear'}]

机制其实就三件事:签名定参数类型,docstring 就是工具描述,run() 自动完成「选工具 → 执行 → 喂回结果」。

这里有个最重要的提醒,模型完全靠你写的工具描述来做决策,描述写得好不好,直接决定成不成功。

Hacker News 有人实测,只写"calculator"会失败,改成"Use for any arithmetic or math question"才正常。

它还能直接做结构化抽取。把 Pydantic 模型传进去,拿到的是带类型的对象,不用再自己解析字符串:

print(invoice.vendor, invoice.total)  # -> Acme Corp 1200.0

给参数加约束也很直接,这些约束会编进解码语法里:

    return {"sent": amount, "to": to}

最后,可以注入一些「系统事实」来帮模型理解相对表达。注意,这里传的是事实,不是指令:

# 「明天早上七点叫我」就能据此算出绝对时间

从安装到跑通第一个工具调用,基本十分钟内能完成。

04

小模型的另一种活法

Needle 2 五个基准里唯一稳拿第一的,是工具名识别 98.3%。不是巧合,是取舍,把预算全砍在翻译人话这一件事上。

更值得看的不是 14MB,而是它验证的路线,任务足够窄,参数账就能重算。

这背后是 Agent 分工的思路,高频低复杂度的从意图到调用放本地小模型,知识问答和复杂推理交给云端大模型,低置信度再升级。

但边界要划清,置信度门控只管路由,不能代替权限校验、PLC 安全互锁、执行层审计和功能安全。

一个模型自信地输出调用,和这个调用被授权、被安全执行,是两回事。工业若采纳这类架构,安全边界必须建在执行层。

一个模型的价值,不取决于它有多大或多小,而取决于它在系统里承担的角色是否被清晰地定义、诚实地验证。

关注+星标,获取AI前沿进展与开源一线动态