[TOC]
截止本文撰写时间,2025/05/06。市面上常见的会使用深度思考的模型如:Deepseek-R1、Qwen3、QwQ。
他们均会在回复时先输出<think></think>标签,其内容为“深度思考”过程。
但在实际使用过程中,我们会有很多需求是不需要LLM进行深度思考,直接输出即可的。
因此,我们需要一种办法来绕过LLM思考。
本文撰写前,新推出的Qwen3系列模型,标称可选是否进行深度思考。但Ollama并未支持该选项。
已知带有深度思考的LLM会先输出<think>标签。
我们可以通过在Modelfile中直接插入<think>标签内容,使LLM后续输出内容时不再输出深度思考内容。
1· 在Ollama平台或Hugging Face平台中,选定后续使用的模型,并找到其原始模板 'template' 文件。
下例为qwen3:30b-a3b的Ollama原始template(摘取时间2025/5/6 15:05. eb4402837c78 · 1.5kB)。
{{- if .Messages }}
{{- if or .System .Tools }}<|im_start|>system
{{- if .System }}
{{ .System }}
{{- end }}
{{- if .Tools }}
# Tools
You may call one or more functions to assist with the user query.
You are provided with function signatures within <tools></tools> XML tags:
<tools>
{{- range .Tools }}
{"type": "function", "function": {{ .Function }}}
{{- end }}
</tools>
For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:
<tool_call>
{"name": <function-name>, "arguments": <args-json-object>}
</tool_call>
{{- end }}<|im_end|>
{{ end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1 -}}
{{- if eq .Role "user" }}<|im_start|>user
{{ .Content }}<|im_end|>
{{ else if eq .Role "assistant" }}<|im_start|>assistant
{{ if .Content }}{{ .Content }}
{{- else if .ToolCalls }}<tool_call>
{{ range .ToolCalls }}{"name": "{{ .Function.Name }}", "arguments": {{ .Function.Arguments }}}
{{ end }}</tool_call>
{{- end }}{{ if not $last }}<|im_end|>
{{ end }}
{{- else if eq .Role "tool" }}<|im_start|>user
<tool_response>
{{ .Content }}
</tool_response><|im_end|>
{{ end }}
{{- if and (ne .Role "assistant") $last }}<|im_start|>assistant
{{ end }}
{{- end }}
{{- else }}
{{- if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
{{ end }}{{ .Response }}{{ if .Response }}<|im_end|>{{ end }}
2· 加工Modelfile文件。
FROM qwen3:30b-a3b
TEMPLATE """{模板内容}"""
包裹模板文件下例为对上述例文的改写案例:
FROM qwen3:30b-a3b
TEMPLATE """
{{- if .Messages }}
{{- if or .System .Tools }}<|im_start|>system
{{- if .System }}
{{ .System }}
{{- end }}
{{- if .Tools }}
# Tools
You may call one or more functions to assist with the user query.
You are provided with function signatures within <tools></tools> XML tags:
<tools>
{{- range .Tools }}
{"type": "function", "function": {{ .Function }}}
{{- end }}
</tools>
For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:
<tool_call>
{"name": <function-name>, "arguments": <args-json-object>}
</tool_call>
{{- end }}<|im_end|>
{{ end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1 -}}
{{- if eq .Role "user" }}<|im_start|>user
{{ .Content }}<|im_end|>
{{ else if eq .Role "assistant" }}<|im_start|>assistant
{{ if .Content }}{{ .Content }}
{{- else if .ToolCalls }}<tool_call>
{{ range .ToolCalls }}{"name": "{{ .Function.Name }}", "arguments": {{ .Function.Arguments }}}
{{ end }}</tool_call>
{{- end }}{{ if not $last }}<|im_end|>
{{ end }}
{{- else if eq .Role "tool" }}<|im_start|>user
<tool_response>
{{ .Content }}
</tool_response><|im_end|>
{{ end }}
{{- if and (ne .Role "assistant") $last }}<|im_start|>assistant
{{ end }}
{{- end }}
{{- else }}
{{- if .System }}<|im_start|>system
{{ .System }}<|im_end|>
{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>
{{ end }}<|im_start|>assistant
{{ end }}{{ .Response }}{{ if .Response }}<|im_end|>{{ end }}
<think>好的,我会直接输出内容,回答用户的问题,不需要进行深度思考。</think>
"""
3· 创建并写入Modelfile文件
文件名可任起
sudo nano nothinkModelfile
4· 使用该Modelfile创建新LLM模型
模型名可任起, -f
参数内容为Modelfile文件名
ollama create qwen3-nothink:30b-a3b -f nothinkModelfile
创建完毕。
5· 测试
ollama run qwen3-nothink:30b-a3b