[Bug]: vllm-rs render has no –reasoning-effort-map, so mapped reasoning_effort values return 400

当 Python 前端用 --reasoning-effort-map 把 minimal 、 medium 等 OpenAI 强度名映射到模型认识的值,而 vllm-rs render 启动时没有这个参数时,发往 Rust 渲染服务、带映射前 reasoning_effort 的请求就会返回 40

快速结论:当 Python 前端用 --reasoning-effort-map 把 minimal、medium 等 OpenAI 强度名映射到模型认识的值,而 vllm-rs render 启动时没有这个参数时,发往 Rust 渲染服务、带映射前 reasoning_effort 的请求就会返回 400。优先确认 vllm-rs render --help 中是否已有 --reasoning-effort-map,以及使用的构建是否包含对应修复。

适用环境:Issue 中确认的环境为 vLLM 0.32.0+g110cf9d 镜像内置的 vllm-rs 0.32.1rc1.dev7+g371745ebd(提交 g371745ebd,2026-10-18 构建);模型 DeepSeek-V4.1-Flash;渲染命令使用 --tokenizer-mode deepseek_v41 --reasoning-parser deepseek_v41 --tool-call-parser deepseek_v41;Python 服务使用 --reasoning-effort-map '{"minimal":"low","medium":"low"}'。操作系统、Python、CUDA、显卡及 PyTorch 版本在 Issue 中未给出。

最快修复方案:升级到包含 PR #62312(2026-10-27 合入 main)的构建。该 PR 为 vllm-rs serve 和 render server 增加了 --reasoning-effort-map。

注意事项:Issue 中报错所在的构建早于修复,因此无法直接验证修复后的行为;报告者表示若使用包含 #62312 的构建、在设置映射后仍拒绝 medium,会重新打开 Issue。修复后 Rust 端与 Python 端映射语义是否完全一致,仍建议在目标请求上实际验证。另外,Rust 渲染服务也缺少 --enable-auto-tool-choice,但按报告者测试,它不影响渲染结果。

问题场景

部署由 Python 引擎加 Rust 渲染服务组成:Python 侧用 vllm serve 或 vllm launch render 并设置 --reasoning-effort-map,Rust 侧用 vllm-rs render 作为前置渲染服务,返回 GenerateRequest 交给 Python 引擎。当客户端发送模型不直接认识的 reasoning_effort 值(如 medium、minimal)时,Python 前端会先按映射转成 low 并返回 200;但请求落到 vllm-rs render 后,由于渲染端没有该映射参数,会按模型原始允许值校验并返回 400。因此,经 vllm-rs render 做渲染的路由会在这些请求上失败。

报错原文

[Bug]: vllm-rs render has no --reasoning-effort-map, so mapped reasoning_effort values return 400

Python (vllm serve / vllm launch render with the map): 200, rendered with `low`
vllm-rs render: 400: `DeepSeek V4.1 reasoning_effort must be low, high, xhigh, max, or an integer within [1, 100] in chat_template_kwargs`

原因分析

最可能的原因是版本差异,而不是配置写法错误。vllm-rs render 在报错构建中不支持 --reasoning-effort-map,该参数不在 vllm-rs render --help 输出中。因此,Rust 渲染端不会像 Python 前端那样先把 medium、minimal 归一化为 low,而是直接把原始 reasoning_effort 交给渲染器,由 DeepSeek V4.1 的校验逻辑拒绝,返回 400。Issue 已确认,main 分支上的 #62312 为 vllm-rs serve 与 render server 补上了该参数;本 Issue 测试的构建早于该修复合入。

环境排查

  • 确认 vllm-rs --version 或对应的镜像/提交号,判断是否早于包含 #62312 的构建;Issue 中的 g371745ebd 属于修复前版本。
  • 执行 vllm-rs render --help,确认是否已出现 --reasoning-effort-map。
  • 核对 Python 前端与 Rust 渲染端是否使用同一份映射内容,例如 '{"minimal":"low","medium":"low"}'。
  • 确认请求中的 reasoning_effort 值确实属于需要映射的范围,如 medium、minimal。
  • 确认模型相关参数一致,例如 --tokenizer-mode deepseek_v41、--reasoning-parser deepseek_v41、--tool-call-parser deepseek_v41。
  • Issue 未提供操作系统、Python、CUDA、PyTorch 与显卡信息;若问题在升级后仍存在,再补充这些环境信息排查。

解决步骤

  1. 将 vLLM 镜像或 vllm-rs 升级到包含 PR #62312(2026-10-27 合入 main)的构建,避免继续使用早于该修复的 g371745ebd 构建。
  2. 在启动 Rust 渲染服务时,参照 Python 前端的写法为 vllm-rs render 设置 --reasoning-effort-map,传入与 Python 侧相同的映射,例如 '{"minimal":"low","medium":"low"}'。
  3. 如果升级后 vllm-rs render --help 中仍没有该参数,说明当前构建尚未包含修复,需要换用更新的构建,而不是重复调整映射内容。
  4. 用之前返回 400 的同一请求(reasoning_effort 为 medium 或 minimal)重新经 vllm-rs render 发起测试。

验证方法

同一请求在 Python 前端与 vllm-rs render 上应得到一致结果:映射后的值(如 low)被接受并完成渲染,不再出现 reasoning_effort must be low, high, xhigh, max, or an integer within [1, 100] 的 400 报错。建议分别测试 medium 与 minimal 两个映射用例,并确认渲染结果与 Python 前端一致。

参考来源

vllm-project/vllm #64432

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 30927

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注