一天一个开源项目(第202篇):Needle 2 - 14MB 的端侧工具调用模型

引言

"The 2-bit model you deploy is the model that was trained."

这是"一天一个开源项目"系列的第 202 篇文章。今天带你了解的项目是 Needle 2

大语言模型的端侧部署有一道绕不开的墙:参数量、内存、延迟三者之间的三角矛盾。要想在手机或嵌入式设备上跑 AI,要么牺牲精度,要么牺牲速度,要么两个都牺牲。

Cactus Compute 用一个反直觉的方案绕开了这堵墙:不做通用模型,只做工具调用

Needle 2 是一个专为工具调用(Tool Calling)、结构化提取和设备控制设计的基础模型:

  • 45M 参数,CQ2-bit 量化
  • 14MB 单一二进制,不需要单独的模型文件
  • 运行时仅占 28MB 内存,会话内存固定不随对话增长
  • 在工具调用基准上与 FunctionGemma 270M(6 倍大)基本持平

9.2k Stars,Apache 2.0,已在 Pebble Index Ring 等可穿戴设备上真实部署。

你将学到什么

  • Needle 2 的 SAN(Simple Attention Network)架构和三个核心设计选择
  • CQ2-bit 量化为什么比事后量化更有优势
  • 置信度门控(Confidence Gating)如何实现本地 + 云端的智能路由
  • 如何用 @needle.tool 装饰器快速接入工具
  • LoRA 微调 + .cact 导出的完整流程

前置知识

  • 了解 Function Calling / Tool Use 的基本概念
  • Python 基础(会用装饰器)
  • 对模型量化有基本了解(知道 INT4/INT8 是怎么回事)

项目背景

项目简介

Needle 2 不是通用聊天模型的缩水版,而是一个专门针对工具调用任务从头设计的基础模型

它回答的问题是:如果一个模型只需要做好"接收自然语言查询 → 决定调用哪个工具 → 生成正确参数 → 返回结构化结果"这一件事,能做到多小?

答案是 14MB,运行时 28MB。

这个数字意味着什么:普通手机 App 的安装包远大于此,28MB 内存在 2026 年的任何 Android 手机上都是零压力,树莓派 5 上能跑到 500+ tok/s。

作者/团队介绍

  • 公司:Cactus Compute, Inc.(旧金山)
  • 核心成员:Henry Ndubuaku、Karen Mosoyan、Jakub Mroz 等多位联合创始人
  • 定位:专注端侧 AI 推理的初创公司,Needle 系列是其核心产品
  • 联系方式founders@cactuscompute.com

项目数据


主要功能

核心作用

Needle 2 提供三种能力,本质上都是"自然语言 → 结构化输出"的变体:

javascript 复制代码
自然语言查询
    ↓
Needle 2 推理引擎(14MB 二进制,28MB 内存)
    ↓
┌─────────────┬──────────────┬───────────────┐
│  工具调用    │  结构化提取  │  设备控制      │
│ tool calls  │  JSON 提取   │ device actions │
└─────────────┴──────────────┴───────────────┘

每次输出都附带一个置信度分数,可以基于阈值决定是在本地处理还是升级到云端模型。

使用场景

  1. 可穿戴设备的离线语音助手

    • Pebble Index Ring 已在真实产品中使用 Needle,语音指令离线解析成 API 调用,无需联网。
  2. IoT 和智能家居控制

    • 树莓派或 ESP32 等设备上跑本地语音控制,"关掉卧室灯" → turn_off(room="bedroom"),无云端延迟。
  3. 文档结构化提取

    • 把非结构化文本(发票、表格、报告)提取成强类型 JSON,schema 约束保证输出格式正确。
  4. 移动端 AI Agent

    • 在安卓/iOS 上跑一个本地 Agent,处理简单任务,复杂任务按置信度路由到云端------省 API 费用也省延迟。
  5. 边缘推理节点

    • 在 Meta Quest 3S 或 Apple Vision Pro 上 400--1500 tok/s,空间计算场景直接本地推理。

快速开始

bash 复制代码
pip install cactus-needle

工具调用:

python 复制代码
import needle

@needle.tool
def get_weather(city: str) -> dict:
    """Get the current weather for a city.

    Args:
        city: The city name to query.
    """
    # 实际业务逻辑
    return {"city": city, "temp_c": 27, "sky": "clear"}

@needle.tool
def send_message(to: str, body: str) -> dict:
    """Send a message to a contact.

    Args:
        to: Recipient name or number.
        body: Message content.
    """
    return {"sent": True}

agent = needle.Needle(tools=[get_weather, send_message])
result = agent.run("拉各斯现在天气怎么样?")
print(result["results"])  # [{"city": "Lagos", "temp_c": 27, "sky": "clear"}]

结构化提取:

python 复制代码
from typing import Annotated
import needle

schema = {
    "invoice_number": str,
    "total_amount": Annotated[float, needle.Field(gt=0)],
    "line_items": list[{"description": str, "qty": int, "unit_price": float}],
}

