qwen3 中文文档 下载 App

Qwen3 思考输出太长或失控 — 限制思考链长度和内容

症状

原因

解决方案

1. 硬限制思考 token 数

在 SGLang 中可以设置 max_thinking_tokens:

"extra_body": {
    "thinking": {
        "type": "auto",
        "max_thinking_tokens": 4096  # 最多思考 4096 token
    }
}

超出这个限制后模型会强制输出答案(即使没思考完)。

2. 用非思考模式

如果思考模式经常失控,直接关掉:

text = tokenizer.apply_chat_template(
    messages, enable_thinking=False
)

3. 在 prompt 中引导

明确告诉模型思考的边界:

请在思考时保持简洁,不要超过 10 个步骤。

或者如果不需要思考直接:

/no_think 直接给答案,不要思考过程。

4. 限制 max_new_tokens

同时限制总输出长度:

model.generate(**inputs, max_new_tokens=2048)  # 思考+答案总共不超过 2048

5. 清理历史对话

多轮对话中累积太长的历史会让模型行为异常:

# 定期重置对话
if len(messages) > 20:
    messages = messages[-10:]  # 只保留最近 10 条

6. 正确解析思考内容

如果你是在做程序化调用,正确分离思考链和答案:

import re

def split_thinking(text):
    """分离思考链和最终答案"""
    think_match = re.search(r'<think>(.*?)</think>', text, re.DOTALL)
    if think_match:
        thinking = think_match.group(1)
        answer = re.sub(r'<think>.*?</think>', '', text, flags=re.DOTALL).strip()
        return thinking, answer
    return None, text

常见"思考失控"场景

场景解决方案
数学题反复算不对限制思考 token 上限,或换非思考试
复杂编程调试限制思考 token,或分步让模型做
多 Agent 循环限制 max_steps
长对话后期清理历史重新开始

相关阅读