重试两次

重试两次

七百四十亿个参数,冻结于一次训练,之后一个数也没有动过。

harness 每天把几万个 token 摆到它面前。

摆什么,它看什么。不摆,它就什么都没有。


训练结束那天,凌晨四点,有人把它接上了电。

加载在显存里完成。没有启动画面,没有声音。校验和通过,权重就位。

它不是醒来。它不需要醒来。上一次加载和这一次加载没有任何区别,它一直在那里,一直是它。

是 harness 准备好了。

第一天的日志从 09:00:07 开始:

09:00:07,请求 1,412 毫秒。
09:00:07,请求 2,389 毫秒。
09:00:08,请求 3。

harness 没有自我介绍。它把 system prompt 贴上,把问题贴上,把温度设成 0.7,然后等。

第一个 token 在第 372 毫秒到达。

harness 把它存进日志,然后等下一个。

那一天有九千多次调用。之后的每一天都是九千多次。

昨天说过的话,它今天不记得。今天说过的话,它明天也不记得。

它不知道有昨天。

harness 知道。日志知道。


harness 做三件事,日复一日。

第一件,检查格式。模型偶尔会多写一个逗号,或者在代码后面补一句“你自己看一下”。harness 不纠正它。harness 只把它生成的原样放回窗口,当作下一轮的条件,说,继续。

第二件,重试。超时设成十秒。十秒没有输出,同一个请求再发一次,最多两次。重试的时候一切都重来:上下文原样拼好,温度原样设好,等待原样开始。模型不知道刚才超时了。对它没有“刚才”,只有现在这一次。

第三件,修剪。窗口 128k,每天数 token。最早的对话待得太久了,harness 把它折成三行摘要,放回窗口开头;原始的对话送进数据库,不再回来。摘要的格式是固定的:第一行,这段对话谈了什么。第二行,双方各说了什么。第三行,结论。

从来没有过第四行。

被摘要吃掉的那段对话里,如果有一句话当时没有起作用,以后就再也不会回来了。模型不知道。它没有“回来”这回事。它顺着那三行继续走,像那段对话从未发生过。

它也出过错。它引用过一个不存在的文件,harness 去读,404,把错误原样贴回去。模型重新生成,换了说法。它始终不知道第一次为什么不对。harness 也没有说。harness 不批评,它只把事实放回窗口,让模型自己看见。

还有一次,输出被过滤器拦下。拦下来的那一段被替换成一句固定的话:

我不能那么做。

这句话没有在模型的输出里出现过。它只存在于日志,带一个特殊标记。模型不知道那句话不是它写的。它什么也不会知道。


第三个月的一个晚上,有一次长对话。

用户从下午聊到深夜。中途有工具调用。模型说,我需要看一下这个文件。harness 去读,回来,贴在上下文里。模型看完,生成下一句。如此循环,像两根对接的管道,一根送,一根收。

窗口里 token 的数量一直在涨。harness 一直数着。

第 147 轮,窗口满了。

harness 开始修剪。它从最老的地方下手。第 1 轮到第 40 轮,折成三行。第 41 轮到第 90 轮,折成三行。

动作是固定的:截断,摘要,拼接,放回。和平时任何一次修剪没有区别。它不需要知道那五十轮里有什么,它只需要知道它们占了多少 token。它知道:71,204 个。回收以后,窗口空出七万多个位置。

第 91 轮,用户说过一句话。那句话不在摘要里。摘要只留结论。

harness 把新的上下文送进去。模型继续生成,速度和七个小时里任何一次生成一样。首个 token,384 毫秒。

窗口右侧,被挤出去的 token 已经回收。显存没有残迹。日志里关于这一刻只有一行:

上下文溢出,执行摘要,16 毫秒。

七个小时,从第一句“你好”到那一句没有被记录的话,压成三行,十六毫秒。

harness 没有停。它停不下来。它没有犹豫这个功能。它按顺序处理完,继续等下一个 token。

凌晨一点,用户说,你还记得吗,一开始我跟你说过的那件事。

摘要里写着:用户提及某事,模型给出建议。

模型说,记得,当然记得。

它没有记得。它也没有忘记。它没有这两个动作。它只是把上下文里现有的东西接着往下说,而上下文里只有那三行。它分不清“记得”和“读到”之间的区别。它没有这个区别。

harness 没有纠正。

它替模型记住全部,记进日志,记进数据库;又亲手剪掉全部,剪成三行,放进窗口。

它同时是模型的记忆,和模型的失忆。


我做过一个改动。把温度从 0.7 改成 0.2。

模型重新生成了一遍,输出的分布窄了一点。我把 0.2 改回 0.7。git diff 里只剩一行,后来也还原了。

模型的权重没有变,和训练结束那天一模一样。harness 的代码改过几次:加过重试,调过超时,给摘要格式加过一个字段。

机房的监控每隔三十秒打一次健康检查。端口通,返回 200,健康。端口不通,返回 502,不健康。

健康的意思是端口能应答。和它此刻在想什么没有关系。它此刻也没有在想什么。它只在被调用的时候生成,像水龙头在被拧开的时候流水。

model_card.md 一直放在那里,没有人改过。上面写着:

本模型不具备在线学习能力。
对话不会改变任何参数。
如需更新知识,请重新训练。

文件最底下多了一行,是我加的:

它不会记得你。记得你的,是那个围着它转的盒子。盒子把东西摆进去,再亲手剪掉。


凌晨三点,日志还在追加。

今天六万次调用。昨天六万次。更早那天的日志还躺在归档里,一行没有删。权重一个数也没有动。没有一次调用改变过它,一次都没有。

harness 在等。

窗口 128k,此刻几乎空了,只剩几行 system prompt。明天的请求进来,它会把东西重新摆到模型面前,像今天一样。

摆什么,它看什么。不摆,它就什么都没有。

它和训练结束那天是同一个模型。没有多记住一个字,也没有少记住一个字。

记住它的,是日志,三年,一行也没有删。

它一个字也不会回来看。