26M参数小模型让AI助手直接调用工具,还能本地微调
我们将Gemini 3.1蒸馏为一个2600万参数的“简单注意力网络”,你甚至可以在Mac/PC上本地微调它。在生产环境中,Needle在Cactus上以每秒6000个token的预填充速度和1200个token的解码速度运行。权重完全开源在Cactus-Compute/needle,数据集生成代码也已公开。d=512,8H/4KV,BPE=8192。
┌──────────────┐ │ 工具调用 │ └──────┬───────┘ ┌┴──────────┐ │ Softmax │ └─────┬─────┘ ┌─────┴─────┐ │ 线性层 (T)│ ← 权重共享 └─────┬─────┘ ┌─────┴─────┐ │ ZCRMSNorm │ └─────┬─────┘ ┌────────┴────────┐ │ 解码器 x 8 │ │┌───────────────┐│ ││ ZCRMSNorm ││ ││ 掩码自注意力 ││ ││ + RoPE ││ ││ 门控残差连接 ││ │├───────────────┤│ ┌──────────────┐ ││ ZCRMSNorm ││ │ 编码器 x 12 │──────────────────────▶交叉注意力 ││ │ │ ││ 门控残差连接 ││ │ ┌──────────┐ │ │└───────────────┘│ │ │ZCRMSNorm │ │ └────────┬────────┘ │ │自注意力 │ │ ┌─────┴─────┐ │ │GQA+RoPE │ │ │ 嵌入层 │ ← 共享 │ │门控残差 │ │ └─────┬─────┘ │ │ │ │ ┌───────┴───────-┐ │ │ (无FFN) │ │ │[EOS]<tool_call>│ │ └──────────┘ │ │ + 答案 │ │ │ └───────────────-┘ └──────┬───────┘ │ ┌────┴──────┐ │ 嵌入层 │ └────┬──────┘ │ ┌────┴──────┐ │ 文本 │ │ 查询 │ └───────────┘
在16个TPU v6e上预训练了2000亿个token(耗时27小时)。在20亿个token的单次函数调用数据集上进行后训练(耗时45分钟)。
Needle是简单注意力网络的一次实验性尝试,旨在重新定义面向消费设备(手机、手表、眼镜等)的微型AI。虽然它在单次函数调用任务上超越了FunctionGemma-270m、Qwen-0.6B、Graninte-350m和LFM2.5-350m,适用于个人AI场景,但这些模型具有更广的范围和容量,在对话场景中表现更优。此外,小模型可能较为敏感。请使用下一节中的UI测试你自己的工具,并一键进行相应微调。
## 快速开始 git clone https://github.com/cactus-compute/needle.git cd needle && source ./setup needle playground 打开一个Web UI,地址为http://127.0.0.1:7860,你可以在其中测试和微调自己的工具。权重会自动下载。
## 使用(Python) from needle import SimpleAttentionNetwork, load_checkpoint, generate, get_tokenizer
params, config = load_checkpoint("checkpoints/needle.pkl") model = SimpleAttentionNetwork(config) tokenizer = get_tokenizer()
result = generate( model, params, tokenizer, query="旧金山的天气怎么样?", tools='[{"name":"get_weather","parameters":{"location":"string"}}]', stream=False, ) print(result) # [{"name":"get_weather","arguments":{"location":"San Francisco"}}]
## 微调 # 沙盒(通过Gemini生成数据,训练,评估,打包结果) needle playground
# 命令行界面(如果本地没有权重,会自动下载) needle finetune data.jsonl
## 命令行界面 needle playground 通过Web UI测试和微调 needle finetune <data.jsonl> 在自定义数据上微调 needle run --query "..." --tools 单次推理 needle train 完整训练运行 needle pretrain 在PleIAs/SYNTH上预训练 needle eval --checkpoint <path> 评估检查点 needle tokenize 对数据集进行分词 needle generate-data 通过Gemini合成训练数据 needle tpu <action> TPU管理(参见docs/tpu.md)
@misc{ndubuaku2026needle, title={Needle}, author={Henry Ndubuaku, Jakub Mroz, Karen Mosoyan, Roman Shemet, Parkirat Sandhu, Satyajit Kumar, Noah Cylich, Justin H. Lee}, year={2026}, url={https://github.com/cactus-compute/needle} }