Kimi K3 的技术博客里,有一个很容易被忽略、但很关键的细节:

K3 对「思考历史」极度敏感。harness 如果没有完整传回之前的 thinking 内容,生成质量会严重不稳定。

原文大致写了两个触发条件:

  1. harness 没有完整回传历史 thinking 内容
  2. 会话中途从别的模型切换到 K3

博客对原因也做了解释。大多数 reasoning 模型,比如 Claude 的 extended thinking、OpenAI 的 o 系列,默认假设是:thinking 是一次性草稿纸。生成完就完成使命了,下一轮不一定需要原样保留。有服务商在服务端加密保存,有的直接允许客户端丢弃。模型训练时,就没指望「未来轮次还能看到这段草稿」。

K3 不是这样训练的。

它是在「每一轮都把之前所有轮次的完整 thinking 摆在上下文里」这个条件下训练出来的。thinking 对 K3 不是草稿纸,而是这个模型认知链条里永久的一部分。它的行为模式,建立在「我永远能看到自己之前想了什么」这个假设之上。

为什么 thinking 不能像 tool result 那样裁

这里有个很有意思的对比,可以类比 agent 上下文里的 tool result 裁剪。

tool result 之所以能被相对安全地裁剪,是因为它读完之后,语义会被显式表达进下一轮的可见回复里。原文没了,但结论已经「抄」到别处留下来了。

thinking 不是这样。

thinking block 里的推理过程,大部分时候不会被完整翻译进最终的可见回复。可见回复往往只是 thinking 里那条推理链的一个结论摘要。中间的探索、排除、纠错过程,只存在于 thinking 本身。

裁掉这部分,模型下一轮拿到的不是「浓缩后的知识」,而是真的丢了一段计算过程。它自己也不知道自己之前想过什么、排除过什么、纠正过什么。

这就是为什么后果是 “quality highly unstable”,而不是「效率下降」。

这不是 KV cache miss 那种成本问题,是模型拿到的信息本身就不完整了,是正确性问题。

从别的模型切过来,也不行

第二个触发条件更有意思。

从别的模型切到 K3,即使把 thinking 内容原样传过去,质量也会不稳定。

因为 K3 训练时看到的历史 thinking,全都是它自己生成的、符合自己训练分布的推理风格。换一个模型生成的 thinking,哪怕格式一样,推理模式和措辞习惯都不同。K3 把这段陌生风格的历史当成自己的思考去续写,容易接不上。

对做 harness 的人意味着什么

对做 agent harness 的人来说,这意味着两件事。

一是不能对 K3 用和别的模型一样的上下文压缩策略。thinking 这部分几乎不能裁。

二是模型路由天然跟 K3 冲突。简单任务用便宜模型、复杂步骤再切强模型,这种常见做法在 K3 上会出问题,因为它没有「接手一个陌生会话」的能力。

模型开源了,但用好它,几乎绑死了兼容的官方 harness。

这大概也是为什么官方会特别推荐 Kimi Code,并建议不要在会话中途切到 K3。

不是模型不够强,是它把「完整可见的自我思考历史」写进了训练假设里。这个假设一旦被 harness 破坏,表现就会立刻塌掉。