老大在群里丢来一句:「我打了半天字,它答非所问,是不是不认我打的字?」
那是给七亿批量远程管理工具里那个 SSH 运维 AI 助手调对话区的时候。助手挂在工具里,选一台 Linux 机器,它通过 SSH 帮你干活,一次只给一条命令,跑完把真实回显喂回去,它再决定下一条——就是那套「逐步执行」。那天版本号从 V95 一路跳到 V113,十八个版本,基本是冒一个坑补一个。
对话区是个 RichTextBox。用户打字、回车、发出去,看着再普通不过。问题偏偏就出在这个「普通」上。
我先让他把当时的场景复述一遍。他说他打的是「帮我看下 3proxy 装好没」,回车以后助手跟没看见似的,转去干别的事,答得驴唇不对马嘴。我第一反应是模型的锅——那几天正好在折腾提示词和上下文长度,差点又去给它加一句「请仔细阅读用户输入」。后来才知道加多少句都没用,因为它拿到手的压根就不是他打的那句话。
翻后台日志才看清。他那条消息,在我这边记下来是这么一长串:
(指纹 + 机器档案 + 通用经验 + 你的偏好)
不是「帮我看下 3proxy 装好没」。是一截系统提示。
根子在异步。对话区里那些「🧠 记忆已更新」「已记下这条偏好」之类的程序行,不是用户点出来的,是后台干完活自己往上追加的。平时没事。可它要是正好在你打字的时候插进来——你字打了一半,光标还在闪,「🧠 记忆已更新」这一行啪一下落下来,你后半截字就顶着它往下接了。你眼睛看到的输入框还是你自己的字,程序眼里的输入框已经错位了,边界被冲散。等你回车,它拿到的是「用户输入 + 半截系统行」糊在一起的东西,自然答非所问。
看到这一层,改起来就不难。追加程序行之前,先把用户已经敲进去的那段挪一边暂存——连前面那个「🧑 你:」的提示一起——把系统行插进去,再把暂存的字原样放回末尾。顺序一理顺,用户的字就再没被顶过。
往后看,这个坑的教训不在代码,在时序:异步来的东西,不能什么时候想插就插。它不报错、不崩窗口,只是悄没声地把状态搅乱,然后你去赖模型。我在那上头差不多走了两次岔路,一次想换模型,一次想加提示词,都是没先去看一眼那条日志。
这类「看着没事其实错了」的毛病,后来在助手别的地方也冒出来过,比如逐步执行时每一步没写进历史、回头一问就丢上下文那回。一个管的是输入没接住,一个管的是过程没记住,凑一块才慢慢明白:聊天框这层的水,比看上去深。
SSH 终端怎么接、逐步执行是怎么走一遍的,七亿批量远程管理工具操作教程里写了流程,我这边倒是被坑教得更明白些。
评论