[GH-ISSUE #350] Chat Template 更新后 vLLM reasoning-parser 无法正确处理 #273

Closed
opened 2026-10-26 21:18:27 +00:00 by bsakaguchi · 5 comments
Owner

Originally created by @haowang02 on GitHub (Feb 10, 2025).
Original GitHub issue: https://github.com/deepseek-ai/DeepSeek-R1/issues/350

注意到昨天 HuggingFace Hub 中 DeepSeek-R1 包括其蒸馏版本的 Chat Template (tokenizer_config.json 中) 有所更新,主要是在其末尾增加了 <think>\\n。我猜测这个更新是为了强制 DeepSeek-R1 从思考内容开始生成,从而避免其绕过思考。

遗憾的是这个更新导致 vLLM 中的 reasoning-parser 不再按预期工作。

不知道 vLLM 中的 deepseek_r1 reasoning-parser 是哪边在维护,希望能尽快修复。

谢谢!

Originally created by @haowang02 on GitHub (Feb 10, 2025). Original GitHub issue: https://github.com/deepseek-ai/DeepSeek-R1/issues/350 注意到昨天 HuggingFace Hub 中 DeepSeek-R1 包括其蒸馏版本的 Chat Template (tokenizer_config.json 中) 有所更新,主要是在其末尾增加了 `<think>\\n`。我猜测这个更新是为了强制 DeepSeek-R1 从思考内容开始生成,从而避免其绕过思考。 遗憾的是这个更新导致 vLLM 中的 [reasoning-parser](https://docs.vllm.ai/en/latest/features/reasoning_outputs.html) 不再按预期工作。 不知道 vLLM 中的 deepseek_r1 reasoning-parser 是哪边在维护,希望能尽快修复。 谢谢!
bsakaguchi 2026-10-26 21:18:27 +00:00
  • closed this issue
  • added the
    stale
    label
Author
Owner

@deepsicker commented on GitHub (Feb 10, 2025):

不再按预期工作 是什么意思报错了? 还是?show your code,
我的代码这里没问题啊https://www.yuque.com/unreal/gpynrn/so9tml5v3dv9x6ra#UlZwT

<!-- gh-comment-id:2646895998 --> @deepsicker commented on GitHub (Feb 10, 2025): 不再按预期工作 是什么意思报错了? 还是?show your code, 我的代码这里没问题啊https://www.yuque.com/unreal/gpynrn/so9tml5v3dv9x6ra#UlZwT
Author
Owner

@haowang02 commented on GitHub (Feb 10, 2025):

您好,这是我启动 vLLM 的命令:

vllm serve deepseek-ai/DeepSeek-R1-Distill-Llama-70B \
  --tensor-parallel-size 4 \
  --max-model-len 32768 \
  --enforce-eager \
  --enable-reasoning \
  --reasoning-parser deepseek_r1

成功启动后我用以下命令尝试对话:

curl http://127.0.0.1:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer 123" \
  -d '{
     "model": "deepseek-ai/DeepSeek-R1-Distill-Llama-70B",
     "messages": [{"role": "user", "content": "11.11和11.8哪个大?"}],
     "temperature": 0.6
   }'

以下是 vLLM 的返回结果:

