Ollama 绕过LLM深度思考 - qNFCpの屋
qNFCpの屋

Ollama 绕过LLM深度思考

目录

[TOC]

背景

截止本文撰写时间,2025/05/06。市面上常见的会使用深度思考的模型如:Deepseek-R1、Qwen3、QwQ。
他们均会在回复时先输出<think></think>标签,其内容为“深度思考”过程。
但在实际使用过程中,我们会有很多需求是不需要LLM进行深度思考,直接输出即可的。
因此,我们需要一种办法来绕过LLM思考。

本文撰写前,新推出的Qwen3系列模型,标称可选是否进行深度思考。但Ollama并未支持该选项。

方法概述

已知带有深度思考的LLM会先输出<think>标签。
我们可以通过在Modelfile中直接插入<think>标签内容,使LLM后续输出内容时不再输出深度思考内容。

风险及注意

  1. Ollama平台与Hugging Face平台中的Modelfile是不一致的。
  2. 虽然绕过了深度思考标签,但LLM依旧是有小概率会重复输出<think>标签
  3. 此方式在生产环境的效果尚不知晓。需注意考量风险。

操作步骤

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 """{模板内容}""" 包裹模板文件
  • 在末尾加入<think>标签内容

下例为对上述例文的改写案例:

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

参考

让QwQ思考模型-不思考的小技巧 - AI匠

暂无评论

添加新评论

Title - Artist
0:00