有天下午我在数一屏对话里到底塞了多少字进去,标题行都数完了还没数完。

不是闲的。那阵子在给七亿批量远程管理工具(RdpManager)加 SSH 运维 AI 助手,模型接的是 DeepSeek,形态是「逐步执行」——它每次只给一条命令,客户端在服务器上跑,把真实回显喂回去,它再决定下一条。功能勉强能跑之后,我越用越觉得它「越聊越飘」:同一个问题,前几轮答得挺利索,聊到后面开始重复、绕圈,甚至莫名其妙重开一轮全身诊断,把前面干过的又干一遍。

我先怀疑是模型。换 prompt、调低温度、把系统提示写得更死,没用。索性不猜了,把它每轮真正发出去的东西打出来看。

一看就明白了。对话历史那块,代码里写死的是「最近 8 条」。听着不多,可它是一条一条的消息,不是 8 行字。逐步执行这种任务,一条回显动辄几十行日志、几百个字符;再叠上机器快照、档案、偏好,8 条一拼就上千字,聊个十几轮就往几千字去了。

这其实不是我在「历史」上第一次翻车。更早一点,逐步执行的每一步压根没写进对话历史,用户装到一半回头问「搭好了没」,它一脸茫然——那次的坑我单独写过(逐步执行的每一步都得进历史,不然一追问就丢上下文)。这次是另一个方向:不是没记,是记太多,而且没个上限。

长上下文这事,我一开始想得挺天真:多给点料,模型总该更懂吧。实际是反的。

一是贵。发出去的每个字都算钱,聊得越久,每轮都在为前面那一大坨重复买单。

二是笨。历史里混着一堆过期、无关的东西,模型注意力被摊薄,反而抓不住当前这句。

三是乱。它容易被旧内容带偏,把已经翻篇的事又拎出来重做。

三样叠一起,就是你感觉到的「越用越糊涂」。

改法不复杂,就是加一道闸门:历史注入卡一个总字符预算(当时定的是 8000 字上下),再加一条单条消息上限,超了就从最旧的开始丢;快照、逐步执行的「步骤回喂」也一样封顶。目的很朴素——聊再久,每轮真正发出去的上下文都有天花板。这套逐步执行是长在 SSH 终端面板上的,批量远程工具的教程里整套用法都写了。

这里还牵出一个我当时没想透、后来才补上的坑:记忆不只是「存」的事。那阵子它把服务器的端口、账号、连密码一起写进了机器档案,而档案是每轮都要注入给模型的,等于把钥匙一遍遍念给它听。这个我也单独修了(AI 把服务器密码记进长期记忆那次)。回头看,「记住什么」「记住多少」「什么时候注入」,是三件独立的事,我一开始把它们当一件了。

现在回头看这段,最大的收获反倒是「少给点」这三个字。给七亿批量远程管理工具加功能,第一反应永远是「还能再塞点啥」;可有的地方,加个上限比加功能好使。那天把预算补上、重跑几轮,它确实不飘了。

就这点事,前后折腾了小半天。版本从 V95 蹭到 V113,一天十八个功能版本,大半都耗在这种「看着能用、其实不对劲」上。

顺带提一句,这个七亿批量远程管理工具是免费的、Windows 端,RDP 九宫格 / SSH 终端 / SFTP / FTP 都齐。