从 Gemma 4 开始,我们引入了新的控制令牌。对于 Gemma 3 及更低版本,请参阅之前的文档。
以下部分指定了 Gemma 4 使用的控制令牌及其使用情形。请注意,控制令牌是在我们的分词器中预留的,并且仅适用于我们的分词器。
- 用于指示系统指令的令牌:
system - 表示用户回合的令牌:
user - 用于指示模型回答的 token:
model - 用于指示对话轮次开始的令牌:
<|turn> - 表示对话轮次结束的令牌:
<turn|>
以下是一个对话示例:
<|turn>system
You are a helpful assistant.<turn|>
<|turn>user
Hello.<turn|>
多模态
| 多模态令牌 | 用途 |
|---|---|
<|image> <image|> |
指明图片嵌入 |
<|audio> <audio|> |
指示音频嵌入 |
<|image|> <|audio|> |
特殊占位令牌 |
我们使用两个特殊占位符令牌(<|image|> 和 <|audio|>)来指定应插入图片和音频令牌的位置。在词元化之后,这些词元会被模型内部的实际软嵌入替换。
以下是一个对话示例:
prompt = """<|turn>user
Describe this image: <|image|>
And translate these audio:
a. <|audio|>
b. <|audio|><turn|>
<|turn>model"""
Agentic 和推理控制 token
为了支持代理工作流,Gemma 使用专门的控制令牌来区分内部推理(思考)和外部操作(函数调用)。这些令牌可让模型在提供最终回答或与外部工具互动之前处理复杂的逻辑。
函数调用
Gemma 4 经过了 6 个特殊令牌的训练,可管理“工具使用”生命周期。
| 令牌对 | 用途 |
|---|---|
<|tool> <tool|> |
定义工具 |
<|tool_call> <tool_call|> |
表示模型使用工具的请求。 |
<|tool_response> <tool_response|> |
将工具的执行结果提供给模型。 |
字符串值的定界符:<|"|>
单个令牌 <|"|> 用作结构化数据块中所有字符串值的分隔符。
- 用途:此令牌可确保字符串中的任何特殊字符(例如
{、}、,或引号)都被视为字面文本,而不是数据结构底层语法的一部分。 - 用法:函数声明、调用和响应中的所有字符串字面量都必须使用此令牌括起来(例如,
key:<|"|>string value<|"|>)。
思考模式
如需激活思考模式,请在系统指令中添加 <|think|> 控制令牌。
| 控制令牌 | 用途 |
|---|---|
<|think|> |
激活思考模式 |
<|channel> <channel|> |
表示模型的内部流程。 |
以下是一个对话示例:
<|turn>system
<|think|><turn|>
<|turn>user
What is the water formula?<turn|>
<|turn>model
<|channel>thought
...
<channel|>The most common interpretation of "the water formula" refers...<turn|>
思考模式旨在在对话级层启用。这应与您的其他系统指令(例如工具定义)一起整合为单个系统回合。
推理和函数调用示例
在代理式对话轮次中,模型可能会先私下“思考”,然后再决定调用函数。生命周期遵循以下顺序:
- 用户咨询:用户提出问题。
- 内部推理:模型在思维通道中私下思考。
- 工具请求:模型暂停生成,以请求调用工具。
- 执行和注入:应用执行工具并附加响应。
- 最终回答:模型读取回答并生成最终答案。
以下示例展示了使用天气工具的模型:
<|turn>system
<|think|>You are a helpful assistant.<|tool>declaration:get_current_temperature{...}<tool|><turn|>
<|turn>user
What's the temperature in London?<turn|>
<|turn>model
<|channel>thought
...
<channel|><|tool_call>call:get_current_temperature{location:<|"|>London<|"|>}<tool_call|><|tool_response>
您的应用应解析模型的响应以提取函数名称和实参,执行函数,然后将 tool_calls 和 tool_responses 附加到 assistant 角色下的聊天记录中。
<|turn>model
<|tool_call>call:get_current_weather{location:<|"|>London<|"|>}<tool_call|><|tool_response>response:get_current_weather{temperature:15,weather:<|"|>sunny<|"|>}<tool_response|>
最后,Gemma 读取工具响应并回复用户。
The temperature in London is 15 degrees and it is sunny.<turn|>
以下是此示例的完整 JSON 聊天记录:
[
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "What's the temperature in London?"
},
{
"role": "assistant",
"tool_calls": [
{
"function": {
"name": "get_current_weather",
"arguments": {
"location": "London"
}
}
}
],
"tool_responses": [
{
"name": "get_current_weather",
"response": {
"temperature": 15,
"weather": "sunny"
}
}
],
"content": "The temperature in London is 15 degrees and it is sunny."
}
]
管理回合之间的思考上下文
妥善管理模型生成的想法对于在多轮对话中保持性能至关重要。
- 标准多轮对话:您必须先从上一轮对话中移除(剥离)模型生成的思考内容,然后才能将对话历史记录传递回模型以进行下一轮对话。如果您想在对话中途停用思考模式,可以在去除之前的想法时移除
<|think|>令牌。 - 函数调用(例外情况):如果单个模型轮次涉及函数或工具调用,则不得移除函数调用之间的想法。
智能体工作流和长时间运行的任务
由于原始想法会在标准对话轮次之间被剥离,因此构建长时间运行的代理的开发者可能希望保留推理上下文,以防止模型进入循环推理循环。
- 总结思路:一种强烈推荐的推理技术是提取、总结模型之前的思路,然后将其作为标准文本重新输入到上下文窗口中。
- 格式限制:由于 Gemma 4 未经过明确训练,无法处理提示中包含的原始想法(上述特定工具调用场景除外),因此模型对这些注入的想法没有严格或特定的格式要求。您可以灵活地以最适合特定智能体架构的方式设置总结推理的格式。
集成说明
- 内部状态:
<|channel>和<channel|>令牌通常用于思维链 (CoT) 处理。在面向用户的标准应用中,此内容通常对最终用户隐藏。 - 工具循环:
tool_call和tool_response令牌有助于在模型与应用环境之间建立“握手”。应用会拦截tool_call,执行底层代码,并在tool_responsetoken 内将结果反馈给模型。 - 模型行为:即使明确关闭思考模式,较大型模型(例如 gemma-4-26B-A4B-it、gemma-4-31B-it)有时也可能会生成思考渠道。为了在这些极端情况下稳定模型行为,请考虑向提示添加空思考令牌。
提示:使用“无需思考”的数据集微调大型模型
如果使用不包含思考过程的数据集对较大的 Gemma 模型进行微调,您可以通过在训练提示中添加空通道来获得更好的结果:
<|turn>model
<|channel>thought
<channel|>
提示:使用系统指令实现自适应思维效率
虽然 Gemma 4 中的“思考”功能正式支持作为布尔值(开启或关闭)功能,但该模型具有出色的指令遵循能力,可让您动态调整其思考行为。
您可以使用系统指令 (SI) 来引导模型进入精简思考模式,而不是依赖于硬编码的框架参数来指定“高”或“低”思考。通过明确指示模型高效思考或以较低深度思考(我们称之为“低”思考指令),您可以实现自适应思考效率。
- 降低费用:测试表明,应用“低”思考系统指令可将生成的思考词元数量减少约 20%。
- 概念验证:由于此行为是模型可指导性的副产品,而不是专门训练的,因此没有“完美”的提示。“LOW”指令是概念验证。
- 自定义:我们强烈建议开发者尝试使用自己的自定义系统指令。您可以微调模型思考过程的深度、长度和风格,以便在延迟时间、成本和输出质量之间取得完美平衡,从而满足您的特定应用场景需求。