
DeepSeek V4.1 Flash 工具调用落地 vLLM:带空格的标签破坏了什么
- Orca新Orca: OrcaCyber Zero 1.02026-09-17$3.00 / $5.00 每百万 tokens
- orca新Orca: OrcaVerify Text 1.02026-09-16$2.00 / $0.00 每百万 tokens
- deepseek新DeepSeek: DeepSeek V4.1 Flash2026-09-1040智能
- openaiOpenAI: GPT-6 Astra2026-09-0453智能77代码
- googleGoogle: Gemini 3.8 Flash2026-09-0241智能76代码
- qwenQwen: Qwen3.8 Max (0902)2026-09-0245智能76代码
- anthropicAnthropic: Claude Fable 5.12026-09-0153智能82代码
- AlibabaQwen: Qwen3.8 Flash2026-08-26$0.15 / $0.47 每百万 tokens
- z-aiZ.ai: GLM 5.3 Flash2026-08-2642智能72代码
- DeepSeekDeepSeek: DeepSeek V4 Flash Vision (Exp)2026-08-21$0.22 / $0.66 每百万 tokens
- z-aiZ.ai: GLM 5.32026-08-1845智能75代码
- obsidianQwen3.8 27B2026-08-1534智能68代码
- deepseekDeepSeek: DeepSeek V4 Pro 08132026-08-1236智能69代码
- grokSpaceXAI: Grok 4.62026-08-1244智能77代码
- metaMeta: Muse Spark 1.22026-08-0540智能72代码
- qwenQwen: Qwen3.8 Max2026-08-0345智能76代码
- deepseekDeepSeek: DeepSeek V4 Flash 07312026-07-3134智能69代码
- minimaxMiniMax: MiniMax-H32026-07-31minimax/minimax-h3
- qwenQwen: Qwen3.7 Flash2026-07-27$0.03 / $0.13 每百万 tokens
- orcaOrcaDub: OrcaDub 1.02026-07-27orca/dub
DeepSeek V4.1 Flash自 2026 年 9 月 10 日起已全面可用,而在它问世后的头十二天里,这个模型存在一个无人提及的缺口:它能推理,能看图,能容纳一百万 token 的上下文,却无法通过最广泛使用的开源服务栈可靠地调用工具。这个缺口现已在 vLLM 中补上——不是靠一个配置开关,而是靠一次解析器重写。两项拉取请求承载了这项工作,而它们为何必要,才是有意思的地方。
简而言之:DeepSeek V4.1 Flash 以标签格式发出工具调用,而现有的 DeepSeek V4 检测器无法识别这种格式,所以在原版 vLLM 部署上,工具调用标记会以普通文本形式到达,而不是结构化输出。不会报任何错。模型看起来就像是干脆拒绝调用函数。如果你一直在用自托管的 DeepSeek V4.1 Flash 测试智能体循环,并据此得出该模型不擅长工具调用的结论,那你当时看到的很可能就是这个。
服务栈实际上发生了什么变化?
一段时间以来,vLLM 针对 DeepSeek 模型的工具调用解析一直存在于两个地方:一个 Python 前端和一个较新的 Rust 前端,而语法层面的工作则委托给 XGrammar 项目。引入 V4.1 Flash 支持意味着要将 C++ deepseek_xml 转换从 XGrammar 内部移植到 Rust 构建器中,然后将模型自身的编码接入 vLLM 的 tokenizer 目录。
• Rust 前端工作对应 PR #56235,它将 XGrammar 的 C++ deepseek_xml 转换移植到 Rust 构建器中。该 PR 专门为 V4.1 新增了 18 个测试,且现有的完整测试套件——vllm-parser 中的 472 个测试和 vllm-chat 中的 326 个测试——均保持通过。
• Python 前端工作为 PR #56408,目前仍是草稿。它依赖于上游 XGrammar 变更(mlc-ai/xgrammar#885)先落地,并且在应用该依赖后报告有 110 个测试通过。
• 新的编码模块是 vllm/tokenizers/deepseek_v41_encoding.py—— 一个单独的文件,而不是 V4 编码内部的一个分支,这表明标签语法确实不同,而不仅仅是扩展。
• 调用方式是显式的:--tool-parser deepseek_v41。不存在能够悄悄完成正确操作的自动检测回退机制。
间隔标签就是全部
新解析器之所以出现,而不是把正则表达式放宽,原因在于空白字符。DeepSeek V4.1 Flash 在书写其 DSML 工具标签时,会在各个词元之间插入空格。V4 检测器的模式期望的是不带空格的形式,因此无法匹配,而在工具调用解析器中,匹配失败按设计是静默的——文本会被当作内容原样传递,而不是抛出异常。
这种失败模式值得细想,因为它是代价最高的一种。会抛出异常的解析器,一个下午就能修好。而一个返回格式良好、却包含调用方从未要求的标记的解析器,看起来像模型质量问题,团队对它的反应也会像面对模型质量问题一样:尝试不同的提示词,添加示例,更换模型。十二天已经足够让其中很多事在私下里发生了。
这也意味着,修复它并不是一个调参旋钮。你无法靠提示词绕开一个与你的模型输出格式不匹配的检测器,也无法在客户端通过后处理来修复,因为等文本到达你的客户端时,结构早已不复存在。它必须发生在服务栈中,而它现在恰恰就在那里。
为什么这一点对 V4.1 Flash 而言比 V4 更为重要
工具调用对这个特定模型来说并非可有可无。DeepSeek V4.1 Flash 是一个拥有 5520 亿参数的混合专家模型,输入时激活 80 亿参数,输出时激活 160 亿参数,具有 100 万 token 的上下文窗口和 38.4 万 token 的最大输出。激活分配很能说明问题:该模型的构建目标是接收大规模输入——比如一个代码仓库、一组文档、一段很长的工具调用轨迹——并输出长结构化响应。这是一种智能体形态,而非聊天形态。
发布规格的其余部分也指向同一个方向。MIT 许可的权重、每个 token 890 字节的 KV 缓存、45 万亿预训练 token、原生视觉能力。在 1M 上下文下,KV 缓存这个数字才是运营层面真正关键的一项:正是它让一份冗长的 agent 对话记录能够以可承受的成本常驻内存,也正是它让这个模型有望成为这样一个循环中的廉价执行者——由更昂贵的模型来监督。

