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 }}
"""
✨ 模板关键字段说明
FROM: 指定你本地 GGUF 格式的 Qwen3.5 模型文件的绝对路径。PARAMETER: 设置模型的推理参数,如temperature(创造性)、top_p(核采样)和repeat_penalty(重复惩罚)。SYSTEM: 定义模型的全局行为和身份。TEMPLATE: 这是最核心的部分,它使用 Go 模板语法,将 Ollama 的消息结构动态地转换为 Qwen3.5 能够理解的 ChatML 格式。- 角色处理: 自动识别
user、assistant、system和tool角色,并包裹上正确的<|im_start|>和<|im_end|>标签。 - 工具调用: 当提供工具列表时,会自动在
system消息中插入工具的 JSON 定义和使用说明。当模型输出工具调用时,会将其包裹在 `` 标签内。 - 思考模式: 模板中包含了对
$.Think和$.Thinking变量的判断,能够正确处理<think>标签,实现思考内容与最终回答的分离。
- 角色处理: 自动识别
🚀 如何使用
- 准备模型: 从魔搭社区(ModelScope)等平台下载 Qwen3.5 的 GGUF 格式模型文件。
- 创建文件: 将上面的模板内容保存为
Modelfile,并修改FROM后面的路径为你模型文件的实际路径。 - 创建模型: 在终端中,切换到
Modelfile所在目录,执行命令:ollama create qwen3.5-custom -f ./Modelfile - 运行模型: 创建成功后,即可运行你的定制模型:
ollama run qwen3.5-custom
本文来自博客园,作者:蓝迷梦,转载请注明原文链接:https://www.cnblogs.com/hewei-blogs/articles/19825973

浙公网安备 33010602011771号