关于 nowait-reasoning-optimizer
NOWAIT Reasoning Optimizer 是一种面向受支持推理模型的免训练推理时技术。它在生成时抑制选定的自我反思词元,以缩短推理轨迹;效果因模型而异,蒸馏模型存在局限。
主要功能
- 01解码时抑制反思词元
- 02将关键词扩展为分词器变体
- 03接入 Transformers 生成流程
- 04接入 vLLM 采样流程
- 05按模型领域调整关键词
适用场景
- 01降低推理任务的推理延迟
- 02减少生产环境中的词元用量
- 03精简冗长的思维链输出
- 04在受支持模型上测试词元抑制
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ davila7/ claude-code-templates --skill nowait-reasoning-optimizer安装后在 Claude Code 中输入/nowait-reasoning-optimizer确认已加载。
附带文件refrences/keywords.mdscripts/nowait_processor.py
详细介绍
NOWAIT 推理优化器
实现论文 "Wait, We Don't Need to 'Wait'! Removing Thinking Tokens Improves Reasoning Efficiency"(Wang et al., 2025)中的 NOWAIT 技术。
概述
NOWAIT 是一种免训练的推理时干预方法,在生成过程中抑制自我反思 token(例如 "Wait"、"Hmm"、"Alternatively"),将思维链(CoT)轨迹长度减少 27-51%,同时不损害模型效用。
适用场景
- 在算力有限的情况下部署 R1 风格的推理模型
- 降低生产系统的推理延迟
- 优化推理任务的 token 成本
- 处理需要精简的冗长 CoT 输出
支持的模型
| 模型系列 | 类型 | Token 减少比例 |
|---|---|---|
| QwQ-32B | 基于 RL | 16-31% |
| Phi4-Reasoning-Plus | 基于 RL | 23-28% |
| Qwen3-32B | 基于 RL | 13-16% |
| Kimi-VL-A3B | 多模态 | 40-60% |
| QvQ-72B-Preview | 多模态 | 20-30% |
重要:NOWAIT 在基于 RL 的模型上效果最佳。蒸馏模型(Qwen3-4B/8B/14B)在抑制反思 token 后性能会下降。
快速开始
1. 基本实现
from scripts.nowait_processor import NOWAITLogitProcessor
# Initialize processor for your model's tokenizer
processor = NOWAITLogitProcessor(tokenizer)
# Use during generation
outputs = model.generate(
inputs,
logits_processor=[processor],
max_new_tokens=32768
)
2. 被抑制的关键词
完整列表见 references/keywords.md。核心关键词:
wait, alternatively, hmm, but, however, check,
double-check, maybe, verify, again, oh, ah
工作原理
- 初始化关键词:通过实证分析识别反思关键词
- 扩展为 token 变体:将关键词映射到词表中的所有 token 变体(例如 "wait" → " wait"、"Wait"、" Wait"、".wait"、"WAIT")
- 推理时抑制:在解码过程中将反思 token 的 logits 设置为很大的负值
Logits (Before) Logits (After)
Wait 0.8 → Wait -inf
First 0.6 → First 0.6
Hmm 0.5 → Hmm -inf
Let 0.4 → Let 0.4
主要发现
为什么有效
- NOWAIT 并不会完全消除自我反思——它引导模型跳过不必要的"等待"推理
- 模型仍会在关键决策点执行必要的验证
- 从而产生更线性、更直接的推理路径
RL 模型与蒸馏模型
| 模型类型 | NOWAIT 效果 | 建议 |
|---|---|---|
| 基于 RL(QwQ、Phi4、Qwen3-32B) | 准确率稳定,token 显著减少 | ✅ 推荐 |
| 蒸馏模型(Qwen3-4B/8B/14B) | 在困难任务上准确率下降 | ⚠️ 谨慎使用 |
蒸馏模型严重依赖训练数据中的 CoT 结构——移除反思 token 会破坏其推理模式。
集成示例
HuggingFace Transformers
from transformers import AutoModelForCausalLM, AutoTokenizer
from scripts.nowait_processor import NOWAITLogitProcessor
model = AutoModelForCausalLM.from_pretrained("Qwen/QwQ-32B")
tokenizer = AutoTokenizer.from_pretrained("Qwen/QwQ-32B")
processor = NOWAITLogitProcessor(tokenizer)
response = model.generate(
tokenizer(prompt, return_tensors="pt").input_ids,
logits_processor=[processor],
max_new_tokens=32768,
do_sample=True,
temperature=0.7
)
vLLM
from vllm import LLM, SamplingParams
from scripts.nowait_processor import get_nowait_bad_words_ids
llm = LLM(model="Qwen/QwQ-32B")
bad_words_ids = get_nowait_bad_words_ids(llm.get_tokenizer())
sampling_params = SamplingParams(
max_tokens=32768,
bad_words_ids=bad_words_ids
)
预期结果
| 任务类型 | 原始 Token 数 | NOWAIT Token 数 | 减少比例 |
|---|---|---|---|
| 数学(AIME) | 15,000 | 10,500 | 30% |
| 视觉问答(MMMU) | 2,900 | 1,450 | 50% |
| 视频问答(MMVU) | 1,700 | 1,250 | 27% |
局限性
- 在 CoT 开销本就很小的非常简单的问题上效果较差
- 蒸馏模型在具有挑战性的任务上可能损失准确率
- 某些领域可能需要针对模型调整关键词
参考文献
- 论文:arXiv:2506.08343v2
- 完整关键词列表:
references/keywords.md - 实现:
scripts/nowait_processor.py
评论
支持 Markdown