用 Qwen3.8–27B 打造智能体
阿里巴巴终于发布了全新的“通义千问”(Qwen)模型。这是一款新的密集多模态模型,能够处理文本、图像和视频。
梯形图转SCL | AI模型价格对比 | AI工具导航 | ONNX模型库 | Vibe Coding教程 | PLC在线仿真器 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo
阿里巴巴终于发布了全新的“通义千问”(Qwen)模型。这是一款新的密集多模态模型,能够处理文本、图像和视频。
阿里巴巴发布的最重要亮点包括:
- 核心能力: 在编码、专业工作、研究和长期智能体任务方面全面改进。
- 智能体执行: 更强的自主规划能力和更好的环境反馈处理,实现更可靠的端到端任务完成。
- 下游兼容性: 更广泛地支持流行的框架和开发工具,使其更容易集成到现有技术栈中。
- 灵活的思维控制: 思维模式默认开启,可按请求禁用;推理深度可通过 reasoning_effort 调整,历史消息中的推理上下文通过 preserve_thinking 保留。
- 视觉语言理解: 原生支持图像和视频理解,从STEM图表和文档到小时级视频。
从原始技术规格来看,它与Qwen 3.6–27B基本相同,与最近发布的Muse-Glimmer相比,它似乎没有根本性的架构变化,而是对现有架构的改进:
那么,Qwen 3.8–27B与Qwen 3.6–27B在规格上如何比较?鉴于该模型使用相同的架构,它实际上在许多领域提供了比前一代显著的改进。Qwen将改进描述为涵盖编码、专业工作、研究、自主规划和长期智能体。该模型拥有相同架构的好处是推理需求与前一版本保持相同。
Qwen 3.8–27B还增加了可配置的 reasoning_effort,支持低、中和极高三种模式,默认为极高。preserve_thinking 默认启用。Qwen特别警告说,如果较弱的推理导致重试,较低的推理实际上可能增加智能体完成任务的总时间。
"在多轮智能体任务中,较低的推理并不总是减少总体任务完成时间。虽然它可能产生更快的单轮响应,但也可能导致分析不足、更多失败和重复重试,从而增加总延迟和令牌消耗。"
指定的编码基准测试显示,与前一版本相比,在所有主要测试中都有显著改进:
这使其成为我们下一个本地编码智能体的理想选择,因此在本文的其余部分,我们将看到如何在本地环境中使用DGX Spark设置它。
我将向您展示如何设置SGLang和vLLM,目前SGLang似乎更快,但这种情况每天都在变化。
让我们首先使用SGLang运行它。我们将使用 docker pull lmsysorg/sglang:qwen38–27b 拉取最新容器,并使用 hf download RadixArk/Qwen3.8–27B-NVFP4 下载NVFP4模型,我们还将使用 hf download RadixArk/Qwen3.8–27B-DSpark 下载用于推测解码的草稿模型。
由于我们将使用Claude Code框架,它没有与Qwen3.8–27B相同的推理能力,我们需要修补原始聊天模板
mkdir -p ~/.config/qwen38
cp "$(find ~/.cache/huggingface/hub/models--RadixArk--Qwen3.8-27B-NVFP4 -name chat_template.jinja | head -1)" ~/.config/qwen38/chat-template-sglang.jinja
现在我们需要使用 nano ~/.config/qwen38/chat-template-sglang.jinja 编辑它
搜索 resolved_reasoning_effort 并修改它,使其如下所示:
Before:
{%- set resolved_reasoning_effort = reasoning_effort|default('xhigh') %}
{%- if resolved_reasoning_effort not in ('xhigh', 'medium', 'low') %}
{{- raise_exception('Unexpected reasoning effort ' ~ reasoning_effort ~ '. Supported types are xhigh (default), medium, and low.') }}
{%- endif %}
After:
{%- set resolved_reasoning_effort = reasoning_effort|default('xhigh') %}
{%- if resolved_reasoning_effort in ('max', 'high') %}
{%- set resolved_reasoning_effort = 'xhigh' %}
{%- endif %}
{%- if resolved_reasoning_effort not in ('xhigh', 'medium', 'low') %}
{{- raise_exception('Unexpected reasoning effort ' + resolved_reasoning_effort + '. Supported types are xhigh (default), medium, and low.') }}
{%- endif %}
这基本上将不支持的推理最大和高设置为极高
我们需要添加另一个补丁(由用户hasso5703描述)相关于Claude可以在对话中间注入系统消息,但它期望在开头。因此更改它使其匹配以下示例:
Before:
{%- if not loop.first %}
{{- raise_exception('System message must be at the beginning.') }}
{%- endif %}
After:
{%- if not loop.first %}
{{- '<|im_start|>user\n<system-reminder>\n' + content + '\n</system-reminder><|im_end|>' + '\n' }}
{%- endif %}
让我们创建执行文件 nano run-qwen.sh 并粘贴以下内容:
#!/bin/bash
docker run --gpus all \
--shm-size 32g \
--rm \
-p 8000:8000 \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-v ~/.config/qwen38:/config \
--ipc=host \
lmsysorg/sglang:qwen38-27b \
sglang serve \
--trust-remote-code \
--model-path RadixArk/Qwen3.8-27B-NVFP4 \
--mem-fraction-static 0.5 \
--attention-backend flashinfer \
--chunked-prefill-size 8192 \
--disable-prefill-cuda-graph \
--reasoning-parser qwen3 \
--tool-call-parser qwen3_coder \
--speculative-algorithm DSPARK \
--speculative-draft-model-path RadixArk/Qwen3.8-27B-DSpark \
--chat-template /config/chat-template-sglang.jinja \
--served-model-name local-spark-model \
--mamba-full-memory-ratio 8.26 \
--max-running-requests 8 \
--language-only \
--host 0.0.0.0 \
--port 8000
注意我将服务模型名称更改为local-spark-model,因为我不想每次更改模型时都要更改下游配置。让我们使用 ./run-qwen.sh 运行模型

