
Google 近日开源了一款名为 FunctionGemma 的轻量级模型。它的目标很明确:为开发者构建自己的专用函数调用模型提供一个强大的起点。与通常用于对话的模型不同,FunctionGemma 专为函数调用任务而生,需要经过进一步的微调才能在其特定领域发挥出最佳性能。
FunctionGemma 基于 Gemma 3 的 270M 参数模型构建,共享相同的架构,但采用了与 Gemini 模型相关的研究和技术,并专门针对函数调用进行了优化训练。它的核心优势在于小巧的体积,这使得它可以轻松部署在资源受限的环境,例如个人笔记本电脑、台式机,或是你自己的云基础设施上,旨在让尖端的 AI 模型变得更普及。
该模型在单轮场景下具有很高的通用性,但官方建议使用特定任务的数据进行微调,以获得在特定应用领域的最佳准确率。为了展示如何通过专门化这个小模型来实现高性能,Google 在 Google AI Edge Gallery 应用中重点介绍了两个用例。
- Tiny Garden:一个经过精心调校的模型,专为语音控制的互动游戏设计。它能理解“在顶行种植向日葵”这类自然语言命令,并将其解析为
plant_seed 这样的应用程序特定函数和坐标。这展示了模型无需连接服务器即可驱动自定义应用逻辑的能力。
- 移动操作:为了帮助开发者构建自己的专家代理,Google 发布了一个数据集和微调方案。演示了如何将 FunctionGemma 微调成一个能将“打开手电筒”等用户指令转换为触发 Android 系统工具函数调用的模型。这个用例突显了模型作为离线私人助理,在个人设备上执行任务的能力。

模型信息与使用
模型地址
输入与输出
- 输入:文本字符串,例如问题或提示。上下文长度支持高达 32K 个词元(tokens)。
- 输出:根据输入生成的文本。每个请求的总输出上下文最多为 32K 个词元(需减去输入占用的部分)。
基本用法示例
以下是如何使用 FunctionGemma 配合 Hugging Face Transformers 库,根据 JSON 定义生成函数调用的代码示例。
首先,安装必要的依赖:
pip install torch
pip install transformers
然后,使用 Transformers 库加载模型和处理器:
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")
接着,使用 JSON Schema 定义一个函数,并设置系统指令来激活模型的函数调用逻辑。将用户查询作为输入,模型将生成对应的函数调用。
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>
模型训练与数据
训练数据集
模型基于包含多种来源文本的数据集进行训练,总计使用了 6T 个词元。训练数据的知识截止日期为 2024 年 8 月。关键数据组成部分包括:
- 公共工具定义:网络上常见的 API 接口定义。
- 工具使用交互:包含提示、函数调用、函数响应以及模型总结或请求澄清的自然语言响应组合。
数据预处理
训练数据经过了严格清洗和过滤:
- CSAM 过滤:在多个阶段应用了严格的儿童性虐待材料过滤。
- 敏感数据过滤:使用自动化技术过滤掉个人信息等敏感数据。
- 其他方法:基于内容质量和安全策略进行额外过滤。
硬件与软件
硬件
模型使用 Google 的张量处理单元(TPU)进行训练,包括 TPUv4p、TPUv5p 和 TPUv5e。TPU 专为机器学习中的矩阵运算优化,在性能、内存、可扩展性和成本效益方面具有优势,特别适合训练大型模型。
软件
- 训练使用了 JAX 和 ML Pathways。JAX 使研究人员能充分利用 TPU 等硬件,ML Pathways 则是用于构建能跨任务泛化 AI 系统的工具。这种组合简化了大型模型的训练开发流程。
评估结果与预期用途
评估结果
在安全测试中,与之前的 Gemma 模型相比,FunctionGemma 在儿童安全、内容安全和表征危害等方面均有显著进步。模型产生的策略违规极少,在避免无根据推断方面表现更好。(注:测试主要使用英语提示。)
预期用途
需要再次强调,此模型并非设计用于直接对话。它是一个需要针对特定函数调用任务进行微调的基础模型。其潜在用途包括:
- 构建专用代理:如上述的移动操作助手、游戏逻辑控制器。
- API 调用自动化:将自然语言指令转换为标准的 API 调用。
- 研究与开发:作为探索小型化、专用化 Transformer 模型在边缘计算场景中应用的起点。
局限性
与所有模型一样,FunctionGemma 也有其局限性:
- 训练数据依赖:模型性能受训练数据质量和范围限制。
- 任务复杂性:更适合有明确定义的任务,高度复杂或开放式的任务具有挑战性。
- 事实准确性:可能生成不正确或过时的信息。
- 语言细微差别:可能难以理解讽刺、比喻等复杂表达。
- 常识推理:在某些需要常识判断的场景中可能存在不足。
对于想要深入探索开源AI模型,并动手实践本地化部署与微调的开发者来说,FunctionGemma 提供了一个非常有趣的“样板”。你可以在 云栈社区 的人工智能和开源实战板块找到更多相关的讨论与技术文档资源。