[GH-ISSUE #512] 如何关闭本地部署r1的思考过程 #411

Closed
opened 2026-10-26 21:20:50 +00:00 by bsakaguchi · 23 comments
Owner

Originally created by @Ima-Beast on GitHub (Feb 27, 2025).
Original GitHub issue: https://github.com/deepseek-ai/DeepSeek-R1/issues/512

针对某些任务,不需要复杂的推理过程,可以通过设置某个变量关闭思考过程吗?

Originally created by @Ima-Beast on GitHub (Feb 27, 2025). Original GitHub issue: https://github.com/deepseek-ai/DeepSeek-R1/issues/512 针对某些任务,不需要复杂的推理过程,可以通过设置某个变量关闭思考过程吗?
bsakaguchi 2026-10-26 21:20:50 +00:00
Author
Owner

@houyunlong1668 commented on GitHub (Feb 28, 2025):

没有思考过程的v3模型,楼主说的关闭是不想看到吗,这个我也不清楚

<!-- gh-comment-id:2689472110 --> @houyunlong1668 commented on GitHub (Feb 28, 2025): 没有思考过程的v3模型,楼主说的关闭是不想看到吗,这个我也不清楚
Author
Owner

@Ima-Beast commented on GitHub (Feb 28, 2025):

是R1模型。现在部署了一个R1模型,但处理任务的时候思考过程占用了大量时间还有token,影响了性能。如果能关闭思考这个过程就不用重新部署其他模型了。

<!-- gh-comment-id:2689479045 --> @Ima-Beast commented on GitHub (Feb 28, 2025): 是R1模型。现在部署了一个R1模型,但处理任务的时候思考过程占用了大量时间还有token,影响了性能。如果能关闭思考这个过程就不用重新部署其他模型了。
Author
Owner

@Lizidong01 commented on GitHub (Feb 28, 2025):

R1要关闭think的话可以在tonkenize之后加上

<think>\n\n</think>

这样就不会思考了

<!-- gh-comment-id:2690096678 --> @Lizidong01 commented on GitHub (Feb 28, 2025): R1要关闭think的话可以在tonkenize之后加上 ``` <think>\n\n</think> ``` 这样就不会思考了
Author
Owner

@Pp-Xix commented on GitHub (Mar 2, 2025):

R1要关闭think的话可以在tonkenize之后加上

<think>\n\n</think>

这样就不会思考了

请问能详细说下如何操作么

<!-- gh-comment-id:2692793084 --> @Pp-Xix commented on GitHub (Mar 2, 2025): > R1要关闭think的话可以在tonkenize之后加上 > > ``` > <think>\n\n</think> > ``` > > 这样就不会思考了 请问能详细说下如何操作么
Author
Owner

@RollingDonkeyX commented on GitHub (Mar 3, 2025):

vllm中有个解决方案,可以参考这篇帖子https://github.com/vllm-project/vllm/issues/12468,我也正在做尝试

<!-- gh-comment-id:2693035254 --> @RollingDonkeyX commented on GitHub (Mar 3, 2025): vllm中有个解决方案,可以参考这篇帖子https://github.com/vllm-project/vllm/issues/12468,我也正在做尝试
Author
Owner

@fjw1049 commented on GitHub (Mar 4, 2025):

R1要关闭think的话可以在tonkenize之后加上

<think>\n\n</think>

这样就不会思考了

请问能详细说下如何操作么

模型文件中有tokenizer_config.json ,chat_template , 最后添加\n\n就可以了

还是不行,是不是要在最后的assistant上加上\n\n?

<!-- gh-comment-id:2696782791 --> @fjw1049 commented on GitHub (Mar 4, 2025): > > > R1要关闭think的话可以在tonkenize之后加上 > > > ``` > > > <think>\n\n</think> > > > ``` > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 这样就不会思考了 > > > > > > 请问能详细说下如何操作么 > > 模型文件中有tokenizer_config.json ,chat_template , 最后添加\n\n就可以了 还是不行,是不是要在最后的assistant上加上<think>\n\n</think>?
Author
Owner

@houliangxue commented on GitHub (Mar 6, 2025):

R1要关闭think的话可以在tonkenize之后加上

<think>\n\n</think>
这样就不会思考了

请问能详细说下如何操作么

模型文件中有tokenizer_config.json ,chat_template , 最后添加\n\n就可以了

还是不行,是不是要在最后的assistant上加上\n\n?

不好意思,写错了,我复制的时候漏了,安图里面这样写
Image

<!-- gh-comment-id:2702859457 --> @houliangxue commented on GitHub (Mar 6, 2025): > > > > R1要关闭think的话可以在tonkenize之后加上 > > > > ``` > > > > <think>\n\n</think> > > > > 这样就不会思考了 > > > 请问能详细说下如何操作么 > > > > > > 模型文件中有tokenizer_config.json ,chat_template , 最后添加\n\n就可以了 > > 还是不行,是不是要在最后的assistant上加上\n\n? 不好意思,写错了,我复制的时候漏了,安图里面这样写 ![Image](https://github.com/user-attachments/assets/9492d352-14c1-4727-955e-4c1081f1a9bd)
Author
Owner

@cloudbeans commented on GitHub (Mar 7, 2025):

vllm启动的时候,可以用 --chat-template设置jinja模版,但是这样也限定了他要么开启思考,要么关闭思考,可以设置jinja模版,让它根据参数动态开关这个think,我是这么考虑的,但是还没与验证

<!-- gh-comment-id:2705408442 --> @cloudbeans commented on GitHub (Mar 7, 2025): vllm启动的时候,可以用 --chat-template设置jinja模版,但是这样也限定了他要么开启思考,要么关闭思考,可以设置jinja模版,让它根据参数动态开关这个think,我是这么考虑的,但是还没与验证
Author
Owner

@fjw1049 commented on GitHub (Mar 7, 2025):

确实可以这么做,感谢发自我的 iPhone在 2025年3月7日,11:00,cloudbeans @.> 写道:
vllm启动的时候,可以用 --chat-template设置jinja模版,但是这样也限定了他要么开启思考,要么关闭思考,可以设置jinja模版,让它根据参数动态开关这个think,我是这么考虑的,但是还没与验证—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you commented.Message ID: @.
>

cloudbeans left a comment (deepseek-ai/DeepSeek-R1#512)
vllm启动的时候,可以用 --chat-template设置jinja模版,但是这样也限定了他要么开启思考,要么关闭思考,可以设置jinja模版,让它根据参数动态开关这个think,我是这么考虑的,但是还没与验证

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you commented.Message ID: @.***>

<!-- gh-comment-id:2705798400 --> @fjw1049 commented on GitHub (Mar 7, 2025): 确实可以这么做,感谢发自我的 iPhone在 2025年3月7日,11:00,cloudbeans ***@***.***> 写道: vllm启动的时候,可以用 --chat-template设置jinja模版,但是这样也限定了他要么开启思考,要么关闭思考,可以设置jinja模版,让它根据参数动态开关这个think,我是这么考虑的,但是还没与验证—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you commented.Message ID: ***@***.***> cloudbeans left a comment (deepseek-ai/DeepSeek-R1#512) vllm启动的时候,可以用 --chat-template设置jinja模版,但是这样也限定了他要么开启思考,要么关闭思考,可以设置jinja模版,让它根据参数动态开关这个think,我是这么考虑的,但是还没与验证 —Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you commented.Message ID: ***@***.***>
Author
Owner

@Lizidong01 commented on GitHub (Mar 7, 2025):

其实在加载tokenizer之后更改template值也可以加一个判断就可以共存think和非think,我测试{{'<|Assistant|><think>\\n'}}{% endif %} 改成{{'<|Assistant|><think>\\n\\n</think>'}}{% endif %}改完之后就没有太大问题,具体情况没有细测,之所以这么改也是发现不think的时候他是这么输出的。

<!-- gh-comment-id:2706372245 --> @Lizidong01 commented on GitHub (Mar 7, 2025): 其实在加载tokenizer之后更改template值也可以加一个判断就可以共存think和非think,我测试`{{'<|Assistant|><think>\\n'}}{% endif %}` 改成`{{'<|Assistant|><think>\\n\\n</think>'}}{% endif %}`改完之后就没有太大问题,具体情况没有细测,之所以这么改也是发现不think的时候他是这么输出的。
Author
Owner

@victory-zz commented on GitHub (Mar 11, 2025):

R1要关闭think的话可以在tonkenize之后加上

<think>\n\n</think>
这样就不会思考了

请问能详细说下如何操作么

模型文件中有tokenizer_config.json ,chat_template , 最后添加\n\n就可以了

还是不行,是不是要在最后的assistant上加上\n\n?

不好意思,写错了,我复制的时候漏了,安图里面这样写 Image

这段东西是加在哪里的,messages里面吗?

<!-- gh-comment-id:2714714780 --> @victory-zz commented on GitHub (Mar 11, 2025): > > > > > R1要关闭think的话可以在tonkenize之后加上 > > > > > ``` > > > > > <think>\n\n</think> > > > > > 这样就不会思考了 > > > > > ``` > > > > > 请问能详细说下如何操作么 > > > > > > > > > 模型文件中有tokenizer_config.json ,chat_template , 最后添加\n\n就可以了 > > > > > > 还是不行,是不是要在最后的assistant上加上\n\n? > > 不好意思,写错了,我复制的时候漏了,安图里面这样写 ![Image](https://github.com/user-attachments/assets/9492d352-14c1-4727-955e-4c1081f1a9bd) 这段东西是加在哪里的,messages里面吗?
Author
Owner

@victory-zz commented on GitHub (Mar 11, 2025):

其实在加载tokenizer之后更改template值也可以加一个判断就可以共存think和非think,我测试{{'<|Assistant|><think>\\n'}}{% endif %} 改成{{'<|Assistant|><think>\\n\\n</think>'}}{% endif %}改完之后就没有太大问题,具体情况没有细测,之所以这么改也是发现不think的时候他是这么输出的。

大佬这个tokenizer指的是哪里的,我是通过response = client.chat.completions.create(
model="deepseek-r1:14b",
messages=[
{"role": "system", "content": "You are a helpful assistant"},
{"role": "user", "content": "Hello"},
],
stream=False
)与大模型交互的,想要实现可以开启深度思索和禁用深度思索,还能接入联网搜索的功能。

<!-- gh-comment-id:2714750558 --> @victory-zz commented on GitHub (Mar 11, 2025): > 其实在加载tokenizer之后更改template值也可以加一个判断就可以共存think和非think,我测试`{{'<|Assistant|><think>\\n'}}{% endif %}` 改成`{{'<|Assistant|><think>\\n\\n</think>'}}{% endif %}`改完之后就没有太大问题,具体情况没有细测,之所以这么改也是发现不think的时候他是这么输出的。 大佬这个tokenizer指的是哪里的,我是通过response = client.chat.completions.create( model="deepseek-r1:14b", messages=[ {"role": "system", "content": "You are a helpful assistant"}, {"role": "user", "content": "Hello"}, ], stream=False )与大模型交互的,想要实现可以开启深度思索和禁用深度思索,还能接入联网搜索的功能。
Author
Owner

@Lizidong01 commented on GitHub (Mar 11, 2025):

其实在加载tokenizer之后更改template值也可以加一个判断就可以共存think和非think,我测试{{'<|Assistant|><think>\\n'}}{% endif %} 改成{{'<|Assistant|><think>\\n\\n</think>'}}{% endif %}改完之后就没有太大问题,具体情况没有细测,之所以这么改也是发现不think的时候他是这么输出的。

大佬这个tokenizer指的是哪里的,我是通过response = client.chat.completions.create(
model="deepseek-r1:14b",
messages=[
{"role": "system", "content": "You are a helpful assistant"},
{"role": "user", "content": "Hello"},
],
stream=False
)与大模型交互的,想要实现可以开启深度思索和禁用深度思索,还能接入联网搜索的功能。

这个需要在模型接口处调整,仅仅使用 api 的话不能用 chat 那个,可以自己把 messages 拼成对话的样式传给模型,不知道描述的清不清楚😵‍💫

<!-- gh-comment-id:2715973834 --> @Lizidong01 commented on GitHub (Mar 11, 2025): > > 其实在加载tokenizer之后更改template值也可以加一个判断就可以共存think和非think,我测试`{{'<|Assistant|><think>\\n'}}{% endif %}` 改成`{{'<|Assistant|><think>\\n\\n</think>'}}{% endif %}`改完之后就没有太大问题,具体情况没有细测,之所以这么改也是发现不think的时候他是这么输出的。 > > 大佬这个tokenizer指的是哪里的,我是通过response = client.chat.completions.create( > model="deepseek-r1:14b", > messages=[ > {"role": "system", "content": "You are a helpful assistant"}, > {"role": "user", "content": "Hello"}, > ], > stream=False > )与大模型交互的,想要实现可以开启深度思索和禁用深度思索,还能接入联网搜索的功能。 > 这个需要在模型接口处调整,仅仅使用 api 的话不能用 chat 那个,可以自己把 messages 拼成对话的样式传给模型,不知道描述的清不清楚😵‍💫
Author
Owner

@run-197 commented on GitHub (Mar 12, 2025):

其实在加载tokenizer之后更改template值也可以加一个判断就可以共存think和非think,我测试{{'<|Assistant|><think>\\n'}}{% endif %} 改成{{'<|Assistant|><think>\\n\\n</think>'}}{% endif %}改完之后就没有太大问题,具体情况没有细测,之所以这么改也是发现不think的时候他是这么输出的。

大佬这个tokenizer指的是哪里的,我是通过response = client.chat.completions.create( model="deepseek-r1:14b", messages=[ {"role": "system", "content": "You are a helpful assistant"}, {"role": "user", "content": "Hello"}, ], stream=False )与大模型交互的,想要实现可以开启深度思索和禁用深度思索,还能接入联网搜索的功能。

模型文件里有tokenizer_config.json这个文件,改一下"chat_template"这一项的值。不过感觉这不是个很好的解决办法,我用QWQ测试的时候只有第一次可以跳过,后面模型还是会强行再生成think的内容

<!-- gh-comment-id:2717114247 --> @run-197 commented on GitHub (Mar 12, 2025): > > 其实在加载tokenizer之后更改template值也可以加一个判断就可以共存think和非think,我测试`{{'<|Assistant|><think>\\n'}}{% endif %}` 改成`{{'<|Assistant|><think>\\n\\n</think>'}}{% endif %}`改完之后就没有太大问题,具体情况没有细测,之所以这么改也是发现不think的时候他是这么输出的。 > > 大佬这个tokenizer指的是哪里的,我是通过response = client.chat.completions.create( model="deepseek-r1:14b", messages=[ {"role": "system", "content": "You are a helpful assistant"}, {"role": "user", "content": "Hello"}, ], stream=False )与大模型交互的,想要实现可以开启深度思索和禁用深度思索,还能接入联网搜索的功能。 模型文件里有tokenizer_config.json这个文件,改一下"chat_template"这一项的值。不过感觉这不是个很好的解决办法,我用QWQ测试的时候只有第一次可以跳过,后面模型还是会强行再生成think的内容
Author
Owner

@Lizidong01 commented on GitHub (Mar 14, 2025):

其实在加载tokenizer之后更改template值也可以加一个判断就可以共存think和非think,我测试{{'<|Assistant|><think>\\n'}}{% endif %} 改成{{'<|Assistant|><think>\\n\\n</think>'}}{% endif %}改完之后就没有太大问题,具体情况没有细测,之所以这么改也是发现不think的时候他是这么输出的。

大佬这个tokenizer指的是哪里的,我是通过response = client.chat.completions.create( model="deepseek-r1:14b", messages=[ {"role": "system", "content": "You are a helpful assistant"}, {"role": "user", "content": "Hello"}, ], stream=False )与大模型交互的,想要实现可以开启深度思索和禁用深度思索,还能接入联网搜索的功能。

模型文件里有tokenizer_config.json这个文件,改一下"chat_template"这一项的值。不过感觉这不是个很好的解决办法,我用QWQ测试的时候只有第一次可以跳过,后面模型还是会强行再生成think的内容

应该不会吧,但我没有具体测试过,用了几个简单的问题没发现有什么太大的异常,但是我的template最后改成了<think>\\n\\n</think>\\n\\n。

<!-- gh-comment-id:2723093012 --> @Lizidong01 commented on GitHub (Mar 14, 2025): > > > 其实在加载tokenizer之后更改template值也可以加一个判断就可以共存think和非think,我测试`{{'<|Assistant|><think>\\n'}}{% endif %}` 改成`{{'<|Assistant|><think>\\n\\n</think>'}}{% endif %}`改完之后就没有太大问题,具体情况没有细测,之所以这么改也是发现不think的时候他是这么输出的。 > > > > > > 大佬这个tokenizer指的是哪里的,我是通过response = client.chat.completions.create( model="deepseek-r1:14b", messages=[ {"role": "system", "content": "You are a helpful assistant"}, {"role": "user", "content": "Hello"}, ], stream=False )与大模型交互的,想要实现可以开启深度思索和禁用深度思索,还能接入联网搜索的功能。 > > 模型文件里有tokenizer_config.json这个文件,改一下"chat_template"这一项的值。不过感觉这不是个很好的解决办法,我用QWQ测试的时候只有第一次可以跳过,后面模型还是会强行再生成think的内容 应该不会吧,但我没有具体测试过,用了几个简单的问题没发现有什么太大的异常,但是我的template最后改成了`<think>\\n\\n</think>\\n\\n`。
Author
Owner

@fjw1049 commented on GitHub (Mar 17, 2025):

其实在加载tokenizer之后更改template值也可以加一个判断就可以共存think和非think,我测试{{'<|Assistant|><think>\\n'}}{% endif %} 改成{{'<|Assistant|><think>\\n\\n</think>'}}{% endif %}改完之后就没有太大问题,具体情况没有细测,之所以这么改也是发现不think的时候他是这么输出的。

大佬这个tokenizer指的是哪里的,我是通过response = client.chat.completions.create( model="deepseek-r1:14b", messages=[ {"role": "system", "content": "You are a helpful assistant"}, {"role": "user", "content": "Hello"}, ], stream=False )与大模型交互的,想要实现可以开启深度思索和禁用深度思索,还能接入联网搜索的功能。

需要在chat_template修改\n\n和\n设置不思考和思考,然后修改一下openai的源码,加入chat_template这个参数就可以实现代码控制了。。。但是感觉这个不是最好的办法,至少在代码部分能够实现这个效果。。。不推荐,到时候等待vllm会更新吧

<!-- gh-comment-id:2728055786 --> @fjw1049 commented on GitHub (Mar 17, 2025): > > 其实在加载tokenizer之后更改template值也可以加一个判断就可以共存think和非think,我测试`{{'<|Assistant|><think>\\n'}}{% endif %}` 改成`{{'<|Assistant|><think>\\n\\n</think>'}}{% endif %}`改完之后就没有太大问题,具体情况没有细测,之所以这么改也是发现不think的时候他是这么输出的。 > > 大佬这个tokenizer指的是哪里的,我是通过response = client.chat.completions.create( model="deepseek-r1:14b", messages=[ {"role": "system", "content": "You are a helpful assistant"}, {"role": "user", "content": "Hello"}, ], stream=False )与大模型交互的,想要实现可以开启深度思索和禁用深度思索,还能接入联网搜索的功能。 需要在chat_template修改<think>\n\n</think>和<think>\n设置不思考和思考,然后修改一下openai的源码,加入chat_template这个参数就可以实现代码控制了。。。但是感觉这个不是最好的办法,至少在代码部分能够实现这个效果。。。不推荐,到时候等待vllm会更新吧
Author
Owner

@wangych commented on GitHub (Mar 19, 2025):

其实在加载tokenizer之后更改template值也可以加一个判断就可以共存think和非think,我测试{{'<|Assistant|><think>\\n'}}{% endif %} 改成{{'<|Assistant|><think>\\n\\n</think>'}}{% endif %}改完之后就没有太大问题,具体情况没有细测,之所以这么改也是发现不think的时候他是这么输出的。

大佬这个tokenizer指的是哪里的,我是通过response = client.chat.completions.create(
model="deepseek-r1:14b",
messages=[
{"role": "system", "content": "You are a helpful assistant"},
{"role": "user", "content": "Hello"},
],
stream=False
)与大模型交互的,想要实现可以开启深度思索和禁用深度思索,还能接入联网搜索的功能。

这个需要在模型接口处调整,仅仅使用 api 的话不能用 chat 那个,可以自己把 messages 拼成对话的样式传给模型,不知道描述的清不清楚😵‍💫

@Lizidong01 大神可以贴一下改动的相关代码吗 正要用R1蒸馏qwen的模型,也是希望能在对话时控制用不用think,兼容不同的场景使用

<!-- gh-comment-id:2735262001 --> @wangych commented on GitHub (Mar 19, 2025): > > > 其实在加载tokenizer之后更改template值也可以加一个判断就可以共存think和非think,我测试`{{'<|Assistant|><think>\\n'}}{% endif %}` 改成`{{'<|Assistant|><think>\\n\\n</think>'}}{% endif %}`改完之后就没有太大问题,具体情况没有细测,之所以这么改也是发现不think的时候他是这么输出的。 > > > > > > 大佬这个tokenizer指的是哪里的,我是通过response = client.chat.completions.create( > > model="deepseek-r1:14b", > > messages=[ > > {"role": "system", "content": "You are a helpful assistant"}, > > {"role": "user", "content": "Hello"}, > > ], > > stream=False > > )与大模型交互的,想要实现可以开启深度思索和禁用深度思索,还能接入联网搜索的功能。 > > 这个需要在模型接口处调整,仅仅使用 api 的话不能用 chat 那个,可以自己把 messages 拼成对话的样式传给模型,不知道描述的清不清楚😵‍💫 @Lizidong01 大神可以贴一下改动的相关代码吗 正要用R1蒸馏qwen的模型,也是希望能在对话时控制用不用think,兼容不同的场景使用
Author
Owner

@KeepYourear commented on GitHub (Mar 31, 2025):

ollama运行的模型的话,在.ollama\models\manifests\registry.ollama.ai\library\deepseek-r1目录下的配置文件的

Image

这个后面加"options": {"verbose": false,"repeat_penalty": 1.0,"seed": -1},
然后保存,重启模型

<!-- gh-comment-id:2765813108 --> @KeepYourear commented on GitHub (Mar 31, 2025): ollama运行的模型的话,在.ollama\models\manifests\registry.ollama.ai\library\deepseek-r1目录下的配置文件的 ![Image](https://github.com/user-attachments/assets/f4946ddf-6e1c-4a6c-b15f-70b81acf7650) 这个后面加"options": {"verbose": false,"repeat_penalty": 1.0,"seed": -1}, 然后保存,重启模型
Author
Owner

@victory-zz commented on GitHub (Apr 1, 2025):

这种方式,支持前端页面有按钮,可以开启或关闭思考模式的嘛

1292512755
@.***

<!-- gh-comment-id:2768165595 --> @victory-zz commented on GitHub (Apr 1, 2025): 这种方式,支持前端页面有按钮,可以开启或关闭思考模式的嘛 1292512755 ***@***.***
Author
Owner

@mc112611 commented on GitHub (Apr 2, 2025):

其实在加载tokenizer之后更改template值也可以加一个判断就可以共存think和非think,我测试{{'<|Assistant|><think>\\n'}}{% endif %} 改成{{'<|Assistant|><think>\\n\\n</think>'}}{% endif %}改完之后就没有太大问题,具体情况没有细测,之所以这么改也是发现不think的时候他是这么输出的。

大佬这个tokenizer指的是哪里的,我是通过response = client.chat.completions.create( model="deepseek-r1:14b", messages=[ {"role": "system", "content": "You are a helpful assistant"}, {"role": "user", "content": "Hello"}, ], stream=False )与大模型交互的,想要实现可以开启深度思索和禁用深度思索,还能接入联网搜索的功能。

模型文件里有tokenizer_config.json这个文件,改一下"chat_template"这一项的值。不过感觉这不是个很好的解决办法,我用QWQ测试的时候只有第一次可以跳过,后面模型还是会强行再生成think的内容

因为,多轮对话里还有一个think开关,没有关掉。
解决方案:

第一步:删除 <think> 生成逻辑

在你的 Jinja2 代码里,找到 生成 <think> 的地方(通常在最后),它可能是这样:
{% if add_generation_prompt and not ns.is_tool %}{{'<|Assistant|><think>\\n'}}{% endif %}

修改为:
{% if add_generation_prompt and not ns.is_tool %}{{'<|Assistant|>'}}{% endif %}

第二步:去掉 message['content'] 里的 <think>

找到:
{% set content = content.split('</think>')[-1] %}

修改为:
{% set content = message['content'].replace('</think>', '').split('<think>')[-1] %}

然后确保 最终的输出部分:

{{'<|Assistant|>' + content + '<|end▁of▁sentence|>'}}
这样,即使模型 自己生成了 ...,也会在模板层面去掉。

如果找起来很麻烦,可以先把jinja2模板格式化输出一下会更方便寻找哦。

<!-- gh-comment-id:2770976655 --> @mc112611 commented on GitHub (Apr 2, 2025): > > > 其实在加载tokenizer之后更改template值也可以加一个判断就可以共存think和非think,我测试`{{'<|Assistant|><think>\\n'}}{% endif %}` 改成`{{'<|Assistant|><think>\\n\\n</think>'}}{% endif %}`改完之后就没有太大问题,具体情况没有细测,之所以这么改也是发现不think的时候他是这么输出的。 > > > > > > 大佬这个tokenizer指的是哪里的,我是通过response = client.chat.completions.create( model="deepseek-r1:14b", messages=[ {"role": "system", "content": "You are a helpful assistant"}, {"role": "user", "content": "Hello"}, ], stream=False )与大模型交互的,想要实现可以开启深度思索和禁用深度思索,还能接入联网搜索的功能。 > > 模型文件里有tokenizer_config.json这个文件,改一下"chat_template"这一项的值。不过感觉这不是个很好的解决办法,我用QWQ测试的时候只有第一次可以跳过,后面模型还是会强行再生成think的内容 因为,多轮对话里还有一个think开关,没有关掉。 解决方案: ### 第一步:删除 `<think> `生成逻辑 在你的 Jinja2 代码里,找到 生成` <think>` 的地方(通常在最后),它可能是这样: `{% if add_generation_prompt and not ns.is_tool %}{{'<|Assistant|><think>\\n'}}{% endif %}` 修改为: `{% if add_generation_prompt and not ns.is_tool %}{{'<|Assistant|>'}}{% endif %}` ### 第二步:去掉 `message['content']` 里的 `<think>` 找到: `{% set content = content.split('</think>')[-1] %}` 修改为: `{% set content = message['content'].replace('</think>', '').split('<think>')[-1] %}` ### 然后确保 最终的输出部分: `{{'<|Assistant|>' + content + '<|end▁of▁sentence|>'}}` 这样,即使模型 自己生成了 <think>...</think>,也会在模板层面去掉。 如果找起来很麻烦,可以先把jinja2模板格式化输出一下会更方便寻找哦。
Author
Owner

@github-actions[bot] commented on GitHub (May 22, 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:2899546242 --> @github-actions[bot] commented on GitHub (May 22, 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!
Author
Owner

@github-actions[bot] commented on GitHub (Jul 14, 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:3067418092 --> @github-actions[bot] commented on GitHub (Jul 14, 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!
Author
Owner

@github-actions[bot] commented on GitHub (Jul 28, 2025):

false

<!-- gh-comment-id:3124818191 --> @github-actions[bot] commented on GitHub (Jul 28, 2025): false
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#411
No description provided.