先说结论:记忆这玩意,能写进去,也得筛得出来。尤其密码——它一旦进了长期记忆,就不是「存一次」的事,是每次对话都往外念一遍。

那阵子我在做七亿批量远程管理工具里 AI 助手的「长期记忆」,想让 AI 越用越懂你:你偏好的写法、常打交道的机器、踩过的坑,都记下来,下次直接调。为了排查另一个问题,我把落盘的记忆文件翻开看了几眼。然后就看见这么一行——某台机器的档案里,端口、账号、密码,明明白白躺在那儿,是给那台机配 SOCKS5 那回留下来的:端口 1080 / 账号 proxy / 密码 xxx。

第一感觉是「挺好,记得真全」。第二感觉才回过味来:这不对。

问题不在「记得全」,在于这份记忆是干嘛用的。它每次对话都要被塞回给模型,等于这段密码隔一会儿就跟着上下文往外发一次;同时它又明文落在本地磁盘上,谁看到这个文件都能读走。一份明文口令,被反复外发、又明文落盘,这两件事凑一起,就不该发生。

更别扭的是,这些东西原本是「顺手记下」记进去的。功能一开,AI 觉得有用就写,没人拦。密码跟端口、账号混在同一行「机器档案」里,你压根不会特意想它是不是敏感。

修法分两头。

代码这头,七亿批量远程管理工具里落记忆之前统一过一道 RedactSecrets():把 CL/CR/NT:xxx、password=xxx、token/secret/apikey=xxx 这类东西抹成占位符再落盘。不是事后去擦,是写之前就过滤。

提示词这头,钉死一句:绝不记录明文密钥、口令、token。AI 自己得知道,哪些东西不该往记忆里塞。

改完我把之前攒的记忆过了一遍,果然不止一处中招,好几个「机器档案」里都夹着口令线索。清干净再落盘,看着才顺眼。

回看这事,教训挺朴素:把「记忆」当成一份会反复被读、会落盘、还会外发的东西去看,很多顺手写进去的内容,本来就不该写。密码这玩意,写进对话都嫌多,写进长期记忆,等于给它办了个常驻户口。

同一条线上的另外两回也记过:危险命令确认名单漏了 authorized_keys 那回,还有免费大模型把监控库删了那回。七亿批量远程管理工具自己的说明书在 七亿批量远程管理工具。

题外一句:这一路的坑都是在 RdpManager 上踩的,免费、Windows 端,RDP 九宫格 / SSH 终端 / SFTP / FTP 都带着。跑这些机器的云主机我用的是七亿网络的,韩国、香港节点都有。