这将给我们提供大约20-30个tg/s,偶尔会达到40左右。

对于vLLM,我采用vLLM指南中提到的不同模型,因为那是经过测试并应该是最优的。
首先让我们使用hf CLI获取NVFP4版本的模型。
hf download Inferact/Qwen3.8-27B-NVFP4
运行模型最干净的方式是在docker容器中,因此我们接下来将拉取最新的vllm构建:
docker pull vllm/vllm-openai:v0.27.1
让我们创建一个新的bash文件来包含我们的执行配置 nano qwen-3.8.sh 并粘贴以下内容:
#!/bin/bash
docker run --gpus all \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-v ~/.config/qwen38:/config \
--env "HF_TOKEN=$HF_TOKEN" \
-p 8000:8000 \
--ipc=host \
vllm/vllm-openai:v0.27.1 \
--model Inferact/Qwen3.8-27B-NVFP4 \
--tensor-parallel-size 1 \
--enable-auto-tool-choice \
--gpu-memory-utilization 0.8 \
--max-model-len 262144 \
--max-num-batched-tokens 8192 \
--max-num-seqs 8 \
--attention-backend flash_attn \
--chat-template /config/chat-template-sglang.jinja \
--tool-call-parser qwen3_coder \
--reasoning-parser qwen3 \
--load-format fastsafetensors \
--enable-prefix-caching \
--enable-chunked-prefill \
--served-model-name 'local-spark-model' \
--speculative-config '{"method":"mtp","num_speculative_tokens":3}' \
--language-model-only
我故意使用 --language-model-only 禁用视觉模型,因为编码任务不需要它,但如果您需要,只需从配置中删除此行。我还将服务模型名称重命名为local-spark-model,因为我不想每次更改服务模型时都要更改下游模型名称。另外,在运行之前您需要修补提示,请参考上方的SGLang设置。
这将给我们大约20个tg/s,比SGLang少得多,但这为您提供了就绪的基础设施,随时准备好更换推理容器/模型。
如果您尚未安装Claude Code,可以使用以下命令安装:
curl -fsSL https://claude.ai/install.sh | bash
为了让它识别我们的新模型,我们只需设置几个环境变量:
export ANTHROPIC_BASE_URL=http://spark:8000
export ANTHROPIC_AUTH_TOKEN=dummy
export ANTHROPIC_MODEL=local-spark-model
ANTHROPIC_BASE_URL 应指向您的spark的IP或主机名。 一旦我们运行laude,我们可以使用/model查看模型是否可见

让我们确保它正常工作:

最后,作为测试,我让模型为我创建了一个基于浏览器的外星人侵略游戏

今天就到这里,祝您使用新的Qwen模型探索愉快!
原文链接:Qwen3.8–27B as new coding agent of choice with SGLang/vLLM and Claude
汇智网翻译整理,请转载文章时标明出处