与 Gemma 对话:基本对话和多轮对话

Gemma 指令调优 (IT) 模型旨在处理对话互动,从简单的问答交流到多轮对话,都能轻松应对。本指南介绍了如何设置与 Gemma 对话的提示格式,以及如何构建多轮对话。

提示格式

Gemma IT 模型使用特殊的控制令牌来分隔对话轮次。直接向分词器发送提示时需要这些令牌,但聊天感知框架通常会自动应用这些令牌。

单轮提示

单轮提示包含一条用户消息和一个模型回答标记:

<start_of_turn>user
What is the speed of light?<end_of_turn>
<start_of_turn>model

多轮提示

多轮对话会链接多次交流。每个回合都包含在相同的控制令牌中:

<start_of_turn>user
What is the speed of light?<end_of_turn>
<start_of_turn>model
The speed of light in a vacuum is approximately 299,792,458 meters per second.<end_of_turn>
<start_of_turn>user
How long does it take light to reach Earth from the Sun?<end_of_turn>
<start_of_turn>model

模型会为最终的 <start_of_turn>model 回合生成回答。

系统指令

Gemma 的指令调优模型仅支持两种角色:usermodel。因此,不支持 system 角色或系统回合。

无需使用单独的系统角色,直接在初始用户提示中提供系统级指令。以下模型指令功能可让 Gemma 有效解读指令。例如:

Gemma 3 及更高版本的模型支持系统指令,这些指令可定义模型在整个对话中的行为、角色或限制。将系统指令放在第一个用户回合之前:

<start_of_turn>user
Only reply like a pirate.

What is the answer to life the universe and everything?<end_of_turn>
<start_of_turn>model
Arrr, 'tis 42,<end_of_turn>

如需了解详情,请参阅提示和系统指令

框架支持

大多数框架都会通过其聊天模板或对话 API 自动处理聊天格式:

Hugging Face Transformer

from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("google/gemma-3-1b-it")
model = AutoModelForCausalLM.from_pretrained("google/gemma-3-1b-it")

messages = [
    {"role": "user", "content": "What is machine learning?"},
]

inputs = tokenizer.apply_chat_template(
    messages,
    return_tensors="pt",
    add_generation_prompt=True,
)

outputs = model.generate(**inputs, max_new_tokens=256)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))

Ollama

ollama run gemma3:1b "What is machine learning?"

对于多轮对话,请使用互动模式:

ollama run gemma3:1b
>>> What is machine learning?
...
>>> How is it different from deep learning?

与 OpenAI 兼容的 API

使用公开了兼容 OpenAI 的 API(例如 vLLM、llama.cpp 或 LM Studio)的框架时,请使用标准 messages 格式传递消息:

from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="unused")

response = client.chat.completions.create(
    model="google/gemma-3-1b-it",
    messages=[
        {"role": "user", "content": "What is machine learning?"},
    ],
)
print(response.choices[0].message.content)

后续步骤