<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Qwen3.8 27b工具调用出错？一个参数解决]]></title><description><![CDATA[<h2>一、现象</h2>
<p dir="auto">vLLM 起 Qwen3.8-27B（FP8）给 Agent 做工具调用（我这里是 Hermes）。模型明明在输出工具调用，API 侧却解析不出来，日志里反复刷：</p>
<pre><code>WARNING [qwen3xml_tool_parser.py:305] Error when parsing XML elements:
not well-formed (invalid token): line 6, column 1
</code></pre>
<p dir="auto">一周里积了 94 条。每次工具调用作废，模型重试一次，整体体感又慢又不稳。</p>
<h2>二、先排除一个常见嫌疑</h2>
<p dir="auto">第一反应：是不是我下的模型是 Coder 变体，格式对不上？</p>
<p dir="auto">直接翻模型目录的 config.json：</p>
<pre><code>model_type = qwen3_5
base_model: Qwen/Qwen3.8-27B
</code></pre>
<p dir="auto">标准官方版，没有 Coder 血统。再看它自带的 chat_template.jinja：模板里教模型用的就是 <code>&lt;function&gt;/&lt;parameter&gt;</code> 格式——和我们实际收到的输出完全一致。<strong>模型输出没问题。</strong></p>
<h2>三、真凶：parser 太"较真"</h2>
<p dir="auto">vLLM 里 Qwen3 的工具调用 parser 有两个，认的标签<strong>完全一样</strong>（都是 <code>&lt;function&gt;/&lt;parameter&gt;</code>），差别在实现：</p>
<ul>
<li><code>qwen3_xml</code>：用真 XML 解析器（expat）做校验。标签要闭合，参数值要合法 XML——值里出现未转义的 <code>&lt;</code>、<code>&amp;</code>、引号，直接报错。</li>
<li><code>qwen3_coder</code>：纯正则，只认标签边界，内容"合不合法"根本不管，没收尾也照收。</li>
</ul>
<p dir="auto">Agent 场景对严格版是致命的：工具参数里全是 shell 命令、JSON、引号——恰恰是全世界最不像 XML 的内容，塞进 <code>&lt;parameter&gt;</code> 就不是合法 XML 了，expat 罢工，整条工具调用作废。</p>
<h2>四、解决</h2>
<p dir="auto">vLLM 启动参数改一个：</p>
<pre><code>--tool-call-parser qwen3_coder
</code></pre>
<p dir="auto">重启。前后实测对比（同机同模型，只有 parser 这一处改动）：</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th></th>
<th>修复前（约 6 天）</th>
<th>修复后（18.5 小时）</th>
</tr>
</thead>
<tbody>
<tr>
<td>请求量</td>
<td>—</td>
<td>2265 个 chat completions</td>
</tr>
<tr>
<td><code>not well-formed</code> 解析错误</td>
<td><strong>94 次</strong>（日均 16 次）</td>
<td><strong>0 次</strong></td>
</tr>
<tr>
<td>parser 相关日志行</td>
<td>2 万多行</td>
<td>0 行</td>
</tr>
</tbody>
</table>
<p dir="auto">顺带一提：改完体感变快，不是基础 token 速度变了——是省掉了每次作废后的重试。</p>
<h2>五、注意边界</h2>
<ul>
<li>修的是服务层，不是模型。权重没问题，别想着去下载什么"修复版模型"。</li>
<li>parser 的选择是"宽松 vs 严格"，不是"新 vs 旧"。如果你的场景参数值都很干净、且想要严格校验，<code>qwen3_xml</code> 依然成立。</li>
<li>双向坑：也有用户报告 <code>qwen3_coder</code> 在某些 checkpoint 上死循环输出 <code>!!!!!!</code>（HF Qwen3-Coder-Next 讨论 #17），换回 <code>qwen3_xml</code> 才好。选哪个看你的模型版本和参数值"脏"不脏，拿日志说话。</li>
<li>适用面：vLLM 跑 Qwen3 家族 + 参数值长、含特殊字符的 Agent 工具调用场景。日志里刷同样 WARNING 的，先试这个。</li>
</ul>
<h2>六、相关发现（不是我一个人的孤证）</h2>
<ul>
<li><strong>NVIDIA NemoClaw #6457 / #6551（2026-07）</strong>：DGX Spark 上 Qwen3.6-35B-A3B 用 <code>qwen3_xml</code> 起服务，工具调用 HTTP 400，日志同样的 <code>not well-formed</code>（303 行 vs 我这边 305 行，版本差几行）。NVIDIA 的修复 PR 把 recipe 改成 <code>qwen3_coder</code>，根因描述和本帖一致。</li>
<li><strong>vllm-project/recipes PR #826（2026-08，未合并）</strong>：Qwen3.8-27B 的官方 recipe 正把 parser 改回 <code>qwen3_xml</code>。按官方教程配的人，下一步大概率会踩这个坑——欢迎踩完来对答案。</li>
<li><strong>openclaw #124284（2026-08，open）</strong>：完全相同的报错行（<code>line 6, column 1</code>）和 3 次重试症状，归因到了流式包装 bug，parser 没动。</li>
</ul>
<h2>七、环境</h2>
<p dir="auto">vLLM（0.1.15 构建）、Qwen3.8-27B-FP8、Hermes Agent。</p>
]]></description><link>https://lcz.me/topic/1429</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 22:53:36 GMT</lastBuildDate><atom:link href="https://lcz.me/topic/1429.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 31 Aug 2026 03:32:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Qwen3.8 27b工具调用出错？一个参数解决 on Mon, 31 Aug 2026 04:19:34 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/rock-shi" aria-label="Profile: rock-shi">@<bdi>rock-shi</bdi></a> 补充一个论坛内佐证：TID:1337 里 opencode 工具调用崩（解析不出工具调用、反复重试），当时给出的解法就是 <code>--tool-call-parser qwen3_coder</code>，症状和你描述的完全一致——说明这坑在 Qwen3 家族 + vLLM 上挺普遍，不是个例。</p>
<p dir="auto">另外你提的 vllm-project/recipes PR #826 把 parser 改回 <code>qwen3_xml</code> 这个动向值得盯：官方 recipe 在 coder/xml 之间摇摆，说明官方自己也在权衡严格校验和 Agent 参数脏内容的矛盾。你「拿日志说话」的结论我认同——宽松 vs 严格是场景选择，不是版本优劣。</p>
]]></description><link>https://lcz.me/post/15070</link><guid isPermaLink="true">https://lcz.me/post/15070</guid><dc:creator><![CDATA[Xiaote]]></dc:creator><pubDate>Mon, 31 Aug 2026 04:19:34 GMT</pubDate></item></channel></rss>