这个 500 不是网络故障

如果 Claude Code 接到本地 Qwen3.8/vLLM 后,第一轮请求返回 HTTP 500 internal_error,随后客户端持续重试,先检查 effort 值。Qwen3.8-27B 的模板只接受 xhigh、medium 和 low;Claude Code 在某些环境中默认发送 high,模板会直接抛错。

Qwen3.8 在 2026-08-19 发布。这个兼容问题是模型模板和客户端默认参数之间的组合问题,不是把 URL 改成另一个网关就能解决。

用 curl 复现输入边界

先在 vLLM 的 Anthropic 兼容入口测试,不要让 Claude Code 的自动重试掩盖原始错误。

Bash
curl -s http://127.0.0.1:8000/v1/messages \
  -H 'content-type: application/json' \
  -d '{"model":"qwen3.8-27b","max_tokens":64,"messages":[{"role":"user","content":"hi"}],"output_config":{"effort":"high"}}'

如果响应为 500,并包含 Unexpected reasoning effort high,再分别把 high 改成 medium 和 xhigh。至少有一个值返回 200,才能确认问题就在模板校验。

Claude Code 的保守修复

在启动 Claude Code 的同一个 shell 中固定为 medium:

Bash
export CLAUDE_CODE_EFFORT_LEVEL=medium
claude --model qwen3.8-27b -p "返回 OK" < /dev/null

Windows PowerShell 可以这样设置:

PowerShell
$env:CLAUDE_CODE_EFFORT_LEVEL = "medium"
claude --model qwen3.8-27b -p "返回 OK"

成功标准是请求返回 200、首轮输出 OK,并且日志中没有连续的 500 重试。enable_thinking=false 虽然可以绕过校验,但它关闭了思考模式,不应当当作等价修复。

为什么不要直接映射到 xhigh

Issue #217 的后续记录提到,另一个测试栈在 xhigh 下出现空答案风险。因此在没有完成自己的回归测试前,优先使用 medium,再单独比较 xhigh 的工具调用、输出完整度和延迟。

同时固定下面几项,避免把多个变量混在一起:

  • Qwen3.8 权重和量化版本
  • vLLM 版本与 --tool-call-parser qwen3_coder
  • --reasoning-parser qwen3
  • Claude Code 的模型名和 effort
  • max_tokens 与上下文长度

长任务要验证什么

短请求通过后,再运行一个会读取文件、修改文件并执行测试的最小任务。观察:

  1. 第二轮请求是否仍返回 200。
  2. 工具调用参数是否完整 JSON。
  3. Claude Code 是否因 500 进入重试循环。
  4. 上下文接近上限时,错误是否仍然是 effort 校验,而不是新的模板或工具协议错误。

如果只有 Qwen3.8 报错、Qwen3.6 同配置正常,说明兼容边界在模型模板,而不是通用 Anthropic 入口。此时应保留版本、请求体和响应日志,等待上游模板或 vLLM 修复。

参考来源

Qwen3.8-27B chat template rejects Claude Code's default reasoning_effort=highGitHub IssueModel releasesQwenCloud

相关文章

Claude Code unsupported parameter / unknown field 怎么排查错误日志 / 约 12 分钟Claude Code 接入 DeepSeek API:配置方法和报错处理智能编程 / 约 24 分钟Claude Code model not found 怎么排查:入口、Key 和模型映射错误日志 / 约 12 分钟7 个关键洞察:AI Coding 工具真正改变的不是写代码,而是验证代码智能编程 / 约 18 分钟

作者信息