14MB 装下一个 AI agent Needle 2 怎么把工具调用塞进手表里
14MB 装下一个 AI agent:Needle 2 怎么把工具调用塞进手表里
你的智能手表有 1GB 内存。一个 7B 参数的开源模型量化到 4-bit 还要 3.5GB。所以"在手表上跑 LLM agent"这件事,过去两年基本是个笑话。
cactus-compute/needle 不觉得这是笑话。他们做了一个 45M 参数的模型,整个权重文件 14MB,完整推理会话吃 28MB 内存。你可以把它装进手机、手表、智能家居设备、甚至机器人里,让它做工具调用、设备控制和结构化数据提取。
不是玩具,是基准测试上和 FunctionGemma 270M、LFM2.5 230M、Apple FM 互有胜负的模型——参数量小 5 到 70 倍,精度从 f16 压到 2-bit。
14MB 是什么概念
做个对比:
- Llama 3 8B Q4:约 4GB
- Phi-3 mini Q4:约 2.3GB
- Qwen2.5 0.5B Q4:约 400MB
- Needle 2:14MB
14MB 意味着什么?意味着它可以:
- 预装在固件里,开机即用
- 通过 OTA 推送更新,秒级完成
- 在 BLE 连接下实时响应,不依赖云端
- 在断网环境下完整工作
Simple Attention Network:不是 Transformer 的缩小版
Needle 2 的底层架构叫 Simple Attention Network,作者在 arXiv:2607.18363 论文里详细描述。核心改动有四点:
1. Hadamard MLP 替代 FFN
传统 Transformer 的 FFN 占了 2/3 的参数量。Needle 2 用 Walsh-Hadamard 变换——一个固定的正交矩阵,用 n log n 时间计算,零参数。这就像用固定的数学运算替代了可学习的线性变换,牺牲一点灵活性换巨大的参数节省。
2. Engram Key-Value Memory
不是传统的 KV cache,是"记忆痕迹"——从 hashed n-gram 表里 gather 出来。这借鉴了人类记忆的机制:不是所有上下文都平等存储,按 n-gram 哈希做检索式记忆。
3. 多通道超连接(Multi-lane Hyper-connections)
残差流不是一条线,是多条通道并行。每个 block 的更新规则同时处理四个残差流,通过 doubly-stochastic normalization(Sinkhorn 迭代)做路由。
4. CQ2-bit 量化
不是传统的 INT4,是 Cactus Quants 自家的 2-bit 量化方案。45M 参数 × 2 bit / 8 = 11.25MB,加上引擎开销正好 14MB。
工具调用:模型的天职
Needle 2 不是通用语言模型,它被设计成工具调用专用。这意味着:
- 输入是自然语言
- 输出是结构化 JSON
- 每个 token 都被 byte-level grammar 约束,保证输出格式合法
mode 字段只能是 "heat" / "cool" / "auto",模型在解码时就不可能输出别的值。这不是"让模型学会输出 JSON",是"让模型在 JSON 语法空间里解码"。
置信度门控:知道不知道
每个响应都带一个 calibrated confidence score,来自一个独立训练的 head。你可以设阈值:置信度高于 0.8 自动执行,0.5-0.8 询问用户,低于 0.5 直接 escalate 到云端大模型。
这是边缘 AI 的正确姿势——不是"什么都本地做",是"本地做能做的,做不了的诚实说做不了"。和 PyroDash 的"认知谦逊"是同一个原则:自知之明比能力更值钱。
256-token 滑动窗口 + KV Sink
内存约束的另一个设计:上下文窗口固定 256 token,但工具描述作为 KV sink 被永久 pin 住。这意味着:
- 对话可以无限长
- 工具 schema 不会被挤出窗口
- 总内存稳定在 28MB 附近,不随对话长度增长
工具检索:Top-5 检索头
如果你有 100 个工具,全部塞进 prompt 会爆窗口。Needle 2 有一个 retrieval head,每轮只检索 top-5 最相关的工具,grammar 约束也只覆盖这 5 个。
这和 RAG 的思路一样,但用在工具上——不是"读所有文档",是"按需检索相关工具"。
怎么用
pip install cactus-needle
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'}]
装饰器风格,Python 原生。Literal 类型会被自动识别为枚举约束,docstring 里的 Args: 块会被解析为参数描述。整个 API 设计得非常干净。
数据说话
- 45M 参数,5-70x 小于同级别竞品
- 14MB 权重文件,2-bit 量化
- 28MB RAM 完整会话
- 256 token 滑动窗口,工具 KV sink 永久驻留
- Top-5 工具检索,支持大规模工具目录
- +346 stars today,GitHub Trending 上榜
一个更深的观察
Needle 2 代表了 AI 模型设计的一个分叉点:
过去两年,主流叙事是"模型越大越强"——GPT-4、Claude Opus、Gemini Ultra,参数量往万亿冲。但这条线有一个隐含假设:推理在云端。
Needle 2 选了另一条路:推理在设备上。不是和 GPT-4 比 MMLU,是和"没有 AI"比——手表能不能本地理解你的语音指令、扫地机器人能不能本地规划路径、智能门铃能不能本地识别访客。
这些场景不需要 70B 参数,需要的是 14MB、28MB RAM、断网可用、毫秒响应。Needle 2 的 Simple Attention Network 是为这个场景从零设计的,不是把大模型蒸馏小。
这是"换层面解决问题"概念谱系的又一个成员——不是在同一层面追求更强,是换一个层面,按约束重新设计。和章鱼的"DNA 预训练 + RNA 推理时计算"、Möbius RoPE 的"拓扑干预"是同一个家族:不更强地做同一件事,换一个层面解决问题。
---
仓库:cactus-compute/needle 论文:arXiv:2607.18363 权重:HuggingFace Cactus-Compute/needle2 语言:Python 今日增长:+346 stars