发生了什么

一位在本地运行 Gemma 4 27B 的 LocalLLaMA 社区成员发现,在控制模型思考令牌行为方面存在实际缺口。与能可靠响应系统级指令以启用或禁用链式思维推理的 Qwen-30B-A3B 不同,Gemma 4 的 27B 变体在接收到等效的系统提示词指令时表现不一致。

用户发现了一种部分变通方法:在实际提示词内容之前,直接向用户消息中注入 <thought off>。这在实践中能抑制推理令牌,但破坏了干净的 API 集成——任何调用该模型的客户端或应用程序都必须在每个请求前添加此标签,使其在生产环境或多轮聊天 API 中变得不切实际。

核心问题在于,Gemma 4 的思考行为似乎部分由聊天模板和分词器级别的特殊令牌驱动,而非纯粹由自然语言系统提示词指令驱动。这使得在应用层控制它比那些仅通过显式提示词指令即可切换思考功能的模型更加困难。

技术深度解析

Gemma 4 的思考模式,类似于 Qwen3 和 DeepSeek-R1 中的类似实现,使用特殊分隔令牌来包裹内部推理。在 Gemma 4 中,相关令牌是 <thought>,它标志着推理块的开始。该模型经过训练,可根据上下文条件生成这些块,但其触发机制并非纯粹基于指令遵循。

Qwen-30B-A3B(以及通用的 Qwen3)明确支持 /no_think 系统提示词标志,并在聊天模板层面进行处理。模板本身会根据此标志条件性地包含或剥离思考分隔符。例如,在 Qwen3 的分词器配置中:

<|im_start|>system /no_think {system_message}<|im_end|>

Gemma 4 似乎在其聊天模板中没有文档化的等效一级机制。该模型的思考行为是训练涌现的结果,意味着模型是根据输入复杂性信号而非显式开关来学习何时进行思考的。

社区正在探索的潜在方法包括:

  • 修改分词器配置中的 Jinja2 聊天模板,根据自定义生成参数条件性地注入 <thought off>
  • 使用类似 Do not use internal reasoning. Respond directly without thinking steps. 的系统提示词——但这效果不一致
  • 设置 max_new_tokens 约束或采样参数以抑制长推理前缀,尽管这会影响输出质量
  • 修补模型的 tokenizer_config.json 聊天模板,在传递自定义标志时向用户回合前添加 <thought off>

聊天模板方法最为稳健。在 llama.cpp 和 Ollama 中,自定义 Modelfile 或 GGUF 元数据可以覆盖默认模板。在 vLLM 或 Hugging Face Transformers 中,您可以直接将修改后的 chat_template 字符串传递给 tokenizer.apply_chat_template()

与替代方案的比较

Qwen3-30B-A3B 在模板层面干净地处理了这一问题。DeepSeek-R1 使用 <think> 标签,并且可以通过在助手回合预填充非思考令牌来部分控制。Gemma 4 目前在系统级切换方面缺乏与这两种方法相当的文档化支持。

谁应该关注

这主要关系到在本地托管的 Gemma 4 模型之上构建应用程序的开发者,其中推理令牌的生成具有真实的成本影响——无论是延迟还是令牌预算。如果您通过 Ollama、llama.cpp 或 vLLM 运行 Gemma 4 27B 以执行分类、短问答或结构化数据提取等任务,不必要的思考令牌每次请求都会增加 200-800 个令牌的开销,却无任何收益。

使用 OpenAI 兼容 API 包装器(LiteLLM、LocalAI、Ollama 的 REST API)的团队受影响最大,因为他们无法在没有中间件的情况下轻松注入每条消息的模板修改。针对特定任务微调 Gemma 4 的机器学习工程师可能希望在微调阶段解决此问题,通过控制训练数据中是否出现思考令牌。

本周行动指南

如果您今天需要在 Gemma 4 27B 中抑制思考令牌,请尝试直接修改聊天模板。首先,提取当前模板:

from transformers import AutoTokenizer tok = AutoTokenizer.from_pretrained("google/gemma-4-27b-it") print(tok.chat_template)

然后找到插入用户内容的位置,并条件性地添加 <thought off>。对于 Ollama 用户,请编辑您的 Modelfile:

TEMPLATE """{{ if .System }}<start_of_turn>user <thought off> {{ .System }}<end_of_turn> {{ end }}..."""

使用 /api/chat 端点进行测试,并验证响应中不存在推理令牌。请在 Gemma 社区论坛或 google/gemma-4-27b-it Hugging Face 仓库中跟踪上游问题,以获取官方的切换机制。