text = "Invoice #1042, Total: $384.00. 3x Widget @ $128.00"
data = needle.extract(text, schema)
# {"invoice_number": "1042", "total_amount": 384.0, "line_items": [...]}

置信度门控:

python 复制代码
result = agent.complete("帮我设置明天早上 8 点的闹钟")
if result["confidence"] < 0.7:
    # 置信度不足,升级到云端处理
    response = cloud_llm.complete(result["query"])
else:
    # 本地处理足够
    execute_tool_calls(result["tool_calls"])

核心特性

1. 工具装饰器 @needle.tool

  • 直接装饰普通 Python 函数,docstring 自动解析成工具 schema
  • 支持 needle.Field 约束(范围、正则、枚举),编码进 JSON Schema,推理时语法约束保证合法值

2. 语法约束输出(Grammar-Constrained Decoding)

  • 输出不是"请输出 JSON"的软性要求,而是推理引擎在每个 token 位置只允许语法合法的字符
  • 语法约束还能跳过 98% 的词汇表投影计算------这是速度的来源之一

3. 置信度分数

  • 每次调用返回 confidence:后验校准头评分与解码概率的最小值
  • "The failure mode is escalation, not wrong execution"------宁可升级云端,不做错误执行

4. 工具检索(Tool Retrieval)

  • 工具数量超过 5 个时自动启用嵌入检索,每轮只把最相关的 5 个工具放入上下文
  • "An unselected tool is unreachable, not merely unlikely"------从根本上消除幻觉调用

5. Engram 记忆系统

  • 世界知识存入哈希 n-gram 表,读取时"零算术成本"
  • 知识和计算完全解耦,这是 Hadamard MLP 能减少参数的前提

性能基准

任务 FunctionGemma 270M (f16) LFM2.5 230M (f16) Needle 2 (CQ2)
Mobile Actions (961行) 64.0% 69.1% 63.7%
DroidCall (200行) 17.5% --- 17.0%
Seal-Tools 域内 16.3% 26.9% 32.6%
Seal-Tools 域外 15.6% 17.0% 28.7%
模型大小 270M (f16) 230M (f16) 45M (CQ2)
每 token 算力 540 MFLOPs 460 MFLOPs 70 MFLOPs

Needle 2 以 1/6 的参数量在三项基准上与最强竞品相当,在 Seal-Tools 上甚至领先------这正是"专用模型"的优势所在。


项目详细剖析

SAN 架构:三个反常识的选择

Needle 2 使用 Simple Attention Network(SAN)而不是标准 Transformer,核心是三个设计选择:

选择 1:Hadamard MLP 替代标准 FFN

标准 Transformer 的 FFN 层是参数量最大的部分(约 2/3 的参数在这里)。SAN 用固定 Walsh-Hadamard 变换(一种没有可学习参数的线性变换)替代密集投影,几乎不消耗参数预算。

lua 复制代码
标准 FFN(参数多):  x → W1 → ReLU → W2 → output
Hadamard MLP(几乎无参):  x → H(固定变换)→ output

这不是砍功能,而是把"知识存储"的工作全部转移到 Engram 记忆系统。

选择 2:Engram 记忆 = 哈希 n-gram 表

世界知识("巴黎是法国首都"、"list.append() 的语法")存在一个哈希 n-gram 表里,推理时直接查表------零乘法,零参数消耗。

这个分离使模型的"计算部分"(Attention + Hadamard)极度精简,而知识密度不受影响。

选择 3:多通道残差流(Multi-lane Hyper-connections)

27 层 × 512 宽的网络用多通道连接获得比标准残差更灵活的路由,效果相当于"更宽的模型",但不增加宽度。

CQ2-bit:训练即量化

大多数模型的量化是事后操作:先用 float16/bfloat16 训练,然后量化到 INT4 或 INT8。这个过程不可避免地会损失精度,且越低精度损失越大。

Needle 2 用的 Cactus Quants (CQ2-bit) 从训练阶段就针对 2-bit 量化优化:

arduino 复制代码
标准流程:FP16 训练 → 事后量化 → INT4 部署(精度下降)
CQ2 流程:CQ2-bit 感知训练 → CQ2-bit 部署(训练即部署目标)

官方的说法:"The 2-bit model you deploy is the model that was trained." 没有训练-部署精度差,量化不是妥协而是设计目标。

推理引擎的三个速度来源

来源 1:权重在向量寄存器内展开,不解压到内存

传统量化模型在推理时需要把权重从低精度解压到高精度再计算。CQ2-bit 的权重可以直接在 SIMD 寄存器里操作,省去了解压步骤。

来源 2:语法约束跳过 98% 的词汇表投影

LLM 生成每个 token 时,通常需要对整个词汇表(数万个 token)算 softmax。Needle 2 的输出格式是结构化 JSON,在任意位置只有极少数合法字符,引擎可以在 softmax 之前跳过绝大多数候选。

来源 3:自动检测 CPU 指令集

单一二进制内置多套指令集优化路径:SDOT(ARMv8.4)、NEON(通用 ARM)、AVX2(x86)、RISC-V Vector Extension、WASM SIMD------运行时自动选择最优路径。

