一般

什么是推理

1
分类技术博客
来源跳转
发表时间

内容

几周前,有人分享了一篇论文,展示了如何从闭源权重模型中提取推理轨迹。再加上网上关于如何诱骗模型泄露这些轨迹的讨论,我出于好奇进一步研究了一番。Twitter 上似乎充斥着关于其工作原理的半真半假和混乱说法,所以也许这篇文章能帮助一些人理解到底发生了什么。

隐藏轨迹

推理轨迹通常对我们是隐藏的。我们曾对此感到遗憾,但大多也只能接受。幸运的是,开源权重模型会把它们展示出来,而且从它们的行为可以看出,这些轨迹可能很长、也很混乱。这大概也是把它们与通常展示给用户的内容分开的一个好理由。

至少,UI 需要能够检测到它们。业界一直很擅长把推理轨迹说得神秘又特殊,但它们本质上只是文本:模型被训练成在最终答案之前,先把自己的思考过程作为响应的一部分输出到一个草稿区(scratchpad)里。

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 预算,这让人感觉它像是采样过程的一个属性。实际上,推理力度是写进系统提示词里的。GPT-OSS 把它放在系统提示词中:

Reasoning: low

就这样。训练会产生相应的行为,比如输出切换到 analysis 通道的 token 序列。这也解释了为什么更改力度会使 KV cache 失效。我觉得闭源 GPT 模型把推理力度叫做“juice”,因为你可以问大多数模型它们还有多少 juice。

DwarfStar 里,针对 DeepSeek 的最大推理模式,会把下面这段内容加入系统提示词:

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 工具里,并将自己的想法回显到 /dev/null

所以从某种意义上说,对某些模型而言,唯一的“特殊”行为其实是不思考。有时这会通过“机械地”移除模型原本的思考方式来实现。在 DwarfStar 中,禁用思考时会预填充 </think>,而启用思考时则使用 <think>,也就是结束和开始思考的 token。GPT-OSS 不会预填充,而是让模型自己决定走哪条路。

但推测某些推理 API 在启用推理时会预填充开头 token,因此模型不会自己采样它;而在禁用时,也可能因为这个 token 很容易被检测出来,从而阻止推理 token 的采样。这也许解释了为什么一个自定义 think 工具能诱骗模型把某些推理放到不该去的地方——但前提是原生推理被禁用。

有趣的事实:这篇博客文章触发了安全检查

说来好笑,我竟然没法用 GPT 5.6 terra 给这篇博客文章做拼写和语法检查,因为它触发了安全过滤器。最后不得不切换到 Kimi。

GPT-5.6-terra 拒绝为这篇博客文章检查拼写

评论

(0)
未配置登录方式
暂无评论