这使得十二天的工具调用能力缺口成为实打实的代价,而非一个可有可无的注脚。如果一个模型的经济价值建立在充当智能体流水线中的高吞吐执行者之上,那么当流水线无法从它那里得到一次结构化调用时,这个模型就几乎一文不值。

还有什么仍然开放
截至2026年9月22日,真实情况如下:
• Rust 前端路径(PR #56235)是在新的 V4.1 用例和既有测试套件上都拥有完整测试覆盖的那一个。如果你使用的 vLLM 构建包含它,那么该解析器今天就可用了。
• Python 前端路径(PR #56408)尚为草稿,并且有一个外部依赖。如果你固定使用的是早于 XGrammar 变更的构建版本,Python 前端还无法为你提供 V4.1 工具解析。
• 由于调用是显式的,一个升级了 vLLM 但未更改其启动标志的部署将保留旧行为。解析器存在和解析器被使用是两回事。
• 目前尚无公开证据表明,在新解析器就位的情况下,有人针对 V4.1 Flash 运行过独立的工具调用基准测试。我们所知道的是,底层机制能正常工作,测试也能通过。模型的工具调用质量是否良好,是一个单独的问题,而这次合并并没有回答这个问题。
最后一点才是要牢牢记住的。解析器修复只是把模型从“无法评估”变为“可以评估”。它是作出裁决的前提,而不是裁决本身。
如果您不想自行运行服务栈
有一条更短的路径。DeepSeek V4.1 Flash 可通过 OrcaRouter 为其提供的端点使用,这意味着工具调用行为会作为一次普通的 API 调用到来,而不是一个构建问题——无需匹配 XGrammar 版本,无需挑选前端,无需记住启动标志。这一点在这里尤其重要的原因在于,该修复落在了两处,且两处的成熟度不同,而托管端点让这一选择变得毫无必要。
同一个密钥也能访问其余模型,也就是你要拿来做对比的那些模型;当问题不是“这个解析器是否正确”,而是“这个模型对我的循环是否足够好”时,这正是个有用的特性。你可以把 DeepSeek V4.1 Flash 放在路由规则后面充当廉价执行器,并在调用失败时故障转移到更强的模型,而无需第二份合约或第二个 SDK。要去试一个工具调用支持才上线两周的模型,恰恰就是自动故障转移存在的意义。

接下来看什么
有三件事会让这件事从一段管道式的内情叙述,变成一项裁决:
• PR #56408 即将脱离草稿状态,这将使 Python 前端路径成为现实,并终结两级支持的局面。
• 在固定服务栈上针对 V4.1 Flash 运行的一项独立 agent 或工具调用评估。该模型发布已有十二天,而解析器可用的时间还不到这么久,所以你现在看到的任何针对它的工具调用评分都值得追问一下——配置与模型本身同样重要。
• 其他服务栈是否会跟进。vLLM 是唯一有公开 PR 的;标签带空格的问题并非 vLLM 所独有,因此任何采用了 V4 检测器、却没有依据 V4.1 的输出重新推导它的服务栈,都会同样存在这一静默失败。
在其中第一项落地之前,准确的概括范围很窄,但值得直白地说出来:DeepSeek V4.1 Flash 是一个正式发布(GA)的模型,采用 MIT 许可的权重,拥有 1M 上下文和 384K 的输出上限,其工具调用现已在 vLLM 的 Rust 路径上通过一个显式解析器标志正常工作。这是实实在在的一步,但还算不上一个结果。
本文中的对比1
根据本文内容识别 · 基准测试:Artificial Analysis · 每日更新