LoRA 微调:从数据到 .cact 文件

微调 Needle 2 比微调通用大模型简单得多,因为任务范围明确。

Step 1:准备数据

jsonl 复制代码
{"query": "明天下午三点提醒我开会", "tools": [{"name": "set_reminder", ...}], "answers": [{"name": "set_reminder", "arguments": {"time": "tomorrow 3pm", "message": "开会"}}]}
{"query": "今天天气怎么样", "tools": [{"name": "set_reminder", ...}], "answers": []}

注意:必须包含约 1/8 的无关示例("answers": []),防止模型对所有输入都触发工具调用。

Step 2:数据增强(可选)

bash 复制代码
# 用 OpenRouter API 自动扩充数据集
needle generate-data --augment data.jsonl --num-samples 1000

Step 3:LoRA 训练

bash 复制代码
# CPU 训练
needle finetune data.jsonl --epochs 10 --out adapter.pkl

# GPU 加速
pip install "cactus-needle[gpu]"
needle finetune data.jsonl --epochs 10 --out adapter.pkl

# Apple Silicon
pip install "cactus-needle[metal]"
needle finetune data.jsonl --epochs 10 --out adapter.pkl

Step 4:导出 .cact 文件

bash 复制代码
# LoRA adapter 在导出时直接合并进权重
needle build checkpoints/needle2.pkl --lora adapter.pkl --out tuned.cact

Step 5:加载使用

python 复制代码
agent = needle.Needle(tools=[my_tools], weights="tuned.cact")

微调后基准测试显示,精度提升可达 21--58 个百分点,在特定任务上甚至超过 DeepSeek V4 Flash 这类前沿云端模型------这是专用模型在固定工具集上的核心优势。

部署场景与速度

设备 解码速度 内存占用
Raspberry Pi 5 500+ tok/s ~28MB
Apple Vision Pro 1,500 tok/s ~28MB
Meta Quest 3S 400--800 tok/s ~28MB
三星 A 系列手机(<$200) 300--700 tok/s ~28MB
ESP32-S3(微控制器) 支持(需外部 RAM) ~28MB

注意内存占用是固定的------无论对话多长,不随轮次增长,这是 256-token 滑动窗口 KV 缓存的设计结果。


项目地址与资源

官方资源

相关资源


总结与展望

核心要点回顾

  1. 专用 > 通用(在固定任务上):45M 参数专注工具调用,在三项基准上与 6 倍大的模型持平甚至领先
  2. CQ2-bit = 训练即部署:量化不是精度妥协,而是从第一天就是设计目标
  3. SAN 三件套:Hadamard MLP 省参数、Engram 记忆存知识、多通道残差扩路由
  4. 置信度门控:不是"猜",是校准过的概率信号,可以可靠地驱动本地/云端路由决策
  5. 28MB 固定内存:256-token 滑动窗口保证内存不随对话增长,嵌入式场景的必要条件

适用人群

  • 端侧 AI / 边缘计算工程师:在资源受限设备上需要可靠的工具调用能力
  • IoT 和智能家居开发者:离线语音指令解析,零云端依赖
  • 移动 App 开发者:想在 App 内嵌一个本地 Agent,不依赖云端 API
  • AI 研究者:对 SAN 架构、CQ2-bit 量化、端侧推理优化感兴趣

一句话评价

Needle 2 证明了一件事:当你把问题范围定得足够窄,14MB 可以打赢 270MB------这不是技巧,是架构哲学。


欢迎访问 PrimeSkills ------ 一个精心策划的 AI Agent 与技能市场,所有内容均经过真实企业级工作流验证。没有噱头,只有真正有效的东西。

更多实用知识和有趣产品,欢迎访问我的个人主页

相关推荐
林澈在路上21 分钟前
AI翻唱软件哪个好 2026国产AI写歌工具对比推荐
大数据·人工智能·深度学习·github·aigc·音视频·音频
咖啡星人k25 分钟前
2026 MCP 模型上下文协议:让 AI 自己动手接工具,告别手写接口(MonkeyCode 实战)
人工智能·深度学习·机器学习·语言模型·自然语言处理
yyuuuzz1 小时前
记一次 VPS 性能排查:共享 CPU 突发额度导致的限流
运维·服务器·人工智能
恋猫de小郭1 小时前
看懂大模型架构术语,帮助你理解目前常见的大模型开源架构
前端·人工智能·ai编程
tachibana21 小时前
复杂任务怎么做的任务拆分?
人工智能·ai·大模型·llm·agent
tachibana21 小时前
ReAct、Plan-and-Execute、Reflection 三种范式有什么核心区别
人工智能·ai·大模型·llm·agent
————A1 小时前
Agent 接收用户上传文件
人工智能·笔记·python·状态模式
Huazhongzhanhui1 小时前
极智防护与绿色表改:2026中国(武汉)国际表面处理展览会涂装涂料展会前瞻
人工智能·云计算
金融小师妹1 小时前
多因子智能推演:黄金震荡回升,杰克逊霍尔“沃什首秀”政策如何重塑金价路径的AI预测框架
大数据·人工智能·python·线性回归