分数暴涨未必是能力变强:从 Astra 改 Qwen 权重看思考模型评测的截断与重复陷阱,附 5 项检查清单

分数暴涨未必是能力变强:从 Astra 改 Qwen 权重看思考模型评测的截断与重复陷阱,附 5 项检查清单

作者注:从 Astra 改写 Qwen3.5-0.8B 权重的实验复盘出发,讲清思考模型评测中“答错”与“没写完”的区别,以及按截断拆分结果的方法。

11 月 2 日,MIT CSAIL 的四位研究者发布博客《权重空间编程的火花》。文中称 GPT-6 Astra 只改动了 Qwen3.5-0.8B 约 0.016% 的参数,MATH-500 成绩就从 7.9% 涨到 48.1%,GSM8K 和 IFEval 也大幅上涨,随即被大量转发为“AI 改 AI 大脑”的标志性事件。

这不是要否定这项研究。研究的公开仓库里有 1,125 次调用的逐轮日志,媒体复盘时按逐题记录重新统计,得出的结论更朴素:分数上涨几乎全部来自“模型终于能把答案写完”,而不是“模型变得更会做数学”。

核心价值:本文不重复讨论 RSI 是否成立。我们把这次复盘整理成一套可复用的思考模型评测方法,帮助你在选型、调参或上线前判断:分数变化到底来自能力差异,还是来自重复循环导致的截断。

thinking-model-eval-truncation-repetition-trap-astra-qwen-image-0


思考模型评测事件核心信息速览

先把事件里与评测相关的关键事实集中列出来。以下数据均来自原博客和媒体对公开仓库的复盘。

信息项 详情
发布时间 2026 年 11 月 2 日,MIT CSAIL 研究者博客
被改模型 Qwen3.5-0.8B,改动 131,072 个权重,约占 0.016%
宣称成绩 MATH-500 7.9%→48.1%;GSM8K 13.8%→67.1%;IFEval 21.0%→62.3%
评测设置 思考模式开启,输出上限 32,768 token,温度 0.6
基线状态 约 93% 的回答写到上限仍未停止
修改后状态 撞到上限的比例从 93% 降到 33%
复盘结论 补丁主要修复了重复循环,没有提升数学能力

思考模型评测中的“截断”从哪里来

Astra 第一次让 Qwen 跑 96 道练习题,只答对 11 道。剩下的 85 道并非算错,而是全部写到长度上限还没停下来,截断文本尾部按八词片段统计,约 95% 是重复内容。那 11 道正常结束的题,全部答对了。

这说明基线成绩低的主因是“交不上卷”,而不是“不会做”。值得一提的是,研究者给 Astra 的第一轮提示词里,就把“被 token 上限截断,往往是在思考里重复自己”列为失败类型之一,并以“修好驱动重复的东西”作为有效改进的例子。Astra 的最终报告也写明,它瞄准的是重复,而不是数学知识。

thinking-model-eval-truncation-repetition-trap-astra-qwen-image-1


思考模型评测数据拆分:涨幅全部集中在截断题

复盘中最有说服力的,是一组 1,152 道留出练习题的修改前后配对测试。只要按“原本是否被截断”把题目分成两组,结论就非常清楚。

题目分组 题数 修改前正确率 修改后正确率 变化
原本能写完的题 114 93.9% 93.9% 无变化
原本被截断的题 1,038 1.4% 56.7% 全部涨幅来源
由错转对 579 — — 其中 576 道原本被截断
由对转错 5 — — 噪声量级

还有一个容易被忽略的细节:修改前“写完但答错”的题只有 7 道,修改后变成 245 道。循环停止之后,模型真实的计算错误才暴露出来。在正式的 MATH-500 上,平均作答长度从 30,868 token 降到 22,037 token,下降部分同样集中在原本撞到上限的回答上。

用对照模型验证思考模型评测结论

研究者自己也意识到了这一点,于是在 Gemma 3 270M 上做了同样的实验。两次实验的对比,正好说明“搬开障碍”和“增加能力”是两回事。

对比项 Qwen3.5-0.8B Gemma 3 270M
撞到上限的比例 约 93% 约 8.5%
主要失败类型 重复循环,写不完 算术错误、推理步骤不成立
改权重后 MATH-500 7.9%→48.1% 6.8%→最多 7.7%
改进性质 搬开挡住能力的障碍 几乎无法增加原本没有的能力

原博客正文也承认:改权重能搬开挡住能力的障碍,加不上模型没有的能力。对评测者来说,这句话的意义在于:同样的“分数大涨”,在不同的失败结构下含义完全不同。

thinking-model-eval-truncation-repetition-trap-astra-qwen-image-2


思考模型评测的参数陷阱:温度与思考开关

这次争议还有一个前提常被忽略:评测设置本身就容易诱发循环。复盘援引的 Qwen3.5-0.8B 官方模型卡信息,与研究者的实际设置存在差异。

