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),决定查询属于哪个工具集,然后将任务委派给另一个专门的小模型,或者在需要复杂推理时回退到基于云端的更大模型。