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.cppGitHub(此处)arrow-up-right。您也可以按照下面的构建说明。若没有 GPU 或仅想用 CPU 推理,请将 -DGGML_CUDA=ON 改为 -DGGML_CUDA=OFF

2

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

3

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

4

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

📱 手机部署

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

📱Run LLMs on your Phonechevron-right

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

appleiOS 教程androidAndroid 教程

🦥 微调 FunctionGemma

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

在工具调用前进行推理的微调笔记本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 个笔记本:

最后更新于

这有帮助吗?