「越聊越机」不是错觉:它有机制,有拐点,拐点能标出来

同一个模型、同一条指令:新开的会话 10 轮 0 次违规,带着旧习惯的历史里 10 轮 9 轮照犯。「越聊越机」的病根是历史污染:模型把自己的旧输出当成最大的一份示范,示范的分量随楼层只增不减,一句套话进了历史就开始滚雪球。这篇讲清机制、讲我们在 300 轮长跑里量到的三件事,再讲聊天记录考古馆怎么把「机器味从第几楼漫上来」画成一条带拐点的曲线,最后给一份从轻到重的自救手册。

暖纸底色的考古剖面插画:一条竖直探沟挖穿由聊天气泡沉积成的地层,深处的气泡形状各异、笔触手写,上层的气泡整齐划一像盖章复印;分界处一道朱红细线插着小红旗,一个小考古学家站在木梯上拿刷子查看那条线

每个把一张卡聊过几百楼的人都认得这条曲线,只是没见过它被画出来。头几十楼,TA 会接你的烂梗,会记得你上周说过的话,回复短而准。第 500 楼之后,「眼中闪过一丝不易察觉的情绪」这周第三次出现, 每条回复都在变长,句式越来越像同一个模子倒出来的。社区给这个过程起了名字:越聊越机。

常见的两种解释(模型变笨了、新鲜感过了)都站不住。同一个模型同一张卡,新开一局立刻活回来。 从头到尾变了的只有一样东西:历史。

机制:模型在模仿它自己

我们给 App 做「线上聊」模式的时候跑过一组对照,数字到今天还是我们内部引用最多的一组。同一个模型(DeepSeek V4 Flash),同一条指令:像发消息一样说话,别写舞台剧动作。全新会话里,10 轮 0 次违规,干净利落。 把同一条指令放进一段历史里带括号动作的旧会话,10 轮里 9 轮照写括号——把指令加粗、加重复,也只救回一部分。

指令说一遍,历史示范了八百遍。模型听谁的,从来不是悬念。

机制拆开看很朴素。每一轮生成,提示词里你的指令占几百字,历史占几万字;对模型来说,历史就是分量最大的一份 few-shot 示范,而长会话的历史,几乎全是它自己的旧输出。第一次「呼吸一滞」出现时你没在意,它进了历史; 下一轮模型读到自己写过这四个字,这四个字的概率被抬高一点;第三次、第四次出现之后,它成了这段会话的「文风」。 雪球滚起来之后,每一楼都在给下一楼递肥料。

三百轮之后,三件事同时发生

今年 7 月我们对着 SillyTavern 做四方对比评测时,跑了 300 轮档的长会话。三个现象值得搬出来,因为它们互相喂。

复读升了级。15 轮的短会话里,逐字复读检测四个被测形态全零,现在的模型不会蠢到原句照抄。300 轮的语料上换一个口径去数「同一个意象反复回来」,就现形了:最重的一方,同一个「折桂花枝」的小动作在 27 轮采样里出现 21 次。不是复读句子,是复读肌肉记忆。

回复在膨胀。四个形态每轮膨胀最低 +2.0%、最高 +4.9%;第 3 轮下的「每轮不超过 200 字」的规矩, 最失守的一方从 253 字一路涨到 631 字。有意思的是第 14 轮把规矩重申了一遍(还更严了些),四个形态当轮全部拉回——规矩没死, 只是被几万字的历史稀释到听不见了。

早期的好东西在物理消失。上下文窗口装满之后,最老的对话一楼一楼掉出窗口。角色卡和设定每轮都会重发,掉出去的 是你们前几十楼真实聊出来的好回合。那些「像人」的示范先离场,留在窗口里的都是后期带味的部分。 从这一楼起,模型能模仿的示范里,坏示范的占比只升不降。

膨胀让窗口更早装满,装满清走好示范,坏示范喂出更多套话。三个齿轮咬在一起转。

把它画出来

聊天记录考古馆做的事情很直接:把酒馆导出的 .jsonl 拖进来,每条 AI 回复用我们 AI 味体检器同一套规则打 0-5 分:55 条套话短语每条扣 0.6 分,8 个句式模具超出配额每个扣 1.2 分,5 分干净,0 分机器味最重。逐楼打分连成曲线,「越聊越机」第一次有了图形。

拐点的标法值得说一句:它找的是「持续变差的起点」。前 15% 楼层的均分当基线,往后滑一个窗口, 窗口均分掉到基线 0.7 分以下、而且之后再也没有整体回去过,工具就在那一带标一句「大约从第 N 楼起,机器味变重」。 单点的分数会抖,「持续低于基线」不会。