{
  "id": "chatcmpl-a0ffb8160ecc4416890273d949345123",
  "object": "chat.completion",
  "created": 1739170216,
  "model": "deepseek-ai/DeepSeek-R1-Distill-Llama-70B",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "reasoning_content": null,
        "content": "首先,比较两个数的整数部分。11.11和11.8的整数部分都是11,因此整数部分相同。\n\n接下来,比较小数部分。11.11的小数部分是0.11,11.8的小数部分是0.8。\n\n将0.8转换为相同的小数位数,即0.80,与0.11进行比较。\n\n显然,0.80大于0.11。\n\n因此,11.8大于11.11。\n</think>\n\n**问题**:11.11 和 11.8 哪个大?\n\n**解答**:\n\n1. **比较整数部分**:\n   - 11.11 的整数部分是 **11**\n   - 11.8 的整数部分也是 **11**\n   \n   整数部分相同,继续比较小数部分。\n\n2. **比较小数部分**:\n   - 11.11 的 小数部分是 **0.11**\n   - 11.8 的小数部分是 **0.8**(可以写成 **0.80** 以便比较)\n   \n   比较 **0.11** 和 **0.80**:\n   \\[\n   0.11 < 0.80\n   \\]\n   \n   因此,11.8 的小数部分大于 11.11 的小数部分。\n\n**结论**:\n\\[\n11.8 > 11.11\n\\]\n\n最终答案:\\(\\boxed{11.8}\\)",
        "tool_calls": []
      },
      "logprobs": null,
      "finish_reason": "stop",
      "stop_reason": null
    }
  ],
  "usage": {
    "prompt_tokens": 16,
    "total_tokens": 339,
    "completion_tokens": 323,
    "prompt_tokens_details": null
  },
  "prompt_logprobs": null
}

可以看到 reasoning_content 字段为 null,而实际的思考内容包括 </think> 标签都被包含在 content 字段中。
我想这是预期的,因为在 HuggingFace Hub 中的 Chat Template 被更新前思考的内容能顺利被解析到 reasoning_content 字段中。

以下是我的系统信息:

vllm                              0.7.2
transformers                      4.48.3
<!-- gh-comment-id:2647098469 --> @haowang02 commented on GitHub (Feb 10, 2025): 您好,这是我启动 vLLM 的命令: ```bash vllm serve deepseek-ai/DeepSeek-R1-Distill-Llama-70B \ --tensor-parallel-size 4 \ --max-model-len 32768 \ --enforce-eager \ --enable-reasoning \ --reasoning-parser deepseek_r1 ``` 成功启动后我用以下命令尝试对话: ```bash curl http://127.0.0.1:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer 123" \ -d '{ "model": "deepseek-ai/DeepSeek-R1-Distill-Llama-70B", "messages": [{"role": "user", "content": "11.11和11.8哪个大?"}], "temperature": 0.6 }' ``` 以下是 vLLM 的返回结果: ```json { "id": "chatcmpl-a0ffb8160ecc4416890273d949345123", "object": "chat.completion", "created": 1739170216, "model": "deepseek-ai/DeepSeek-R1-Distill-Llama-70B", "choices": [ { "index": 0, "message": { "role": "assistant", "reasoning_content": null, "content": "首先,比较两个数的整数部分。11.11和11.8的整数部分都是11,因此整数部分相同。\n\n接下来,比较小数部分。11.11的小数部分是0.11,11.8的小数部分是0.8。\n\n将0.8转换为相同的小数位数,即0.80,与0.11进行比较。\n\n显然,0.80大于0.11。\n\n因此,11.8大于11.11。\n</think>\n\n**问题**:11.11 和 11.8 哪个大?\n\n**解答**:\n\n1. **比较整数部分**:\n - 11.11 的整数部分是 **11**\n - 11.8 的整数部分也是 **11**\n \n 整数部分相同,继续比较小数部分。\n\n2. **比较小数部分**:\n - 11.11 的 小数部分是 **0.11**\n - 11.8 的小数部分是 **0.8**(可以写成 **0.80** 以便比较)\n \n 比较 **0.11** 和 **0.80**:\n \\[\n 0.11 < 0.80\n \\]\n \n 因此,11.8 的小数部分大于 11.11 的小数部分。\n\n**结论**:\n\\[\n11.8 > 11.11\n\\]\n\n最终答案:\\(\\boxed{11.8}\\)", "tool_calls": [] }, "logprobs": null, "finish_reason": "stop", "stop_reason": null } ], "usage": { "prompt_tokens": 16, "total_tokens": 339, "completion_tokens": 323, "prompt_tokens_details": null }, "prompt_logprobs": null } ``` 可以看到 reasoning_content 字段为 null,而实际的思考内容包括 `</think>` 标签都被包含在 content 字段中。 我想这是预期的,因为在 HuggingFace Hub 中的 Chat Template 被更新前思考的内容能顺利被解析到 reasoning_content 字段中。 以下是我的系统信息: ``` vllm 0.7.2 transformers 4.48.3 ```
Author
Owner

