站点图标 高效码农

FunctionGemma揭秘:谷歌270M小模型如何在手机上实现离线AI函数调用

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%的日常指令,只有少数复杂请求才走大模型。

举两个谷歌官方展示的实际案例:

  1. Tiny Garden:一个语音控制的虚拟种植游戏。用户说“在第一行种向日葵”或“给1号和2号地块浇水”,模型能准确分解为plant_seedwater_plots等自定义函数,完全离线运行。
  2. 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是一个非常值得尝试的起点。它体积小、速度快、完全开源,而且有谷歌官方提供的微调示例和数据集支持。

下一步建议:

  1. 先下载模型,在本地跑通官方天气查询示例,感受函数调用流程。
  2. 根据自己的API定义少量样本(几十到几百条即可),尝试LoRA微调。
  3. 逐步扩展到多轮对话和错误处理场景。

270M参数的小模型正在重新定义边缘AI的可能性。FunctionGemma或许不是最聪明的模型,但它可能是最适合跑在你口袋里手机上的那个“聪明代理”。

感兴趣的开发者可以直接访问:

  • Hugging Face模型页:https://huggingface.co/google/functiongemma-270m-it
  • 官方文档:https://ai.google.dev/gemma/docs/functiongemma
  • Mobile Actions微调笔记本(GitHub)

开始动手吧,让你的应用拥有真正本地化的智能理解能力。

退出移动版