qwen【二、ChatML用法】

Qwen3.5 系列模型基于 ChatML 格式进行对话,并通过特定的控制 token 来精确控制生成流程。在 Ollama 中集成 Qwen3.5 时,需要创建一个 Modelfile 配置文件,其中的 TEMPLATE 字段就是实现 ChatML 格式的关键。

📜 ChatML 格式核心解析

ChatML 格式的核心是使用 <|im_start|><|im_end|> 这两个控制 token 来清晰地界定每一轮对话的角色和内容。

  • <|im_start|>: 标记一轮对话的开始,后面紧跟角色名。
  • <|im_end|>: 标记一轮对话的结束。
  • <|endoftext|>: 通常用于表示整个对话序列的结束。

Qwen3.5 在此基础上,还引入了用于工具调用和深度思考的特殊标签:

  • ``: 用于包裹工具调用的 JSON 信息。
  • ``: 用于包裹模型的内部推理过程,实现“思考模式”。

📝 Ollama Modelfile 标准模板

以下是一个为 Ollama 定制的、支持 Qwen3.5 完整特性的 Modelfile 模板。它包含了对话、工具调用和思考模式的完整逻辑。

你可以将以下内容保存为一个名为 Modelfile 的文件(无后缀名),然后使用 ollama create <模型名> -f ./Modelfile 命令来创建你自己的 Qwen3.5 模型。

FROM ./your_qwen3.5_model.gguf

# 设置上下文窗口大小,根据你的内存大小调整
# 例如 16GB 内存可设为 8192 或 16384
PARAMETER num_ctx 16384

# 设置生成参数
PARAMETER temperature 0.7
PARAMETER top_p 0.95
PARAMETER repeat_penalty 1.1

# 定义系统提示词
SYSTEM """你是一个名为 Qwen3.5 的 AI 助手,由阿里巴巴开发。你擅长逻辑推理、代码编写和多轮对话。"""

# Qwen3.5 专用的 ChatML 模板
TEMPLATE """
{{- $lastUserIdx := -1 }}
{{- range $idx, $msg := .Messages }}
{{- if eq $msg.Role "user" }}{{ $lastUserIdx = $idx }}{{ end }}
{{- end }}

{{- 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  XML tags:
For each function call, return a json object with function name and arguments within  XML tags:
{{- end }}
<|im_end|>
{{ end }}

{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1 }}
{{- if eq .Role "user" }}<|im_start|>user
{{ .Content }}
{{- if and $.IsThinkSet (eq $i $lastUserIdx) }}
{{- if $.Think }}
{{ " " }}/think
{{- else }}
{{ " " }}/no_think
{{- end }}
{{- end }}<|im_end|>
{{ else if eq .Role "assistant" }}<|im_start|>assistant
{{ if (and $.IsThinkSet (and .Thinking (or $last (gt $i $lastUserIdx)))) }}
<think>{{ .Thinking }}</think>
{{ end }}
{{ if .Content }}{{ .Content }}
{{- else if .ToolCalls }}{{- 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
{{ if and $.IsThinkSet (not $.Think) }}
<think>
</think>
{{ end }}
{{ end }}
{{- end }}
"""

✨ 模板关键字段说明

  1. FROM: 指定你本地 GGUF 格式的 Qwen3.5 模型文件的绝对路径。
  2. PARAMETER: 设置模型的推理参数,如 temperature(创造性)、top_p(核采样)和 repeat_penalty(重复惩罚)。
  3. SYSTEM: 定义模型的全局行为和身份。
  4. TEMPLATE: 这是最核心的部分,它使用 Go 模板语法,将 Ollama 的消息结构动态地转换为 Qwen3.5 能够理解的 ChatML 格式。
    • 角色处理: 自动识别 userassistantsystemtool 角色,并包裹上正确的 <|im_start|><|im_end|> 标签。
    • 工具调用: 当提供工具列表时,会自动在 system 消息中插入工具的 JSON 定义和使用说明。当模型输出工具调用时,会将其包裹在 `` 标签内。
    • 思考模式: 模板中包含了对 $.Think$.Thinking 变量的判断,能够正确处理 <think> 标签,实现思考内容与最终回答的分离。

🚀 如何使用

  1. 准备模型: 从魔搭社区(ModelScope)等平台下载 Qwen3.5 的 GGUF 格式模型文件。
  2. 创建文件: 将上面的模板内容保存为 Modelfile,并修改 FROM 后面的路径为你模型文件的实际路径。
  3. 创建模型: 在终端中,切换到 Modelfile 所在目录,执行命令:
    ollama create qwen3.5-custom -f ./Modelfile
    
  4. 运行模型: 创建成功后,即可运行你的定制模型:
    ollama run qwen3.5-custom
    
posted @ 2026-04-06 12:52  蓝迷梦  阅读(52)  评论(0)    收藏  举报