@ariesfish commented on GitHub (Feb 10, 2025):

注意到昨天 HuggingFace Hub 中 DeepSeek-R1 包括其蒸馏版本的 Chat Template (tokenizer_config.json 中) 有所更新,主要是在其末尾增加了 <think>\\n。我猜测这个更新是为了强制 DeepSeek-R1 从思考内容开始生成,从而避免其绕过思考。

遗憾的是这个更新导致 vLLM 中的 reasoning-parser 不再按预期工作。

不知道 vLLM 中的 deepseek_r1 reasoning-parser 是哪边在维护,希望能尽快修复。

谢谢!

参考
https://github.com/deepseek-ai/DeepSeek-R1/issues/352#issuecomment-2647631744
可以解决

<!-- gh-comment-id:2647643424 --> @ariesfish commented on GitHub (Feb 10, 2025): > 注意到昨天 HuggingFace Hub 中 DeepSeek-R1 包括其蒸馏版本的 Chat Template (tokenizer_config.json 中) 有所更新,主要是在其末尾增加了 `<think>\\n`。我猜测这个更新是为了强制 DeepSeek-R1 从思考内容开始生成,从而避免其绕过思考。 > > 遗憾的是这个更新导致 vLLM 中的 [reasoning-parser](https://docs.vllm.ai/en/latest/features/reasoning_outputs.html) 不再按预期工作。 > > 不知道 vLLM 中的 deepseek_r1 reasoning-parser 是哪边在维护,希望能尽快修复。 > > 谢谢! 参考 https://github.com/deepseek-ai/DeepSeek-R1/issues/352#issuecomment-2647631744 可以解决
Author
Owner

@newledge commented on GitHub (Feb 27, 2025):

您好,这是我启动 vLLM 的命令:

vllm serve deepseek-ai/DeepSeek-R1-Distill-Llama-70B
--tensor-parallel-size 4
--max-model-len 32768
--enforce-eager
--enable-reasoning
--reasoning-parser deepseek_r1
成功启动后我用以下命令尝试对话:

curl http://127.0.0.1:8000/v1/chat/completions
-H "Content-Type: application/json"
-H "Authorization: Bearer 123"
-d '{
"model": "deepseek-ai/DeepSeek-R1-Distill-Llama-70B",
"messages": [{"role": "user", "content": "11.11和11.8哪个大?"}],
"temperature": 0.6
}'
以下是 vLLM 的返回结果:

{
"id": "chatcmpl-a0ffb8160ecc4416890273d949345123",
"object": "chat.completion",
"created": 1739170216,
"model": "deepseek-ai/DeepSeek-R1-Distill-Llama-70B",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"reasoning_content": null,
"content": "首先,比较两个数的整数部分。11.11和11.8的整数部分都是11,因此整数部分相同。\n\n接下来,比较小数部分。11.11的小数部分是0.11,11.8的小数部分是0.8。\n\n将0.8转换为相同的小数位数,即0.80,与0.11进行比较。\n\n显然,0.80大于0.11。\n\n因此,11.8大于11.11。\n\n\n问题:11.11 和 11.8 哪个大?\n\n解答:\n\n1. 比较整数部分:\n - 11.11 的整数部分是 11\n - 11.8 的整数部分也是 11\n \n 整数部分相同,继续比较小数部分。\n\n2. 比较小数部分:\n - 11.11 的 小数部分是 0.11\n - 11.8 的小数部分是 0.8(可以写成 0.80 以便比较)\n \n 比较 0.11 和 0.80:\n \[\n 0.11 < 0.80\n \]\n \n 因此,11.8 的小数部分大于 11.11 的小数部分。\n\n结论:\n\[\n11.8 > 11.11\n\]\n\n最终答案:\(\boxed{11.8}\)",
"tool_calls": []
},
"logprobs": null,
"finish_reason": "stop",
"stop_reason": null
}
],
"usage": {
"prompt_tokens": 16,
"total_tokens": 339,
"completion_tokens": 323,
"prompt_tokens_details": null
},
"prompt_logprobs": null
}
可以看到 reasoning_content 字段为 null,而实际的思考内容包括 </think> 标签都被包含在 content 字段中。 我想这是预期的,因为在 HuggingFace Hub 中的 Chat Template 被更新前思考的内容能顺利被解析到 reasoning_content 字段中。

