什么是推理
原文由 Armin Ronacher 于 发布,订阅该博客
几周前一篇论文被分享,展示了如何从闭源权重模型中提取推理轨迹。再加上网上关于诱导模型泄露这些轨迹的讨论,出于好奇,我也对此做了更深入的研究。推特上关于其原理的说法似乎半真半假、众说纷纭,或许这篇文章能帮助一些人理解究竟发生了什么。
隐藏轨迹
推理轨迹通常不会向我们展示。我们曾对此表示遗憾,但大多也只能接受。好在开源权重模型会公开这些轨迹,从它们的行为中可以看出,这些轨迹可能又长又混乱。这或许正是应该将其与通常呈现给用户的内容分开的好理由。
至少,界面需要能够识别它们。业界很擅长把推理轨迹包装得玄妙而特殊,但它们本质上只是文本:模型被训练成在给出最终答案之前,先把思考过程输出到一块草稿区,作为响应的一部分。
GPT-OSS 的 Harmony 响应格式让这一点一目了然:
<|channel|>analysis<|message|> I need to work this out ... <|end|><|start|>assistant<|channel|>final<|message|> The answer is ... <|return|>
这些标记是特殊 token,但夹在其中的推理过程所使用的“文本本身”与最终答案并无二致(只不过 GPT 的思维链文本听起来确实很有趣)。当模型采样到 analysis 通道 token 时,解析器会将随后的文本路由到一个独立的数据流中,并通过 Responses API 对外暴露。对于闭源模型,想必会由一个小模型来对其进行脱敏和总结。
推理强度
有多少预算会分配给推理?早期的 API 会暴露推理 token 的预算,让人以为这是采样过程的一个属性。实际上,推理强度是直接写在 system prompt 里的。GPT-OSS 就是这样在 system prompt 中设置的:
Reasoning: low
就这么简单。训练会产生相应的行为,例如输出切换到 analysis 通道的 token 序列。这也解释了为什么改变强度会导致 KV 缓存失效。我猜闭源的 GPT 模型把推理强度叫做“juice”,因为你可以问大多数模型它们还有多少 juice。
在面向 DeepSeek 的 DwarfStar 中,当推理强度调至最大时,会在 system prompt 中加入这样一段:
Reasoning Effort: Absolute maximum with no shortcuts permitted. You MUST be very thorough in your thinking and comprehensively decompose the problem to resolve the root cause, rigorously stress-testing your logic against all potential paths, edge cases, and adversarial scenarios.
别思考
因此,推理 token 的去向其实是一种习得的约定:模型被训练成不让草稿内容进入 final 通道。只要骗它以为自己正处于该通道,它就可能会泄露 token。我们甚至见过一些旧模型在禁用思考后,会把推理过程写进 bash 工具,并将其 echo 到 /dev/null。
所以在某种意义上,对某些模型而言,唯一的“特殊”行为就是不去思考。而这有时是通过“机械地”移除模型惯常的思考方式来实现的。在 DwarfStar 中,禁用思考时会预填充 </think>,而启用思考时则预填充 <think>,它们分别是结束和开始思考的 token。GPT-OSS 则不会预填充,而是让模型自行决定。
不过可以推测,一些推理 API 会在启用推理时预填充起始 token,这样模型本身就不会去采样这个 token;而在禁用时则会阻止对推理 token 的采样,因为这很容易被检测到。这或许可以解释为什么一个自定义的 think 工具能够诱使模型把一部分推理内容放到不该放的地方——但只有在原生推理被禁用的情况下才会奏效。
趣闻:这篇博文触发了安全检查
颇具讽刺的是,我本想用 GPT 5.6 terra 来为这篇博文做拼写和语法检查,却因为安全过滤而无法使用。只好改用了 Kimi。

随机一篇博客
评论
登录后参与讨论