🔥 HN 710点 · Needle · cactus-compute

Tool Calling模型蒸馏:Needle 26M参数模型技术解析

凌晨1点22分,HN上710条评论在讨论同一个问题:26M参数的模型,真的能做Tool Calling?Needle项目用事实回答——它把Gemini的Tool Calling能力蒸馏到一个26M参数的小模型里,准确率达到90%+。这相当于把一头大象的平衡感塞进一只蚂蚁的大脑。

这不是什么黑魔法,而是AI Agent轻量化的里程碑:以后你的智能音箱可能也能调用API了。

26M
参数量
90%+
Tool Calling准确率
10x
速度提升

什么是Tool Calling模型蒸馏

模型蒸馏(Knowledge Distillation)的核心思想:用大模型教小模型做特定任务。Needle项目只聚焦一个任务——Tool Calling,这是AI Agent最核心的能力。

蒸馏流程

三步蒸馏法

  1. 数据合成:用Gemini生成10万+ Tool Calling训练样本
  2. 知识蒸馏:Gemini(教师模型) → Needle(学生模型)
  3. 精调优化:在特定领域数据上微调
# 蒸馏训练过程(简化)
# 1. 生成训练数据
teacher_model = "gemini-2.5-pro"
tools = [search_tool, calculator_tool, weather_tool, ...]
samples = generate_tool_calling_samples(teacher_model, tools, n=100000)

# 2. 蒸馏训练
student_model = Transformer(hidden_dim=256, layers=6, heads=4)
for sample in samples:
    # 软标签蒸馏
    teacher_logits = teacher_model(sample.prompt)
    student_logits = student_model(sample.prompt)
    loss = KLDivergence(teacher_logits, student_logits)
    loss.backward()

Needle模型架构

模型规格

  • 参数量:26M(约100MB模型文件)
  • 层数:6层Transformer
  • 隐藏维度:256
  • 注意力头:4个
  • 上下文长度:2048 tokens
  • 训练数据:10万+ Tool Calling样本
  • 推理速度:比Gemini快10倍+

支持的Tool Calling格式

# Needle支持的Tool Calling格式
{
  "tool_calls": [
    {
      "id": "call_001",
      "function": {
        "name": "search",
        "arguments": {
          "query": "latest AI news",
          "limit": 5
        }
      }
    },
    {
      "id": "call_002",
      "function": {
        "name": "calculate",
        "arguments": {
          "expression": "25 * 1.08"
        }
      }
    }
  ]
}

应用场景

1. 边缘设备Agent

26M参数模型可以运行在手机、树莓派等设备上:

# 在树莓派上运行Needle
import needle

model = needle.load_model("needle-26m")
tools = define_tools([weather, timer, lights])

# 本地推理,无需网络
response = model.chat(
    "把客厅灯光调暗一点",
    tools=tools
)
# → {"tool": "lights", "args": {"room": "living_room", "brightness": "dim"}}

2. 高频低延迟Agent

聊天机器人需要毫秒级响应的场景,26M模型比大模型快10倍+

3. 级联Agent架构

Needle做Tool Calling路由,大模型做复杂推理:

# 级联架构
user_input = "查询北京天气然后帮我订机票"

# 第一层:Needle快速识别工具调用
tool_calls = needle_model.parse(user_input)
# → [get_weather(city="北京"), book_flight(...)]

# 第二层:大模型处理复杂推理
for call in tool_calls:
    if call.complexity == "high":
        result = claude_model.execute(call)
    else:
        result = needle_model.execute(call)

OpenClaw集成指南

1. 安装Needle

# 克隆项目
git clone https://github.com/cactus-compute/needle.git
cd needle
pip install -e .

# 下载模型
python -m needle download --model needle-26m

2. 配置为OpenClaw Skill

# ~/.openclaw/skills/tool-routing/needle-router.md
---
name: Needle Tool Router
description: 使用Needle 26M模型快速路由Tool Calling
trigger: route tool call
---

## 功能
使用Needle轻量模型进行Tool Calling路由,
减少大模型调用频率,降低成本。

## 配置

model: needle-26m
endpoint: http://localhost:8080/v1/tool-call
timeout: 100ms  # 毫秒级响应

## 路由策略
- 简单查询 → Needle直接处理
- 复杂推理 → 转发到大模型
- 混合调用 → Needle解析工具,大模型生成参数

3. 成本对比

Tool Calling成本对比

方案 每次调用成本 延迟 适合场景
Gemini Pro $0.00125 500ms+ 复杂推理
Claude Sonnet $0.003 800ms+ 通用场景
Needle 26M $0.00001 50ms 高频调用

局限性与发展方向

⚠️ 当前局限

  • 工具范围受限:只支持预定义工具集
  • 复杂推理弱:多步推理准确率下降
  • 上下文有限:2048 tokens上下文
  • 泛化能力:新工具需要重新训练

🔮 未来方向

  • 增量学习:在线学习新工具
  • 多模态Tool Calling:支持图像/视频输入
  • 更小模型:5M参数的手机端版本
  • 群聊推理:多Agent协作工具调用