Needle:8 到 29 MB 的端侧“自动化基础模型”,在手机、手表和单片机上做工具调用与结构化抽取

Published · AI Daily — AI-assisted deep research, methodology & disclosure

cactus-compute/needle 是一个只有 8 到 29 MB 的单文件模型,专做三件事:根据应用暴露的函数选择并填写工具调用、把杂乱文本抽成带类型的字段、生成句向量。它基于 Cactus Compute 自研的 Laddered Simple Attention Network,2 到 20 层的每个深度都可单独部署,还附带 16.9 MB 的语音转文字模型 Whistle。项目采用 Apache-2.0 许可,截至发稿约有 1.39 万个星标。性能对比数据来自项目自述,尚待独立复现。

Needle 是 Cactus Compute 团队在 GitHub 上开源的一个很小的模型:整个模型是一个 8 到 29 MB 的二进制文件,目标设备是手机、手表和穿戴设备、机器人、智能家居、汽车乃至单片机。项目自称“自动化基础模型”,并说明它拿通用聊天的能力做了交换,换来的是在移动端工具调用上胜过体量大 10 倍的模型,在结构化抽取上追平大 2 到 3 倍的模型。这些比较来自项目 README,我们没有看到第三方复现,应当按“项目自述”来读。截至 2026 年 10 月 13 日,仓库约有 13,887 个星标、940 个派生,Apache-2.0 许可,主要用 Python 编写,最近一次推送在 10 月 11 日。 它做的事情很具体。第一是工具调用:给定应用暴露的函数,Needle 选出该调用哪些,并从用户的话里填好每个参数;用户一次提两件事,就按顺序给出两个调用;用户要的东西没有任何工具能满足,就返回空列表,而不是猜一个。第二是结构化抽取:先声明一个形状,比如发票、预订、通知或表单,再把杂乱文本交进去,输出的字段带类型,并且解码语法保证结果能被解析,抽取能力还能推广到分类。第三是文本向量:同一个模型可以为句子生成向量,应用可以在本地做搜索、匹配和路由。第四,它的姊妹模型 Whistle 是一个 16.9 MB 的语音转文字模型,跟 Needle 共用同一个容器格式和引擎,所以一次构建就能让 Needle 直接接收音频:音频进去,工具调用出来。

使用门槛也很低。通过 pip install cactus-needle 安装之后,用装饰器把一个 Python 函数标成工具,函数签名给出参数类型,文档字符串作为工具描述,再用 agent.run 完成闭环:执行函数并返回结果。每一轮都会返回一个 JSON,含 function_calls、模型的 reasoning 和校准过的 confidence 置信度,应用可以按置信度决定自动执行、请用户确认还是拒绝。想要部署到设备,则用 needle build --platform macos-arm64 这样的命令,取下对应平台的预编译引擎,并把 needle3.cact 权重放在旁边。仓库里列出了 macOS、Linux ARM64 等目标,还有浏览器和 WASI 的构建说明。

架构是它真正不同的地方。Needle 3 是一个“阶梯式简单注意力网络”(Laddered Simple Attention Network):用 Monarch Hadamard MLP 取代常规的前馈层,使用带因果卷积抽头的分组查询注意力,用按 gather 读取的 engram n-gram 记忆,以及多通道超连接;训练目标是让 2 到 20 层的每一个深度都能单独部署。大部分参数放在 engram 里,所以 1.21 亿参数的模型做的运算量相当于 5,000 万参数的模型。解码时有一套由你的 schema 编译出的字节级语法约束每个 token,每次回答还附带校准过的置信度。这一整套设计的出发点是,在内存只有几十 MB 的设备上,把容量花在“查表式记忆”上比花在通用推理上更划算。

微调是项目强调的另一点。README 称,在 DroidCall 上微调后每个子网络提升 18 到 36 个点,从 4 层、2,900 万参数起,微调后的子网络就超过 DeepSeek V4 Flash。本地微调只训练注意力投影上的 LoRA 适配器,基础权重冻结,最后合并导出,精度是 4 比特,在自己的机器上用 JAX 跑;平台微调则训练完整模型,精度 2 比特,需要 Cactus 的 API 密钥,可以由你的数据加上 Needle 原始数据集共同强化,避免遗忘。Whistle 的数据则是:比 Whisper base 小 8.6 倍,首个 token 快 6.6 倍,在 LibriSpeech、SPGISpeech、Earnings-22 和 FLEURS 平均成绩上领先,在 TED-LIUM、AMI 和 MLS 平均成绩上则是 Whisper base 更好,语言覆盖英、德、法、西、意、荷、波七种。

如果把它放进实际的产品场景,适用面其实很清楚。设想一个智能家居应用:用户说“把厨房的灯关掉”,音频进入 Whistle 转写,Needle 再从应用声明的“开关灯”“调温度”等函数里挑出一个并填好房间参数,整个过程在设备本地完成,没有网络往返,也不需要把家里的语音上传到云端。同样的思路适用于车载语音、手表上的快捷指令和机器人的指令解析。README 说明,当用户的话超出已声明的工具范围时,模型返回空列表而不是猜测;每次回答也带有校准过的置信度,应用可以据此决定回退到云端大模型,还是直接提示用户,这比让小模型硬编一个调用要稳妥得多。 我们的判断是,Needle 的价值在于把一个很具体的需求做成了很小的产品:只要你的应用已经有一组清晰的函数,需要把自然语言或语音可靠地映射成调用,它就比部署一个大模型便宜得多,也能在断网时工作。风险也同样具体。其一,所有基准都来自项目自己的 README。其二,二进制默认开启遥测,隐私敏感的场景必须设置 NEEDLE_TELEMETRY=0 和 DO_NOT_TRACK=1。其三,它不会聊天,也不适合开放域推理;如果你的函数集会频繁变化,就要认真评估微调和数据生成的成本。建议先用自己的真实工具清单和真实口语样本做一次小规模评测,再决定是否取代云端调用。

Sources

FAQ

Needle 到底能做什么,不能做什么?

它做三件事:根据应用提供的函数选择并填好工具调用,遇到没有对应工具的请求会返回空列表而不是瞎猜;把杂乱文本按声明的结构抽成带类型的字段;为句子生成向量用于本地搜索和路由。项目明确说它牺牲了通用聊天能力来换取这些任务上的表现。

“Laddered”结构有什么实际好处?

2 到 20 层的每个深度都是可部署的模型,所以同一份权重可以按设备大小取不同层数。README 称,在 DroidCall 上微调后,每个子网络提升 18 到 36 个百分点,从 4 层、约 2,900 万参数起,微调后的子网络就超过了 DeepSeek V4 Flash。这些是项目自己的结果。

使用时要注意什么?

二进制默认开启遥测,需要设置 NEEDLE_TELEMETRY=0 和 DO_NOT_TRACK=1 才能关闭。性能对比来自 README,尚无独立评测。本地微调只训练 LoRA 适配器并量化到 4 比特,平台微调则会训练完整模型,需要 Cactus 的 API 密钥。