用 Qwen3.8–27B 打造智能体

阿里巴巴终于发布了全新的“通义千问”(Qwen)模型。这是一款新的密集多模态模型,能够处理文本、图像和视频。

用 Qwen3.8–27B 打造智能体
梯形图转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 运行模型

None

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

None

对于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查看模型是否可见

None

让我们确保它正常工作:

None

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

None

今天就到这里,祝您使用新的Qwen模型探索愉快!


原文链接:Qwen3.8–27B as new coding agent of choice with SGLang/vLLM and Claude

汇智网翻译整理,请转载文章时标明出处