以下是我的系统信息:

vllm                              0.7.2
transformers                      4.48.3

你用openai的方式试过么?

<!-- gh-comment-id:2687958392 --> @newledge commented on GitHub (Feb 27, 2025): > 您好,这是我启动 vLLM 的命令: > > vllm serve deepseek-ai/DeepSeek-R1-Distill-Llama-70B \ > --tensor-parallel-size 4 \ > --max-model-len 32768 \ > --enforce-eager \ > --enable-reasoning \ > --reasoning-parser deepseek_r1 > 成功启动后我用以下命令尝试对话: > > curl http://127.0.0.1:8000/v1/chat/completions \ > -H "Content-Type: application/json" \ > -H "Authorization: Bearer 123" \ > -d '{ > "model": "deepseek-ai/DeepSeek-R1-Distill-Llama-70B", > "messages": [{"role": "user", "content": "11.11和11.8哪个大?"}], > "temperature": 0.6 > }' > 以下是 vLLM 的返回结果: > > { > "id": "chatcmpl-a0ffb8160ecc4416890273d949345123", > "object": "chat.completion", > "created": 1739170216, > "model": "deepseek-ai/DeepSeek-R1-Distill-Llama-70B", > "choices": [ > { > "index": 0, > "message": { > "role": "assistant", > "reasoning_content": null, > "content": "首先,比较两个数的整数部分。11.11和11.8的整数部分都是11,因此整数部分相同。\n\n接下来,比较小数部分。11.11的小数部分是0.11,11.8的小数部分是0.8。\n\n将0.8转换为相同的小数位数,即0.80,与0.11进行比较。\n\n显然,0.80大于0.11。\n\n因此,11.8大于11.11。\n</think>\n\n**问题**:11.11 和 11.8 哪个大?\n\n**解答**:\n\n1. **比较整数部分**:\n - 11.11 的整数部分是 **11**\n - 11.8 的整数部分也是 **11**\n \n 整数部分相同,继续比较小数部分。\n\n2. **比较小数部分**:\n - 11.11 的 小数部分是 **0.11**\n - 11.8 的小数部分是 **0.8**(可以写成 **0.80** 以便比较)\n \n 比较 **0.11** 和 **0.80**:\n \\[\n 0.11 < 0.80\n \\]\n \n 因此,11.8 的小数部分大于 11.11 的小数部分。\n\n**结论**:\n\\[\n11.8 > 11.11\n\\]\n\n最终答案:\\(\\boxed{11.8}\\)", > "tool_calls": [] > }, > "logprobs": null, > "finish_reason": "stop", > "stop_reason": null > } > ], > "usage": { > "prompt_tokens": 16, > "total_tokens": 339, > "completion_tokens": 323, > "prompt_tokens_details": null > }, > "prompt_logprobs": null > } > 可以看到 reasoning_content 字段为 null,而实际的思考内容包括 `</think>` 标签都被包含在 content 字段中。 我想这是预期的,因为在 HuggingFace Hub 中的 Chat Template 被更新前思考的内容能顺利被解析到 reasoning_content 字段中。 > > 以下是我的系统信息: > > ``` > vllm 0.7.2 > transformers 4.48.3 > ``` 你用openai的方式试过么?
Author
Owner

@github-actions[bot] commented on GitHub (Apr 30, 2025):

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. If you believe this issue is still relevant, please leave a comment to keep it open. Thank you for your contributions!

<!-- gh-comment-id:2840499871 --> @github-actions[bot] commented on GitHub (Apr 30, 2025): This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. If you believe this issue is still relevant, please leave a comment to keep it open. Thank you for your contributions!
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
deepseek-ai/DeepSeek-R1#273
No description provided.