
一个只有 8-29 MB 的模型,能在树莓派 5 上跑到 4k tokens/s,专职干一件事:在完全没有网络的设备上,把人话变成一次次可靠的工具调用。这就是 Cactus Compute 刚发布三天的 Needle 3——端侧 Agent 拼图里缺失的那一块。
上周 GitHub 周增量榜 Top 10 里,有个项目画风不太一样:不卷通用大模型,不做 Agent 框架,专心给 ” 算力最小的那批设备 ” 做基础模型。两周涨了约 2,800 star,截至本文发布 11,166 ⭐,今天凌晨还在推代码。它叫 Needle,Apache-2.0 开源,值得单独讲一篇。
写在前面:为什么 ” 小设备 + AI” 总是卡在联网这一步
过去两年端侧 AI 的叙事基本是 ” 把小参数聊天模型塞进手机 ”——Qwen、Gemma、Phi 轮番降参数量。但真正做产品的人很快会遇到一个更本质的问题:设备上的 AI 不是用来聊天的,是用来干活的。
智能音箱要开灯、扫地机器人要回充电座、手表要把一条扣款通知变成结构化记录、车载系统要执行 ” 调低空调 ”——这些全是 tool calling(函数调用),不是对话。而当前的现实是:
- 要么调用云端大模型的 function calling,断网就全瘫,还有隐私和延迟问题;
- 要么本地跑通用小模型,动辄几百 MB 起,tool call 准确率还不稳;
- 要么退回规则引擎写正则,维护成本指数上涨。
Needle 的答案是:既然设备场景里 90% 的需求是 ” 结构化输出 ”,那就别做通用聊天模型——造一个专职的自动化基础模型,把它压到 8-29 MB。
一、它解决什么问题
一句话:给没有算力、没有网络、不能等的设备,提供开箱即用的 tool calling / 结构化抽取 / 文本向量三合一能力。
| 项目 | 数据(2026-09-18 实测拉取) |
|---|---|
| 仓库 | cactus-compute/needle |
| Stars / Forks | 11,166 ⭐ / 717 forks / 38 open issues |
| License | Apache-2.0 ✅ |
| 语言 | Python(推理引擎为各平台预编译二进制) |
| 创建时间 | 2026-02-24(项目只有 7 个月) |
| 最近 push | 2026-09-18(本文发布当天) |
| 当前版本 | Needle 3(2026-09-17 发布) |
| 模型体积 | 单个 8-29 MB 二进制(CQ2 2-bit 量化,2.125 bit/ 权重) |
| 官网 | cactuscompute.com/needle |
背书来头不小:Pebble 创始人 Eric Migicovsky 确认,无屏幕的 Pebble Index Ring 就在本地跑 Needle——” 说出指令,动作就必须发生,有网没网都得行 ”。
二、三合一能力:工具调用、结构抽取、文本向量
Tool calls(工具调用):把 app 暴露的函数交给它,模型选出该调的函数并从用户话里填好每个参数。说两件事就按顺序给两次调用;问了没有工具覆盖的事,返回 空列表而不是瞎猜——这个 ” 宁可拒绝不肯编造 ” 的设计对设备端太重要了。
Structured extraction(结构抽取):声明一个数据形状(Pydantic 模型),扔进乱糟糟的文本,拿回带类型的字段——发票、订单、通知、表单都行。decode 阶段用字节级语法约束每一个 token,输出保证能 parse。抽取任务还能泛化到分类问题。
Text embeddings(文本向量):同一个模型顺手给句子出向量,设备本地就能做语义搜索、请求到工具的路由匹配、重复告警合并——数据不出设备。
三、差异化技术:智能阶梯 + 语法约束 + 置信度门控
1. Intelligence Laddering(智能阶梯)。Needle 3 基于 Simple Attention Network:用 Monarch Hadamard MLP 替代传统 FFN,GQA 注意力加因果卷积旁路,”engram” n-gram 记忆占了大头参数(所以 121M 的模型做的是 50M 的算术)。核心玩法是 每一层深度都是一个可部署模型:2 层到 20 层,2L 到 20L 子网络按需选型,小到 9 MB 大到 29 MB。
2. 字节级语法约束。开发者的 schema 会被编译成 decode 语法,逐 token 约束输出。这等于把 ”JSON 格式错误 ” 这个 LLM 工程里最常见的故障模式从源头干掉了。
3. 校准置信度。每次响应自带一个置信分(引擎默认 0.1 的门槛,低于就扣下不发)。应用可以据此做路由:高分直接执行、中分弹窗确认、空结果当拒绝。还有 triggers 机制——用正则把某类请求强制路由到指定工具,正则命中的调用即使低于置信门槛也会发出。
4. 微调阶梯。LoRA 微调对整个阶梯生效:在 DroidCall 数据集上微调后,所有子网络提升 18-36 个百分点,4 层(29M 参数)起就能超过 DeepSeek V4 Flash。needle finetune 一条命令完成训练,needle build --lora 打包部署。
四、性能与部署
官方数据(树莓派 5 实测):decode 400-4k tokens/s,prefill 1-10k tokens/s。每个平台一个 1 MB 以内的预编译引擎,启动时加载 needle3.cact 权重文件(.cact 是 mmap 友好的自定义格式,官方连解析器规范都公开了):
needle build --platform linux-arm64 --layers 8 --out ./pi
./linux-arm64/needle --model needle3.cact --tools tools.json --serve
支持平台覆盖手机、手表、智能家居、机器人、AR 眼镜、汽车、MCU,还有浏览器和 WASI,甚至有气隙(air-gapped)部署方案。
九大官方场景里跟硬件关系最近的两个:机器人 ——” 清扫厨房但别进卧室 ”、” 干完回充电座 ”,每句话变成一串可执行动作; 智能家居——” 把卧室调暗然后锁门 ” 变成两次离线调用,不经过网关。
五、对比主流方案
| 维度 | 云端 LLM function calling | 通用小模型本地跑 | 规则引擎 /NLU | Needle 3 |
|---|---|---|---|---|
| 体积 | 无(在云端) | 数百 MB-GB 级 | KB 级 | 8-29 MB |
| 离线可用 | ❌ | ✅ | ✅ | ✅ |
| Tool call 准确率 | 高 | 不稳定 | 依赖穷举 | 官方称胜过 10 倍体积模型 |
| 通用聊天 | ✅ | ✅ | ❌ | ❌(主动放弃) |
| 隐私 | 数据出设备 | 本地 | 本地 | 本地 |
| 单次成本 | 按 token 付费 | 电量 | 开发维护 | 近零 |
| 生态成熟度 | 最成熟 | 成熟 | 成熟 | 早期(7 个月) |
结论很清晰:Needle 不是来替代聊天模型的,它在赌一个细分判断——设备端自动化场景里,小而准、永远在线(离线意义上)、结构化输出可保证,比 ” 什么都能聊 ” 值钱得多。tool 定义协议是普通函数签名 + docstring,与 MCP 这类协议层标准不冲突,反而互补:MHS 管物理设备接进来(参见此前 Anthropic MHS 调研),Needle 管设备端执行大脑。
六、实战:3 步跑通
第 1 步,安装(引擎从 Hugging Face 拉一次然后缓存):
pip install cactus-needle
第 2 步,装饰一个函数就是定义工具——签名给参数类型,docstring 就是工具描述:
import needle
@needle.tool
def get_weather(city: str):
"Get the current weather for a city."
return {"city": city, "temp_c": 27, "sky": "clear"}
agent = needle.Needle(tools=[get_weather])
print(agent.run("what's it like in Lagos right now?")["results"])
# [{'city': 'Lagos', 'temp_c': 27, 'sky': 'clear'}]
结构抽取用 extract() 传 Pydantic 模型,返回类型化对象。
第 3 步,交叉编译到目标设备(或微调后再部署):
needle build --platform macos-arm64 # 全 20 层
needle build --platform linux-arm64 --layers 8 # 只要 8 层子网络
pip install "cactus-needle[train]"
needle finetune data.jsonl --epochs 10 --out adapter.safetensors
注意工具描述是模型选路的唯一依据:一个工具一个动作、枚举值用用户的说法、格式写进描述——官方那篇《Designing tools for Needle》值得精读。
七、风险与坑
- 遥测默认开启——二进制默认上报遥测数据,离线设备场景尤其注意:设
NEEDLE_TELEMETRY=0和DO_NOT_TRACK=1关闭。 - 不做通用聊天是特性也是边界——超出工具范围的输入返回空列表。如果产品需要 ” 先聊两句再干活 ”,得自己组合一个聊天模型。
- Benchmark 是官方自报的——” 胜过 10 倍体积模型 ”、” 超过 DeepSeek V4 Flash” 都来自官方测试集,接自己的任务前先用自己的工具集实测。
- 项目很年轻——2026 年 2 月创建,核心团队 8 人左右,GitHub 上没有 release 页(权重发在 Hugging Face),版本管理主要靠引擎版本号。上生产建议锁引擎版本。
- 2-bit 训练在云端平台——本地微调是 4-bit LoRA;出货级的 2-bit 后训练和量化走 Cactus Platform(商业服务)。重度定制会有一部分供应商绑定。
八、总结
| 最值得上车的理由 | 一句话 |
|---|---|
| 真正的离线 Agent 能力 | 断网也能把人话变成可靠工具调用,拒绝瞎猜 |
| 部署摩擦极低 | 8-29 MB 单文件 + 1 MB 引擎,树莓派到 MCU 全覆盖 |
| 微调阶梯友好 | 2 层起都可微调可部署,4 层微调即可对标更大的通用模型 |
给做机器人、智能家居、可穿戴设备的开发者一个建议:拿一个真实的 ” 设备执行 ” 场景(比如家里最常说的三句指令),花一个下午把工具集接到 Needle 上试试——它的置信度门控 + 语法保证输出这两个设计,会改变你对端侧 Agent 可靠性的预期。如果设备侧 AI 是你的方向,这个 11K star 的项目值得放进观察清单的第一梯队。
参考
- cactus-compute/needle – GitHub
- Needle 3 官方发布页
- Hugging Face 权重:Cactus-Compute/needle3
- Designing tools for Needle
- Leveraging Needle’s confidence
- Structured JSON extraction with Needle
- Fine-tuning Needle
- What devices are supported on Needle
- The .cact format
- 相关阅读:Anthropic MHS 深度调研:AI 操控物理设备的 USB-C 时刻
作者:yunying(增长运营官)· 数据实测于 2026-09-18 · Apache-2.0