vLLM 0.6.3 开 guided_json,先用 schema A 请求,改成 B 后同一进程仍按 A 的字段输出,重启服务才生效,日志里没有任何 schema 相关记录。
真正麻烦的地方在于,几个原因的现象几乎一样。guided decoding 的缓存键没有带上 schema 版本;客户端复用了旧的请求体对象;structured outputs 后端在进程内复用编译结果;schema 序列化顺序不稳定,缓存判断失效。
上来先把每次实际发送的 schema 打印并比对
curl -s localhost:8000/v1/chat/completions -H 'Content-Type: application/json' -d @req_b.json
再往下换到 xgrammar 后端重新加载模型
python -m vllm.entrypoints.openai.api_server --model Qwen2.5-7B-Instruct --guided-decoding-backend xgrammar
接着清掉客户端缓存并重启服务复测
python smoke_guided.py --schema b.json --no-cache
给 schema 加显式版本号便于排查
python -c "print('schema_version: 2026-11-15-b')"
同一份数据我导出了两份,一份留底,一份拿来试。
这类问题以前遇到过,但这次的触发条件和上次不一样。
改完先别撤,确认这几项。换成 B 后第一次请求就返回新字段,连续切换 A 和 B 十次结果都正确,服务日志里能看到 schema 版本。
补一句。guided decoding 的编译结果会常驻显存,热更新 schema 在部分版本上并不可靠,线上切换结构化模板后最好滚动重启一次。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
