Ollama部署Qwen3.5-27B本地模型平替收费API养openClaw
搬砖工程局总工
编辑于 2026年03月17日 23:17

想要畅玩#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相关参数指定。

这样就大功告成,用本地模型养#龙虾#​也可以了。如果你有块#3090#​/#4090#​那估计能玩得挺High。