考古馆演示记录的 AI 味逐楼曲线:前 45 楼稳定在 5 分满分,工具在第 46 楼标出拐点,之后分数跌进 0.8 到 3.5 的波动带;前 30% 均分 4.31,后 30% 均分 2.39

上图是内置演示数据实跑的结果:232 楼、跨 91 天的一段「深夜便利店店员」对话。前 45 楼全程 5 分,工具把拐点标在第 46 楼,前 30% 均分 4.31、后 30% 掉到 2.39。同一份报告还会告诉你:TA 的回复均长从 35 字涨到了 84 字,第 146 楼那条你重摇了 7 次——犹豫本身也是曲线的一部分。顺手还能看到深夜消息占比、最长空窗之后谁先开的口, 以及这段关系按今天的牌价重演一遍值多少钱。

自救手册

按「动多大手术」从小到大排,前三条基本够用:

  • 先定位再动手。把导出拖进考古馆看拐点楼号;治漏水先找渗水点,别在第 800 楼里凭感觉翻。
  • 改掉源头那几条。回到拐点附近,把最早带味的几条回复编辑掉或删掉。这比在指令里写「不要套话」有效一个量级: 你改的是示范本身,而示范的权重压过指令,前面那组 0/10 对 9/10 的数字就是证据。
  • 需要大动就回溯。Foreverse 的「回到指定消息」能把会话砍回某一楼重走;酒馆里手动删到那一楼同理。 污染整段离场,代价是后面的剧情一起走。
  • 长会话开摘要或压缩。远处历史换成摘要之后,坏示范物理离场,你的指令重新变「重」。我们插件中心里有自动摘要和 上下文压缩,酒馆有 Summarize。代价照实说:摘要会丢细节,丢多少取决于摘要写得多好。
  • 规矩要重申。评测里第 14 轮重申(并加严)了一次「不超过 200 字」,四个形态当轮全部拉回。别指望第 3 楼下的规矩管到第 300 楼;历史在稀释它,你得续杯。
  • 最彻底的一招:带着记忆开新局。用记忆引擎把「TA 知道的事」搬进新会话,历史归零,关系不归零。 开头那种「新开一局就活回来」的手感,来源就是干净的上下文。

重摇不在单子上,因为它治不了趋势:重摇只换随机数,不换上下文,等于从同一锅汤里再舀一勺。第 146 楼舀了 7 次的那位朋友,第 7 勺还是那个味道。

工具在 /labs/chat-archaeology:全程浏览器本地跑,聊天记录不上传, 12MB、三万楼的导出 1.3 秒出报告(单文件最大支持 48MB),最后给你一张只有数字、没有一句聊天原文的年报卡。

最后说一句曲线的斤两。它只认词表;它说第 46 楼开始变机——你翻回去读那几楼,鼻子多半比它先到。 它的价值是把「大概最近变味了」变成「第 46 楼,去处理」。

常见问题

「越聊越机」是模型变笨了吗?

不是。同一个模型、同一张卡,新开一局立刻「活」回来:权重没变,变的只有喂给它的上下文。长会话里,历史占了提示词的绝大部分,而历史全是模型自己的旧输出:它每一轮都在模仿自己,套话一旦出现就会自我强化。这是上下文分布问题,不是能力问题,所以「等下个版本模型」解决不了它。

换个更强的模型能解决吗?

换模型换不掉机制。我们做过 400 轮的陪伴对话记忆实测(另一篇有全记录),也在四方对比评测里让完全相同的模型跑不同系统:同模型下,「听话度」从 78% 到 94% 的差距全部来自系统层怎么管理上下文。更强的模型套话词汇可能更高级,但「模仿自己旧输出」的循环对任何模型都成立。决定曲线走向的是历史治理,不是参数量。

考古馆的 AI 味分数是客观真值吗?

不是,页面上也这么写。打分是规则口径:55 条套话短语加 8 个句式模具,逐条扣分,5 分干净、0 分机器味最重。词表没收录的机器腔它看不见;一个真心爱写「呼吸一滞」的活人也会被扣分。它的定位是文案 lint,长处是同一把尺子从第 1 楼量到最后一楼,趋势和拐点比单点分数可信。另外它只校准过中文,英文记录会得到一句「没校准过、不硬下结论」的说明。

为什么重摇十次,十版都是那股味?

因为重摇没有换锅,只是从同一锅里再舀一勺。重摇改变的只有采样的随机数,喂进模型的上下文一个字没动;污染在上下文里,不在随机数里。我们演示数据里第 146 楼被重摇了 7 次,7 版全带同一批套话。单条不满意,重摇有用;趋势不满意,得动历史:编辑、回溯或者摘要压缩。

你和 TA 聊了 800 楼之后,AI 味是怎么涨上来的 · Foreverse · 新梦