解锁谷歌FunctionGemma模型的无限潜力
作者 /Google DeepMind AI DevX, Juyeong Ji
在智能体 AI 领域,工具调用能力是将自然语言转化为可执行软件操作的关键。此前,我们发布了专门针对函数调用而特别优化的Gemma 3 270M模型版本FunctionGemma。该模型旨在协助开发者构建响应快速且具高性价比的智能体,以将自然语言转化为可执行的 API 操作。
特定的应用场景往往需要专用的模型。在本文中,我们将展示如何通过微调 FunctionGemma,来应对工具选择歧义问题,即模型如何应对从一个或多个看似相似的函数中做出调用选择的情形。此外,我们还将介绍 "FunctionGemma Tuning Lab",这款演示工具让开发者无需编写任何训练代码即可完成微调过程。
FunctionGemma Tuning Lab
https://huggingface.co/spaces/google/functiongemma-tuning-lab
为什么要对工具调用进行微调?
如果 FunctionGemma 现已支持工具调用,为何还需进行微调?
答案在于语境和特定策略。通用模型无法理解您的业务规则。常见的微调应用场景包括:
消除选择歧义: 如果用户提问: "差旅策略是什么?",基础模型可能会默认执行 Google 搜索。然而,企业级模型则应搜索内部知识库。
极致专业化: 您可以训练模型,使其掌握公开数据中未涵盖的特定任务或专有格式,例如处理特定领域的 Mobile Actions(如控制设备功能) 或解析内部 API 以构建高度复杂的监管报告。
模型蒸馏: 您可以使用大模型来生成合成训练数据,然后对规模更小但速度更快的模型进行微调,从而更高效地运行此特定工作流程。
特定领域的 Mobile Actions
https://ai.google.dev/gemma/docs/mobile-actions
案例分享:
内部文档与 Google 搜索
让我们通过技术指南中的一个实例,来了解如何使用Hugging Face TRL库对 FunctionGemma 进行微调。
技术指南
https://ai.google.dev/gemma/docs/functiongemma/finetuning-with-functiongemma
Hugging Face TRL
https://huggingface.co/docs/trl/index
挑战
我们的目标是训练模型,使其能够区分两种特定工具:
search_knowledge_base(内部文档)
search_google(公开信息)
当被问及 "使用 Python 编写简单递归函数的最佳实践是什么?" 时,通用模型会默认使用 Google 搜索。但对于 "差旅餐饮的报销限额是多少?" 这类查询,模型需要分辨出这是一个内部策略问题。
解决方案
为了评估性能,我们使用了bebechien/SimpleToolCalling数据集,当中包含需要在search_knowledge_base与search_google两种工具中做出选择的样本对话示例。
bebechien/SimpleToolCalling
https://huggingface.co/datasets/bebechien/SimpleToolCalling
我们将此数据集划分为训练集和测试集,同时单独保存测试集,以便针对 "未见过的" 数据对模型进行评估,确保该模型了解底层路由逻辑,而非仅仅记住特定示例。
当我们按照 50/50 的比例划分训练集与测试集以评估基础 FunctionGemma 模型时,结果并不理想。该基础模型要么选择了错误的工具,要么提议 "讨论" 策略,而非执行函数调用。
关于数据分布的重要说明
在准备数据集时,数据拆分方式与数据本身同样重要。
fromdatasetsimportload_dataset
dataset = load_dataset("bebechien/SimpleToolCalling", split="train")
# Convert dataset to conversational format
dataset = dataset.map(create_conversation, remove_columns=dataset.features, batched=False)
# Split dataset into 50% training samples and 50% test samples
dataset = dataset.train_test_split(test_size=0.5, shuffle=False)
在此案例研究中,指南采用了50/50 训练-测试划分方式,并禁用了随机打乱功能 (shuffle=False)。虽然实际生产环境通常采用 80/20 的划分方式,但此处选择等分是为了突出显示模型在面对大量未见过的数据时表现出的性能提升。
然而,这里存在一个陷阱:
由于数据集已预先打乱,因此,本案例特意禁用了随机打乱功能。但如果您的源数据是按类别排序 (例如首先显示所有search_google示例,随后显示所有search_knowledge_base示例),使用shuffle=False将导致模型训练完全在一种工具上完成,而测试则在另一种工具上完成。这种训练阶段缺乏多样性的情况容易导致糟糕的性能表现,因为模型从未学习过如何区分不同的类别。
最佳实践:
在对自定义数据集应用此最佳实践时,请务必确保您的源数据经过预先混合。如果分布顺序未知,您必须将此参数更改为shuffle=True,以确保模型能在训练期间均衡学习所有工具的表征。
结果
我们使用SFTTrainer(监督式微调) 对模型进行了 8 个周期的微调。训练数据明确地向模型说明了不同查询所属的领域。
上图展示了 "损失值" (错误率) 随时间推移下降的情况。初期的急剧下降表明该模型正在快速适应新的路由逻辑。
经过微调后,该模型的行为发生了巨大变化,并且学会了严格遵守企业策略。当被问到相同的问题,如 "如何创建一个新的 Jira 项目?" 时,经过微调的模型可正确执行以下调用:
call:search_knowledge_base{query: Jira project creation process }
隆重推出
FunctionGemma Tuning Lab
并非所有人都愿意管理 Python 依赖项、配置SFTConfig,或从头开始编写训练循环。为此,我们推出了FunctionGemma Tuning Lab。
FunctionGemma Tuning Lab
https://huggingface.co/spaces/google/functiongemma-tuning-lab
FunctionGemma Tuning Lab 是一款用户友好型的演示工具,托管于 Hugging Face Spaces,可简化向模型传授特定函数架构的整个过程。
关键功能
无代码界面: 您无需编写 Python 脚本,可以直接在界面中定义函数架构 (JSON)。
自定义数据导入: 您只需上传包含用户提示词、工具名称和工具参数的 CSV 文件即可。
一键微调: 借助滑块灵活配置学习速率和学习周期,随后立即开始训练。我们提供了一组默认配置,这些配置经过精心设计,可适配大多数标准应用场景。
实时可视化: 实时查看训练日志和损失曲线的动态变化,确保模型顺利收敛。
自动评估: Tuning Lab 会在训练前后自动评估性能,让您能够获得改进效果的即时反馈。
Tuning Lab 入门指南
如要在本地使用 Tuning Lab,您可以借助hf CLI克隆代码库,并通过几个简单的命令运行该应用:
hf download google/functiongemma-tuning-lab --repo-type=space --local-dir=functiongemma-tuning-lab cdfunctiongemma-tuning-lab pip install -r requirements.txt python app.py
hf CLI
https://huggingface.co/docs/huggingface_hub/en/guides/cli
结论
无论您选择使用 TRL 编写专属训练脚本,还是利用 FunctionGemma Tuning Lab 的演示可视化界面,微调都是充分发挥 FunctionGemma 潜力的关键所在。它可将通用助理转化为专业智能体,同时能够遵守严格的业务逻辑并处理复杂的私有数据结构。
参考文献
博文
从 "对话" 迈向 "行动": 利用 FunctionGemma 打造下一代端侧智能体
代码示例
使用 FunctionGemma 进行微调
https://ai.google.dev/gemma/docs/functiongemma/finetuning-with-functiongemma
微调 FunctionGemma 以执行 Mobile Actions
https://ai.google.dev/gemma/docs/mobile-actions
HuggingFace Space
FunctionGemma Tuning Lab
https://huggingface.co/spaces/google/functiongemma-tuning-lab
欢迎您持续关注 "谷歌开发者" 微信公众号,及时了解更多开发技术和产品更新等资讯动态。