参数项 模型卡说明 实验评测设置 影响
思考模式 0.8B 出厂默认关闭 强制开启 小模型更易陷入思考循环
温度(思考模式文本任务) 推荐 1.0 0.6 0.6 在模型卡中对应看图与写代码任务
循环处理建议 调整采样参数,流式输出及时截断 写到 32,768 token 上限 大量回答被判为失败

需要说明的是,以上模型卡内容来自媒体复盘的转述,建议你在评测前直接核对 Qwen 官方模型卡原文。这里要强调的是方法:同一个模型,换一组采样参数,“基线”就可能完全不同。如果基线本身是在易循环的设置下测出来的,任何让模型“停得下来”的改动都会显得像能力飞跃。


思考模型评测检查清单:先拆截断,再下结论

把这次复盘的教训抽象出来,可以得到一套适用于任何思考模型的评测流程。不管你是在选型、调参,还是验证某个微调或提示词改动,都可以按下表逐项核对。

检查项 具体做法 判定信号
1. 按截断拆分 统计 finish_reason == "length" 的比例,分组计算正确率 截断率高于 10% 时,总分不可直接比较
2. 检查重复率 对截断回答的尾部做 n-gram 重复统计 尾部重复率高,说明是循环而非推理过长
3. 核对采样参数 对照模型卡核对温度、top_p、思考开关 与官方推荐不一致时,要单独注明
4. 配对比较 修改前后逐题对照,统计由错转对和由对转错 涨幅若集中在截断组,属于“搬开障碍”
5. 横向对照 相同提示词与参数下加入低截断率的对照模型 对照模型不涨,说明改进不是能力提升

🎯 评测建议:做横向对照时,最麻烦的是为每家模型分别写一套调用代码。通过 API易 apiyi.com 的 OpenAI 兼容接口,可以用同一份脚本、同一组提示词和参数调用多家主流模型,方便把“截断率”作为固定统计列输出。

思考模型评测脚本:极简示例

下面的代码统计一批题目中被长度上限截断的比例。finish_reason 为 length 即表示撞到了 max_tokens:

import openai

client = openai.OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.apiyi.com/v1"  # API易 OpenAI 兼容接口
)

questions = ["计算 17 * 23 的结果", "求 1 到 100 的整数和"]
truncated = 0
for q in questions:
    r = client.chat.completions.create(
        model="your-thinking-model",  # 替换为实际模型名
        messages=[{"role": "user", "content": q}],
        max_tokens=4096,
    )
    if r.choices[0].finish_reason == "length":
        truncated += 1
print(f"截断率: {truncated / len(questions):.1%}")
查看完整实现代码(含分组正确率与尾部重复率)
import openai
from collections import Counter

client = openai.OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.apiyi.com/v1"
)

def tail_repetition_ratio(text: str, n: int = 8, tail_words: int = 400) -> float:
    """统计文本尾部 n-gram 的重复比例(中文可改为按字符切分)"""
    words = text.split()[-tail_words:]
    if len(words) < n * 2:
        return 0.0
    grams = [tuple(words[i:i + n]) for i in range(len(words) - n + 1)]
    counts = Counter(grams)
    repeated = sum(c for c in counts.values() if c > 1)
    return repeated / len(grams)

def evaluate(dataset, model, temperature, max_tokens, judge):
    """dataset: [(question, answer)], judge: 判断答案是否正确的函数"""
    stats = {"done": [0, 0], "truncated": [0, 0], "loop": 0}
    for q, ans in dataset:
        r = client.chat.completions.create(
            model=model,
            messages=[{"role": "user", "content": q}],
            temperature=temperature,
            max_tokens=max_tokens,
        )
        choice = r.choices[0]
        text = choice.message.content or ""
        group = "truncated" if choice.finish_reason == "length" else "done"
        stats[group][0] += 1
        stats[group][1] += int(judge(text, ans))
        if group == "truncated" and tail_repetition_ratio(text) > 0.5:
            stats["loop"] += 1

    for g in ("done", "truncated"):
        total, correct = stats[g]
        rate = correct / total if total else 0
        print(f"{g}: {total} 题,正确率 {rate:.1%}")
    t = stats["truncated"][0]
    print(f"截断题中疑似循环: {stats['loop']} / {t}")
    return stats

注意,不同模型开启或关闭思考模式的参数并不统一,有的通过请求字段控制,有的通过模型名区分,有的写在提示词模板里。思考内容是否计入 max_tokens、是否单独返回,也因模型而异,评测前务必逐一查阅对应文档。

🚀 快速上手:如果只是想先验证这套拆分方法,可以在 API易 apiyi.com 注册后用免费测试额度,挑两三个思考模型跑几十道题,先看截断率差异,再决定是否扩大评测规模。


思考模型评测事件的影响分析

