Cactus Needle: 一个 26M 参数的函数调用模型

Cactus Needle: 一个 26M 参数的函数调用模型

概览

Cactus Needle 是一个仅有 2600 万参数的开源函数调用模型,旨在单次工具调用(single-shot tool invocation)方面显著超越规模更大的模型。它针对边缘侧部署进行了优化,在消费级硬件上可以达到每秒 6,000 个 token 的预填充速度和每秒 1,200 个 token 的生成速度。

架构:简单注意力网络

Needle 利用一种“简单注意力网络”,通过移除所有多层感知器(MLPs)和全连接层,使其与标准的 Transformer 架构有着本质的区别。

移除知识库

在典型的 Transformer 中,前馈网络(FFN)层被认为充当了模型的知识库,用于保留事实和世界知识。Cactus Needle 完全移除了这些层,仅依靠注意力机制和门控机制运行。这种设计选择基于这样一个前提:工具调用本质上是一个检索和组装的任务——将查询与工具名称进行匹配并提取参数——而不是一个需要深度推理或广泛内部知识的任务。

技术规格

  • 结构: 一个由 12 层编码器组成的堆栈,利用带有分组查询注意力(GQA)的自注意力机制。
  • 设计: 采用编码器-解码器架构,而非仅解码器(decoder-only)的 GPT 风格。
  • 训练: 该模型使用 16 个 TPU 在 27 小时内对 2000 亿个 token 进行了预训练,随后在涵盖 15 个工具类别的 20 亿个 token 的合成函数调用数据上进行了后训练。
  • 优化: 团队采用了量化感知训练,以确保模型在为边缘设备压缩时仍能保持高性能。

性能与基准测试

Cactus Needle 专为单次函数调用设计。据报道,在此特定领域,它的表现优于规模大其 10 到 20 倍的模型,包括 Function Gemma、IBM Granite、LFM 和 Qwen 600M。

然而,该模型并不打算取代大语言模型(LLMs)处理复杂任务的能力。它在以下方面可能会遇到困难:

  • 并行函数调用。
  • 需要对多个工具进行复杂推理的任务。
  • 涉及渐进式披露(progressive disclosure)的“技能”。

实际应用与部署

由于其极小的占用空间,Needle 可以部署在低功耗硬件上,例如移动设备、Raspberry Pis 或嵌入式系统(例如智能家电)。

零样本与微调能力

当提供工具的 JSON 定义时,Needle 展示了强大的零样本能力。即使是对于它没有经过显式训练的函数——例如由 Claude 生成的智能家居控制功能——该模型也能准确地将用户意图映射到正确的函数并提取参数。

对于专门的使用场景,该模型可以在 CPU 上进行微调,而无需 GPU。提供的 GitHub 仓库包含 JAX 代码(使用 Flax 和 Optax)以方便这一过程。

级联架构策略

Cactus 倡导一种“级联架构”,即由小型、专门的模型处理特定的工具集。在此系统中,一个小模型可以充当路由(router),决定查询属于哪个工具集,然后将任务委派给另一个专门的小模型,或者在需要复杂推理时回退到基于云端的更大模型。

Sources