想要畅玩#OpenClaw#\#OpenCode#\#ClaudeCode#\#Codex#\。。, 压力最大的竟是我的钱包,那Token烧的 真实贼快,各个 #大模型运营商#的 #API# 收费 还是比较高的,至少比我每个月的话费还要高不少。
怎么办呢?现在有办法了,感谢大佬搞了一个 基于#qwen3.5#的蒸馏模型:
Qwen3.5-27B-Claude-4.6-Opus-Reasoning-Distilled
这个用 思维能力最强#Claude_Opus_4.6# 蒸馏过的,具备结构化的思维模式,也具备调用工具的能力。#Ollama#官网也上线了4位量化版本(当然也可以去#modelscope#下载):
kwangsuklee/Qwen3.5-27B-Claude-4.6-Opus-Reasoning-Distilled-GGUF
27B就有很不错的表现了,显存占用才17G,如果你有一块3090/4090那就可以用它来飞快的养#openClaw#/#claude#/#opencode#/#codex#等等。
我的电脑只有 12G显存,也是可以玩一玩的,
先用#ollama# 拉取:Ollama pull kwangsuklee/Qwen3.5-27B-Claude-4.6-Opus-Reasoning-Distilled-GGUF:latest
然后 编写一个 #modelfile#文件,基于这个 Qwen3.5-27B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 创建一个只在GPU加载30层权重的副本。
==========.modelfile============
# 这是通过 ollama show --modelfile 命令导出的原始模板
# 如果要基于这个模型创建新模型,请把 FROM 后面的模型名称改成你想要的基础模型
# 指定基础模型(这里使用的是已经经过特殊蒸馏/优化的 gguf 量化版本)
FROM kwangsuklee/Qwen3.5-27B-Claude-4.6-Opus-Reasoning-Distilled-GGUF:latest
# ──────────────
# 硬件与推理参数部分
#──────────────
# num_gpu 30 → 把 30 层模型权重装进显存(GPU offloading)
# 常见的设置范围:
# 0 = 全 CPU(最慢)
# 99999 = 尽可能多层卸载到 GPU(几乎全 GPU)
# 具体数字 = 固定卸载多少层到 GPU
PARAMETER num_gpu 30
# 设置上下文长度为 262144 个 token(约 256k)
# Qwen 系列普遍支持很长的上下文,这个值可以开到 128k~256k 甚至更高
# 注意:实际能用多少受显存大小限制,显存不足会自动截断或失败
PARAMETER num_ctx 262144
# ─────────────────
# 对话模板(TEMPLATE)部分
# ─────────────────
# 这个 TEMPLATE 是目前最流行的 Qwen-2.5 / Qwen-3 的工具调用 + 思考标签兼容格式之一
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 <tools></tools> XML tags:
<tools>
{{- range .Tools }}
{"type": "function", "function": {{ .Function }}}
{{- end }}
</tools>
# 模型被要求用这种 XML 格式返回工具调用
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 }}
# ─── 特别的 /think 控制(用于前端控制是否显示思考过程)
{{- 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 }}<tool_call>
{{ range .ToolCalls }}{"name": "{{ .Function.Name }}", "arguments": {{ .Function.Arguments }}}
{{ end }}</tool_call>
{{- end }}
# 除了最后一条助手消息,其他助手消息后面都要加 <|im_end|>
{{ if not $last }}<|im_end|>
{{ end }}
# 工具返回结果(tool role)
{{- else if eq .Role "tool" }}<|im_start|>user
<tool_response>
{{ .Content }}
</tool_response><|im_end|>
{{ end }}
# 如果是最后一条非 assistant 消息,自动补一个 assistant 开头
{{- if and (ne .Role "assistant") $last }}<|im_start|>assistant
{{ if and $.IsThinkSet (not $.Think) -}}
<think>
</think>
{{ end -}}
{{ end }}
{{- end }}"""
# ─────────────────
# 采样参数部分
# ─────────────────
# 重复惩罚(1.0 = 不惩罚,>1.0 开始惩罚重复)
PARAMETER repeat_penalty 1
# 遇到这两个 token 就停止生成(标准 Qwen 结束标记)
PARAMETER stop <|im_start|>
PARAMETER stop <|im_end|>
# 采样参数组合(比较保守、逻辑性较强的设置)
PARAMETER temperature 0.6 # 温度偏低 → 更确定性、更少胡说
PARAMETER top_k 20 # 只从概率前20个 token 中采样
PARAMETER top_p 0.95 # 累积概率达到95%就截断
PARAMETER presence_penalty 1 # 对已经出现过的 token 施加惩罚(鼓励多样性)
============modelfile结束==========
上面的 内容中关于 “工具调用”和“256k超长上下文”的参数非常重要,否则创建的副本将不具备工具调用能力或者动不动挤爆上下文空间,那就废了。
复制上面的内容到文本文件,另存为 qw35-27B-gpu30.modelfile
然后用ollama 命令:
ollama create qw35-27B-gpu30 -f D:\qw35-27B-gpu30.modelfile
看到success就成功了
然后 ollama list:

图中第一个就是 创建的副本。
然后再 #opencode#的配置文件增加一点配置指向Ollama本地模型;

上图中 圈出来的 就是 #opencode.json#新加的配置:
然后打开opencode,输入 /models, 搜索栏输入 ollama local 很快就定位到刚创建的副本模型。

简单测试一个问题:列出已经安装的 #skill#:


可以看到模型确实具备调用工具的能力,不具备工具调用能力的话会提示错误:“#registry.ollama.ai#/library/xxxxxxxxx does not support tools”,意思是模型(xxxxxxxxxxx)不支持工具调用,无法在 openclaw/opencode/claude上使用,其实就是 .modelfile里面缺少了 tools相关参数指定。