mcpField
N
nowait-reasoning-optimizer

nowait-reasoning-optimizer

github.com/davila7开发33.0k438 次安装1 天前更新
代码仓库

关于 nowait-reasoning-optimizer

NOWAIT Reasoning Optimizer 是一种面向受支持推理模型的免训练推理时技术。它在生成时抑制选定的自我反思词元,以缩短推理轨迹;效果因模型而异,蒸馏模型存在局限。

主要功能

  1. 01解码时抑制反思词元
  2. 02将关键词扩展为分词器变体
  3. 03接入 Transformers 生成流程
  4. 04接入 vLLM 采样流程
  5. 05按模型领域调整关键词

适用场景

  1. 01降低推理任务的推理延迟
  2. 02减少生产环境中的词元用量
  3. 03精简冗长的思维链输出
  4. 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基于 RL16-31%
Phi4-Reasoning-Plus基于 RL23-28%
Qwen3-32B基于 RL13-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

工作原理

  1. 初始化关键词:通过实证分析识别反思关键词
  2. 扩展为 token 变体:将关键词映射到词表中的所有 token 变体(例如 "wait" → " wait"、"Wait"、" Wait"、".wait"、"WAIT")
  3. 推理时抑制:在解码过程中将反思 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,00010,50030%
视觉问答(MMMU)2,9001,45050%
视频问答(MMVU)1,7001,25027%

局限性

  • 在 CoT 开销本就很小的非常简单的问题上效果较差
  • 蒸馏模型在具有挑战性的任务上可能损失准确率
  • 某些领域可能需要针对模型调整关键词

参考文献

  • 论文:arXiv:2506.08343v2
  • 完整关键词列表:references/keywords.md
  • 实现:scripts/nowait_processor.py

评论

支持 Markdown