FunctionGemma:谷歌推出的轻量级函数调用开源模型详解
你有没有想过,让一个只有270M参数的小模型,在手机或笔记本上就能把你的自然语言指令精准转化为可执行的API调用?这听起来像是大模型才有的能力,但谷歌最近发布的FunctionGemma正是为此而生。它基于Gemma 3 270M模型,经过专门的函数调用训练,目标是成为开发者构建本地化、私密化、快速响应的智能代理的理想基础模型。
这篇文章会带你全面了解FunctionGemma是什么、适合在哪些场景使用、如何上手运行、性能表现如何,以及它的局限性和安全考量。内容完全来自谷歌官方文档和Hugging Face模型卡,不会添加任何外部信息。
FunctionGemma到底是什么?
简单来说,FunctionGemma是谷歌DeepMind团队推出的一款开源大语言模型,参数量仅270M(即2.7亿),但它不是用来直接聊天,而是专门为**函数调用(function calling)**场景设计的。
它继承了Gemma 3 270M的架构,使用了和Gemini系列相同的技术路线,但聊天模板不同,训练时特别强化了将自然语言转化为结构化函数调用的能力。
模型的核心定位是:
-
作为进一步微调(fine-tune)的基座模型,而不是直接开箱即用的对话模型。 -
适合在资源受限的环境(如手机、笔记本、本地云)运行,强调低延迟、完全离线、数据隐私。 -
帮助开发者构建混合系统:常见指令在本地小模型处理,复杂任务再交给云端大模型。
谷歌明确指出:FunctionGemma在未微调状态下表现一般,只有经过针对具体任务的微调后,才能发挥出最佳性能。这和小模型的通用规律一致——体积小,通用性有限,但专精后性价比极高。
什么时候应该选择FunctionGemma?
很多开发者在构建智能代理时会纠结:是用大模型零样本提示,还是自己训练一个小模型?FunctionGemma给出了一个清晰的适用场景:
-
你已经有明确定义的API接口(比如智能家居控制、媒体播放、导航、日历操作等)。 -
你希望函数调用行为高度确定、一致,而不是依赖零样本提示的随机性。 -
你的应用对延迟和隐私要求极高,必须完全本地运行,不能把用户指令上传云端。 -
你在设计分层代理系统:让轻量级模型处理80%的日常指令,只有少数复杂请求才走大模型。
举两个谷歌官方展示的实际案例:
-
Tiny Garden:一个语音控制的虚拟种植游戏。用户说“在第一行种向日葵”或“给1号和2号地块浇水”,模型能准确分解为 plant_seed、water_plots等自定义函数,完全离线运行。 -
Mobile Actions:把用户指令(如“创建午餐日历事件”“打开手电筒”)转化为Android系统API调用。谷歌公开了完整数据集和微调脚本,任何人都可以复现。
这两个例子都运行在手机上,证明了270M参数模型在特定领域微调后的强大潜力。
如何快速上手运行FunctionGemma?
FunctionGemma已经在Hugging Face、Kaggle和Vertex AI上开放,模型名称是google/functiongemma-270m-it。
下面是用Hugging Face Transformers库运行的最小示例(代码来自官方文档,直接可用):
1. 安装依赖
pip install torch transformers
2. 加载模型和处理器
from transformers import AutoProcessor, AutoModelForCausalLM
processor = AutoProcessor.from_pretrained("google/functiongemma-270m-it", device_map="auto")
model = AutoModelForCausalLM.from_pretrained("google/functiongemma-270m-it", dtype="auto", device_map="auto")
3. 定义函数并生成调用
weather_function_schema = {
"type": "function",
"function": {
"name": "get_current_temperature",
"description": "Gets the current temperature for a given location.",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city name, e.g. San Francisco",
},
},
"required": ["location"],
},
}
}
message = [
# 关键系统提示:激活函数调用能力
{
"role": "developer",
"content": "You are a model that can do function calling with the following functions"
},
{
"role": "user",
"content": "What's the temperature in London?"
}
]
inputs = processor.apply_chat_template(
message,
tools=[weather_function_schema],
add_generation_prompt=True,
return_dict=True,
return_tensors="pt"
)
out = model.generate(
**inputs.to(model.device),
pad_token_id=processor.eos_token_id,
max_new_tokens=128
)
output = processor.decode(out[0][len(inputs["input_ids"][0]):], skip_special_tokens=True)
print(output)
# 输出示例:<start_function_call>call:get_current_temperature{location:<escape>London<escape>}<end_function_call>
注意:必须包含role: "developer"的那条系统提示,否则模型不会触发函数调用逻辑。
更多详细示例和最佳实践,可以参考谷歌官方文档中的格式指南。
微调后性能能提升多少?
官方给出了一个非常直观的对比:在“Mobile Actions”数据集上微调前后准确率从58%提升到85%,提升幅度超过45%。
这说明:270M参数的小模型在通用函数调用任务上起点不高,但通过针对性微调,能在特定领域达到实用水平。
基准测试成绩(零样本)
| 基准测试项目 | 零样本准确率 |
|---|---|
| BFCL Simple | 61.6% |
| BFCL Parallel | 63.5% |
| BFCL Multiple | 39% |
| BFCL Parallel Multiple | 29.5% |
| BFCL Live Simple | 36.2% |
| BFCL Live Parallel | 25.7% |
| BFCL Live Multiple | 22.9% |
| BFCL Live Parallel Multiple | 20.8% |
| BFCL Relevance | 61.1% |
| BFCL Irrelevance | 70.6% |
可以看到,在简单单函数调用场景下表现尚可,但多函数并行或多函数组合场景下准确率明显下降,这也是为什么官方反复强调“必须微调”的原因。
在手机上的实际运行性能如何?
谷歌在三星S25 Ultra上实测了微调后的模型(动态int8量化,CPU运行):
Mobile Actions 微调模型
| 量化方式 | 上下文长度 | 预填充速度(tokens/s) | 解码速度(tokens/s) | 首token延迟(秒) | 模型大小(MB) | 峰值内存(MB) |
|---|---|---|---|---|---|---|
| dynamic_int8 | 1024 | 1718 | 125.9 | 0.3 | 288 | 551 |
Tiny Garden 微调模型
| 量化方式 | 上下文长度 | 预填充速度(tokens/s) | 解码速度(tokens/s) | 首token延迟(秒) | 模型大小(MB) | 峰值内存(MB) |
|---|---|---|---|---|---|---|
| dynamic_int8 | 1024 | 1743 | 125.7 | 0.3 | 288 | 549 |
首token延迟仅0.3秒,解码速度超过120 tokens/s,在手机上完全可以做到接近实时响应。
模型训练与数据情况
FunctionGemma在6万亿token的文本数据上训练,知识截止日期为2024年8月。主要训练数据包括:
-
公开的工具定义(常见网络API) -
工具使用交互记录(包含用户提示、函数调用、函数返回结果、模型自然语言总结或澄清请求)
数据处理方面,谷歌进行了严格的过滤:
-
多阶段CSAM(儿童性虐待材料)过滤 -
敏感个人信息过滤 -
基于内容质量和安全策略的额外过滤
安全与伦理评估
谷歌在儿童安全、内容安全、代表性伤害(偏见、刻板印象等)三个维度进行了结构化评估和内部红队测试。结果显示,相较上一代Gemma模型,在所有维度都有显著改进。测试全程未启用安全过滤器,以真实评估模型原始行为。
局限性:评估仅覆盖英文提示。
常见问题解答(FAQ)
FunctionGemma可以直接当聊天机器人用吗?
不推荐。它不是为对话设计的,直接使用效果一般。官方定位是作为函数调用任务的微调基座。
不微调能用吗?
可以,但准确率较低,尤其在多函数、并行调用场景。建议至少在自己的API schema上做少量微调。
支持多轮对话中的函数调用吗?
支持。模型设计时就考虑了多轮场景,微调时可以包含多轮交互数据。
上下文长度是多少?
输入支持32K tokens,输出也支持最高32K tokens(扣除输入部分)。
模型开源许可如何?
开放权重,可负责任地用于商业用途,具体条款见谷歌Gemma系列许可协议。
在什么硬件上训练的?
使用Google TPU(v4p、v5p、v5e),软件栈为JAX + ML Pathways。
有现成的微调数据集吗?
有!谷歌公开了“Mobile Actions”数据集和完整微调笔记本,可直接用于Android系统指令场景。
如何开始你的FunctionGemma项目?
如果你正在开发一个需要本地化函数调用的应用,比如:
-
智能家居语音助手 -
离线导航代理 -
隐私优先的个人助理 -
手机上的小型游戏AI
FunctionGemma是一个非常值得尝试的起点。它体积小、速度快、完全开源,而且有谷歌官方提供的微调示例和数据集支持。
下一步建议:
-
先下载模型,在本地跑通官方天气查询示例,感受函数调用流程。 -
根据自己的API定义少量样本(几十到几百条即可),尝试LoRA微调。 -
逐步扩展到多轮对话和错误处理场景。
270M参数的小模型正在重新定义边缘AI的可能性。FunctionGemma或许不是最聪明的模型,但它可能是最适合跑在你口袋里手机上的那个“聪明代理”。
感兴趣的开发者可以直接访问:
-
Hugging Face模型页:https://huggingface.co/google/functiongemma-270m-it -
官方文档:https://ai.google.dev/gemma/docs/functiongemma -
Mobile Actions微调笔记本(GitHub)
开始动手吧,让你的应用拥有真正本地化的智能理解能力。