对开发者的影响

  • 总分不再可信:只看总正确率,会把“没写完”和“答错”混为一谈。上线前的评测报告至少应包含截断率和分组正确率两列。
  • 调参的收益可能被误读:调高输出上限、调整温度或加入重复惩罚,都可能大幅提升分数,但这属于“搬开障碍”,不代表模型换了。
  • 生产环境同样受影响:评测中的截断在线上表现为响应超长、费用失控和用户等待。流式输出配合循环检测与提前截断,是模型卡本身给出的建议。

对模型评估研究的影响

  • “大幅提升”需要分解证据:这次复盘表明,一个看起来是能力飞跃的结果,按截断拆分后可能只是 bug 修复。今后任何针对小模型或思考模型的改进声明,都值得追问截断率变化。
  • 对照组设计更受重视:Gemma 3 270M 的补充实验,以及 Astra 自己做的随机方向对照(成绩只变动约 1.5 个百分点),都说明对照设计是区分真信号与噪声的关键。

常见问题 FAQ

Q1:什么是思考模型评测中的“截断陷阱”?

指模型在思考过程中陷入重复循环,一直写到 token 上限也没给出答案,被评测系统判为错误。此时低分反映的是“没写完”,而不是“不会做”。

Q2:截断导致的低分和能力不足导致的低分怎么区分?

把题目按是否撞到上限分成两组,分别计算正确率。如果写完的题正确率很高,截断组接近零分,问题就在循环;如果写完的题本身错误很多,才说明能力不足。Qwen 与 Gemma 的对比正好是这两种情况。

Q3:这次 Astra 改 Qwen 的实验是什么时候发布的?

原博客于 2026 年 11 月 2 日发布,媒体基于公开仓库日志的复盘文章发布于 11 月 5 日。本文数据以复盘为准,模型卡细节建议核对 Qwen 官方原文。

Q4:这套评测方法适合哪些场景?

– **模型选型**:比较不同思考模型在数学或代码任务上的表现
– **参数调优**:评估温度、上限、思考开关改动的真实效果
– **改进验证**:判断微调、提示词或权重编辑带来的是能力提升还是障碍移除

Q5:如何用统一接口对多个思考模型做横向评测?

1. 在 API易 apiyi.com 注册账号并获取 API Key
2. 将本文脚本的 base_url 设为 `https://api.apiyi.com/v1`
3. 固定提示词、温度和 max_tokens,只替换模型名,输出截断率与分组正确率

不同模型的思考开关写法不同,需要按各自文档调整请求参数。

Q6:这套拆分方法有哪些局限?

截断拆分只能识别“没写完”,无法判断写完的答案是否靠运气答对;尾部重复率阈值需要按语言和任务调整,中文文本建议按字符而非空格切分。此外,部分模型的思考内容不完整返回,需要结合 usage 中的 token 统计判断。如果预算有限,可以先在 API易 apiyi.com 用小样本试跑,确认统计口径后再扩大规模。


思考模型评测核心要点 Key Takeaways

  • 涨幅来源:Qwen 写完的 114 题前后都是 93.9%,涨幅全部来自截断题
  • 失败类型:基线 93% 的回答撞到上限,尾部约 95% 是重复内容
  • 参数差异:评测温度 0.6 与模型卡推荐的思考文本温度 1.0 不一致
  • 对照证据:Gemma 3 270M 截断率低,改权重后 MATH-500 仅提升不到 1 个百分点
  • 方法核心:先按 finish_reason 拆分截断,再比较正确率
  • 上手方式:用 API易 apiyi.com 统一接口,在相同参数下对多模型跑截断统计

总结

这次“Astra 改 Qwen 权重”的争议,给所有做思考模型评测的人提了个醒:

  1. 分数暴涨要先拆分:按是否撞到 token 上限分组,看涨幅来自哪一组
  2. 参数是基线的一部分:温度、思考开关和输出上限必须对照模型卡核实并写进报告
  3. 区分搬开障碍与增加能力:用低截断率的对照模型验证改进的真实性质

下次看到“某改动让成绩翻几倍”的结论时,先问一句:截断率变了多少?这一个问题,往往比总分更能说明真相。

如果你正准备对几款思考模型做上线前评测,推荐通过 API易 apiyi.com 用同一套脚本和参数跑一轮截断率统计,再决定选型方向。


📚 参考资料

  1. 硅星人 Pro 复盘文章(36氪转载):刷屏的「Astra 改造 Qwen 大脑」跟我们想要的 RSI 没多大关系
  2. 链接: 36kr.com/p/4056494372181124
  3. 说明: 基于公开仓库逐题记录重算的配对测试数据,本文核心数据来源

  4. MIT CSAIL 研究者博客:Sparks of Weight-Space Programming

  5. 说明: 实验原始描述与结果表,建议对照原文阅读实验 8 的设置

  6. Qwen3.5-0.8B 官方模型卡:采样参数与思考模式说明

  7. 说明: 核对思考模式默认状态、推荐温度及循环处理建议

作者: APIYI 技术团队
技术交流: 欢迎在 API易 官网 apiyi.com 联系我们,更多调用说明可访问 docs.apiyi.com 文档中心

类似文章