Qwen 3.8 27B 表现优异,但默认推理强度过高导致过度思考
- `xhigh`(默认):适用于需要深度分析的复杂任务
- `medium`:平衡准确性与速度
- `low`:优化速度和成本的高效推理
这是目前我在本地机器上运行模型能生成的最好的鸬鹚 SVG——而且这个 Qwen 模型其实很小,磁盘上只有 17GB。这个结果有很多值得称赞的地方:
- 自行车车架形状正确
- 车子两侧都有腿——这 **非常** 难得
- 鸬鹚的喉囊清晰可见
- 翅膀延伸到了车把上!
- 运动线在后面,而不是前面
- 背景设计得体——有漂亮的太阳、云朵、小山、花朵和草地。
为了完整性,我通过 OpenRouter 使用了更大的 Qwen 3.8 2.4T-A95B([上周发布](https://huggingface.co/Qwen/Qwen3.8-2.4T-A95B))运行了同一提示词,得到了这个很酷的[动画 SVG](https://tools.simonwillison.net/markdown-svg-renderer#url=https%3A%2F%2Fgist.github.com%2Fsimonw%2F557016f0895b2abb4b9957caec781734):
Your browser does not support HTML5 video.
我说过 Qwen 在 xhigh 模式下容易想太多,但到底有多严重呢? 我换了个更简单的提示词,依然使用默认的超高推理设置: ``` draw an svg of a circle ``` Qwen 的推理过程开头是这样的: 用户要求画一个圆形的 SVG。请求很简单——但我想把它做得精雕细琢。不能只给个 `它在边界框方面表现极佳
测试视觉模型的一个有趣方法是看它如何返回照片中物体的边界框。我之前用过几代 Qwen 模型,效果都不错,所以决定拿它来测试一下,给几只鹈鹕画上边界框。
我之前发现要求 0-1000 的比例尺能出好结果。我尝试了:
llm -a https://static.inaturalist.org/photos/714731804/large.jpg \ -m lmstudio/qwen/qwen3.8-27b \ 'Return JSON bounding boxes for the pelicans in this photo, 0-1000 scale for each dimension'这是推理过程,它输出了如下结果: ``` [ {"bbox_2d": [195, 290, 370, 780], "label": "pelicans"}, {"bbox_2d": [445, 320, 675, 850], "label": "pelicans"} ] ``` 这匹配得太好了。这是在照片上渲染的框:
构建标注框的工具
这些框的可视化效果是使用一个新工具实现的,我让 Qwen 3.8 27B 为我构建了这个工具,并在我的笔记本电脑上离线运行。
我忘了降低思考强度,导致它过度设计了,但它确实通过这个单一提示词成功生成了这个完整界面:
[ {"bbox_2d": [195, 290, 370, 780], "label": "pelicans"}, {"bbox_2d": [445, 320, 675, 850], "label": "pelicans"} ]
构建一个 HTML 页面,包含一个输入框用于接收图片 URL,以及一个文本区域用于接收上述格式的 JSON。
它将图片添加到页面,测量其宽高,然后将 bbox_2d 中的坐标视为从 0-1000 缩放,并根据实际宽高进行缩放,最后在图片上渲染带标签的框。
这张截图展示了一个我没有要求的功能——演示场景,以防你没有照片来测试该工具:

这是思考轨迹的相关片段,它决定自己画鹈鹕,仅仅是因为我在提示词的示例 JSON 中使用了“pelicans”这个标签:
(我有点担心,因为全球的模型可能都有一种倾向,就是一有机会就画鹈鹕,这大概是我自己那个愚蠢的基准测试让它们暴露了将近两年的结果。) 这种过度思考有必要吗?也许有一点。我尝试关闭推理功能,得到了这个版本([查看转录内容](https://gist.github.com/simonw/8e78b1c64d9a56d08eedb954aa9445ee)),它几乎能用,但框的位置不对:还有一个“加载示例”功能,使用已知图片?不能依赖外部图片,但……图片 URL 输入是用户提供的;我可以加一个“试用示例”按钮 [...] 嗯,我可以在 canvas 上画一个简单场景,导出为 data URL,然后加载到图片里 —— 这样既独立又可演示! [...] 但用户的坐标是针对真实鹈鹕图片的;生成的占位图仍然可以演示缩放效果。生成一个 1000x1000 的占位图:渐变水面 + 两个类似“鹈鹕”的形状,放置在给定的 bbox 位置(使用相同的缩放比例——可爱的是:形状正好在 0-1000 的位置,显示框是对齐的)。这构成了一个有趣、独立的演示。保持简单:天空渐变、太阳、水面、两个鹈鹕形状(椭圆身体、圆形头部、喙)。放置在 bbox 中心。
所以,没有推理功能它就没法一次性生成一个能用的工具。我确信通过后续提示词它能做到,但这很好地说明了推理功能能带来多大的差别。
是的,它能驱动编码代理
关于本地模型的一个最大疑问是,它们是否有足够的算力来成功运行编码代理循环。编码代理需要长上下文、强大的代码生成支持和可靠的工具调用。从纸面参数看,Qwen 3.8 27B 拥有这三项能力,那它能否胜任呢?
我在 Pi 上的初步实验非常有前景。我选择 Pi 是因为它比大多数其他选项的系统提示词更短,更适合用来测试较小的模型。
我通过在 ~/.pi/agent/models.json 中添加以下内容,将 Pi 配置为使用在 Spark 上通过 tailscale serve 共享的 LM Studio 里的 Qwen 3.8 27B:
{
"providers": {
"spark": {
"baseUrl": "https://spark-18b3.tail68a31.ts.net/v1",
"api": "openai-responses",
"apiKey": "dummy",
"models": [
{
"id": "qwen3.8-27b",
"reasoning": true
}
]
}
}
}
然后在 ~/dev/datasette 目录下运行 pi --provider spark --model qwen3.8-27b 并输入提示:
在经历了一系列推理和工具调用,访问了多个不同文件后,它输出了这个回复([查看详情](https://gist.github.com/simonw/6693d74a6bd45f641d43ceb9961dd95f#core-idea-actors--plugins-no-built-in-user-accounts)),内容非常扎实。 只有一个问题:我想分享这段转录内容。于是我把 Pi 和 Qwen 3.8 27B 指向了 `~/.pi/agent/sessions/--Users-simon-Dropbox-dev-datasette--` 里的 JSONL 转录文件,并提示: ```python Write Python code to convert this jsonl to markdown ``` 它构建并测试了 pi_jsonl_to_md.py,功能完全符合我的需求。这是 该会话的转录记录,正是用它创建的工具发布的。
how does auth work?
追求速度
目前为止,这一切看起来非常有前景。我们有一个 17GB 的模型,运行在高端消费级硬件上,能写代码、驱动工具、标注图片,基本上能胜任我使用 LLM 处理实际工作所需的一切。 但有一个非常显著的缺点:它感觉很慢——尤其是开始过度思考的时候,即便没有这种情况,它的反应也不算敏捷。 我从 LM Studio 获得的输出速度大约是每秒 15-30 个 token。这不算太差,但慢到很难让我放弃托管 API 模型,后者返回结果快得多。Artificial Analysis 追踪了 token 速度,显示 OpenAI 5.6 Sol 为 74 tokens/秒,5.6 Luna 则令人印象深刻地达到了 184/秒。 好消息是,自从两天前模型发布以来,社区一直在探索加速的方法。 最令人期待的优化之一已经内置在模型本身。Qwen 支持 Multi-Token Prediction(多 token 预测),这是一种架构技巧,利用更廉价的机制提前猜测多个 token,主模型随后快速验证猜测是否正确。这对推理性能有相当显著的影响。 基于 llama.cpp 创始人 Georgi Gerganov 的这条推文,我在 Spark 上尝试用 MTP 运行该模型:llama serve \ -hf ggml-org/Qwen3.8-27B-GGUF:Q4_K_M \ -hfd ggml-org/Qwen3.8-27B-GGUF:Q4_0 \ --spec-default \ --spec-type draft-mtp \ --reasoning-preserve果然,这给了我显著的提升。我让 GPT-5.6 Codex 在 Spark 和带 `--spec-type draft-mtp` 参数的服务器上运行了基准测试,结果显示前者比 LM Studio 默认的 GGUF 性能高出约 72%。 我预计未来几周,围绕如何更快地部署该模型,会有大量创新涌现。MLX 社区可能也酝酿着一些技巧。