Cactus团队发布了Needle项目,一个仅26MB的工具调用(Tool Calling)模型,通过将Gemini的工具调用能力蒸馏到极小的模型中,让资源受限的设备也能具备AI工具调用能力。
项目背景
AI工具调用(Tool Calling / Function Calling)是大语言模型的重要能力之一,让模型能够根据用户指令调用外部工具和API。但主流的工具调用能力通常依赖于大型模型(如GPT-4、Gemini Pro等),需要云端API支持。
Needle项目的目标是将这种能力压缩到一个仅26MB的模型中,使其可以在手机、嵌入式设备甚至浏览器中运行。
项目地址:https://github.com/cactus-compute/needle
核心特点
- 极小体积:模型仅26MB,适合边缘设备部署
- 工具调用能力:支持结构化的工具/函数调用
- 基于Gemma:从Google的Gemini/Gemma模型蒸馏而来
- 开源:Apache 2.0许可证
- 多平台:支持Python、移动端和Web环境
技术原理
知识蒸馏
Needle使用了知识蒸馏(Knowledge Distillation)技术,将大型Gemini模型的工具调用能力迁移到小型Gemma模型中。具体来说:
- 使用Gemini模型生成大量的工具调用示例
- 用这些示例对小型Gemma模型进行微调
- 优化模型结构和推理流程
- 压缩模型到26MB
工具调用格式
Needle使用结构化的JSON格式进行工具调用,与OpenAI的Function Calling格式兼容。这意味着你可以用Needle替代大型模型来处理简单的工具调用任务。
使用教程
1. 安装
pip install cactus-needle
2. 基本使用
from cactus_needle import NeedleModel
# 初始化模型
model = NeedleModel()
# 定义工具
tools = [
{
"name": "get_weather",
"description": "Get weather for a city",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "City name"}
}
}
}
]
# 执行工具调用
result = model.call("What is the weather in Beijing?", tools=tools)
print(result)
# 输出: {"tool": "get_weather", "arguments": {"city": "Beijing"}}
3. 集成到应用
from cactus_needle import NeedleModel
import json
model = NeedleModel(tools=my_tools)
def process_user_input(text):
# 模型决定调用哪个工具
call = model.call(text)
if call:
# 执行工具
tool_name = call["tool"]
args = call["arguments"]
result = execute_tool(tool_name, args)
return result
else:
return "No tool call needed"
适用场景
- 移动应用:在手机本地运行AI助手,无需联网
- IoT设备:智能设备理解和执行用户指令
- 浏览器扩展:在浏览器中运行轻量级AI
- 边缘计算:在网络边缘处理工具调用请求
- 离线助手:在无网络环境中提供AI工具调用能力
与大型模型的对比
- vs GPT-4:Needle体积小1000倍以上,但复杂任务能力有限
- vs Gemini Pro:Needle可在本地运行,无需API费用
- vs Llama 3:Needle专注于工具调用,更小更快
局限性
- 只支持简单的工具调用场景
- 复杂推理能力不如大型模型
- 需要预先定义好工具列表
- 多语言支持有限
简评
Needle代表了AI能力民主化的趋势——将大模型的核心能力压缩到可以在任何设备上运行的小模型中。对于需要在边缘设备上实现工具调用功能的开发者来说,这是一个值得关注的项目。
来源:GitHub cactus-compute/needle、Hacker News讨论
© 版权声明
THE END















暂无评论内容