googleFunctionGemma:如何运行与微调

了解如何在您的设备和手机上本地运行并微调 FunctionGemma。

FunctionGemma 是 Google 推出的一个新的 2.7 亿参数模型,专为函数调用和微调设计。基于 Gemma 3 270M 并专门针对仅文本的工具调用进行训练,其小巧的体积使其非常适合在手机上部署。

您可以在以下环境运行全精度模型 550MB 内存 (CPU),现在您可以 微调 使用 Unsloth 在本地运行。感谢 Google DeepMind 与 Unsloth 合作,提供零日支持!

运行教程对 FunctionGemma 进行微调

免费笔记本:

⚙️ 使用指南

Google 建议以下推理设置:

  • top_k = 64

  • top_p = 0.95

  • temperature = 1.0

  • 最大上下文长度 = 32,768

当我们使用下面内容时,可以找到聊天模板格式:

def get_today_date():
    """ 获取今天的日期 """
    return {"today_date": "2025年12月18日"}
    
tokenizer.apply_chat_template(
    [
        {"role" : "user", "content" : "今天的日期是什么?"},
    ],
    tools = [get_today_date], add_generation_prompt = True, tokenize = False,
)

FunctionGemma 聊天模板格式:

circle-info

FunctionGemma 需要系统或 开发者消息 作为 您是一个可以进行函数调用的模型,具有以下函数 Unsloth 版本如果您忘记传入会内置此项,因此请使用 unsloth/functiongemma-270m-itarrow-up-right

🖥️ 运行 FunctionGemma

下面查看本地桌面指南,或查看我们的手机部署指南。

Llama.cpp 教程(GGUF):

在 llama.cpp 中运行的说明(注意我们将使用 4 位以适配大多数设备):

1

获取最新的 llama.cpp此处的 GitHubarrow-up-right。您也可以按照下面的构建说明进行。若 -DGGML_CUDA=ON 更改为 -DGGML_CUDA=OFF 如果您没有 GPU 或仅想要在 CPU 上进行推理。 对于 Apple Mac / Metal 设备,设置 -DGGML_CUDA=OFF 然后照常继续 - Metal 支持默认启用。

2

您可以直接从 Hugging Face 拉取。由于模型体积很小,我们将使用未量化的全精度 BF16 变体。

3

通过以下方式下载模型(在安装 pip install huggingface_hub hf_transfer 之后)。您可以选择 BF16 或其他量化版本(尽管由于模型较小,不建议低于 4-bit)。

4

然后以对话模式运行模型:

📱 手机部署

由于体积小,您也可以在手机上运行并部署 FunctionGemma。我们与 PyTorch 合作,使用量化感知训练(QAT)恢复了 70% 的精度,然后直接部署到边缘设备。

📱Run LLMs on your Phonechevron-right

查看我们的 iOS 和 Android 手机部署教程:

appleiOS 教程androidAndroid 教程

🦥 对 FunctionGemma 进行微调

Google 指出 FunctionGemma 旨在针对您的特定函数调用任务进行微调 包括多轮用例。Unsloth 现在支持对 FunctionGemma 进行微调。我们创建了 2 个微调笔记本,展示如何通过 全量微调或 LoRA,在 Colab 笔记本中免费训练模型:

在调用工具前推理的微调笔记本arrow-up-right中,我们将 微调它以在函数调用前“思考/推理”。链式思维推理对于提升工具使用能力变得越来越重要。

FunctionGemma 是一个专门用于函数调用的小型模型。它使用自己独特的聊天模板。当提供工具定义和用户提示时,它会生成结构化输出。然后我们可以解析此输出以执行工具、检索结果,并使用这些结果生成最终答案。

回合类型
内容

开发者提示

<start_of_turn>developer

您可以使用以下函数进行函数调用:

函数声明

<start_function_declaration>declaration:get_weather{

description: "获取城市的天气",

parameters: { city: STRING }

}

<end_function_declaration>

<end_of_turn>

用户回合

<start_of_turn>user

巴黎的天气怎么样?

<end_of_turn>

函数调用

<start_of_turn>model

<start_function_call>call:get_weather{

city: "paris"

}

<end_function_call>

函数响应

<start_function_response>response:get_weather{temperature:26}

<end_function_response>

助理结尾

巴黎的天气是 26 摄氏度。

<end_of_turn>

在这里,我们通过一个单一的思考块(而不是交错推理)来实现简化版本,使用 <think></think>。因此,我们的模型交互如下所示:

思考(Thinking) + 函数调用

<start_of_turn>model

<think>

用户想要巴黎的天气。我有 get_weather 工具。我应该用 city 参数来调用它。

</think>

<start_function_call>call:get_weather{

city: "paris"

}

<end_function_call>

🪗为移动操作微调 FunctionGemma

我们还创建了一个笔记本,展示如何让 FunctionGemma 执行移动操作。在 移动操作微调笔记本arrow-up-right中,我们还启用了评估,并展示了为设备端操作进行微调的效果良好,如评估损失下降所示:

例如,给定一个提示 请为本周五 2025 年 6 月 6 日下午 2 点安排一个“团队同步会议”的提醒。

我们微调模型以能够输出:

🏃‍♂️使用 FunctionGemma 的多轮工具调用

我们还创建了一个笔记本,展示如何让 FunctionGemma 进行多轮工具调用。在 多轮工具调用笔记本arrow-up-right中,我们展示了 FunctionGemma 能够在长消息变更中调用工具,例如见下:

您首先需要像下面这样指定您的工具:

然后我们为所有工具创建映射:

我们还需要一些工具调用和解析代码:

现在我们可以调用模型了!

试试我们为 FunctionGemma 制作的 3 个笔记本:

最后更新于

这有帮助吗?