本地机器人可以记住做事说明。真正动作还是要走白名单、确认、回执和审计。
operation-memory-boundary-notes
本地机器人做久了,会遇到一个很小、但很容易变危险的问题:它明明已经知道“这类事情应该怎么做”,下一次还要不要重新讲一遍?
比如生成了一个文件,用户说“发给我”。系统需要知道:文件不能随便改原件,最好先放进可发送目录;发送动作不能靠一句自然语言就算完成,必须等外部平台返回确认;没有回执,就不能说“已经发了”。
这些经验如果每次都靠模型现场回忆,既慢,也不稳定。于是很自然会想到做一层“操作记忆”:把常见动作的处理说明保存下来,下次命中同类请求时直接取出来。
这一步最好先定死:记忆只负责提醒做法,不负责触发动作。
记住做法,不代表拿到权限
很多自动化系统出问题,不一定是它完全不知道怎么做,更常见的是把“知道怎么做”和“可以直接做”混在了一起。
“发送生成文件”这类动作,看起来只是一个小功能,其实已经越过了只读查询:它会接触本地文件,会把内容交给外部系统,也会在用户那里形成一个结果承诺。
所以操作记忆里可以记录:
- 先确认要发送的是生成物还是原始文件。
- 需要把可发送副本放到固定出口。
- 发送前要走受控封装。
- 发送后要检查回执。
- 没有回执时只能报告失败或待确认。
但它不该记录一段可以被直接执行的命令,更不该让模型把这段说明拼成 shell、脚本或网络请求。
说明可以留下,但执行入口要另放,不能混在同一段文本里。
一条操作记忆应该长什么样
我更喜欢把操作记忆写得很窄。
它不追求“覆盖所有情况”,只描述一个可复用场景:
名称:发送生成文件范围:本地助手风险:外部发送状态:启用执行:禁用说明:把可发送产物放进出口目录,调用已确认的发送封装,等回执再报告完成。我会特别看“风险”和“执行:禁用”这两个字段。风险说明它可能影响文件或外部系统;执行禁用说明模型只能参考这条记录,不能直接拿它去跑命令。
实际动作仍然要进入另一层。
执行层要白名单化
如果一个动作真的允许执行,它应该出现在白名单动作层里,不能藏在记忆文本里。
白名单动作层至少要回答几个问题:
- 哪个动作可以运行。
- 它能读写哪些目录。
- 它能不能触达外部系统。
- 它需要什么确认。
- 它如何返回成功证据。
- 失败时如何表达,不允许伪装成成功。
这样做会让系统看起来笨一点。
模型不能随手发明“我试一下这个命令”,不能把一段旧记忆改写成新动作,也不能在说明里夹带临时权限。它只能把需求匹配到某个已登记动作,然后让执行层判断能不能做。
这种限制会让流程慢一点,但能减少误操作。外部发送、文件写入、部署、账号操作、配置修改这类动作,出错原因可能是命令写错,也可能是系统给了模型绕开限制的机会。
回执比口头完成更重要
自动化最容易制造的一种幻觉,是“我已经做了”。
模型很容易在计划执行完一半时给出完成感。脚本也可能只把任务提交给外部平台,却没有等到最后结果。用户看到一句“已发送”,但实际上文件没有出去,或者发的是旧版本。
所以发送类动作要看回执。外部系统返回了消息 ID、任务编号、上传结果,才算有东西可查;只有“我调用了发送流程”还不够。
没有回执,就别写“已完成”。
这听起来像一句很普通的工程纪律,但对机器人尤其重要。因为机器人越像人,用户越容易相信它说的完成。越是这样,系统越应该把“完成”这个词管严。
删除也不该是真的删除
操作记忆还会遇到另一个小问题:某条说明过时了,要不要删?
我更倾向于归档,不做硬删除。
原因很简单:操作记忆本身也是系统行为的一部分。今天为什么这么做,明天为什么不这么做,某个风险为什么被提高,某个动作为什么被停用,都应该能回看。
硬删除会让历史断掉。归档则保留了一条解释链:
这条操作曾经存在后来被替换或停用原因是什么新的入口在哪里这对排查“机器人为什么突然不会做某件事”很有用,也能避免旧说明在某个角落被重新激活。
小系统更需要分层
有人可能会觉得,这套设计太重了。
一个本地机器人,只是帮我处理文件、提醒、摘要、发送,为什么还要分操作记忆、白名单动作、确认、回执、审计?
我的感觉正好相反:小系统更需要把这几层分清楚。
大系统可以靠组织流程、权限平台、审计系统和多人 review 托底。个人本地系统往往没有这些东西,限制都压在代码和习惯里。一旦把“记住说明”和“直接执行”混在一起,系统扩张得越快,越难知道哪一次动作到底是谁授权的。
把操作记忆做成只读说明书,是一种很小的刹车。
它不会阻止自动化变得有用,但会阻止自动化把旧经验误当成新权限。
记住做法,不等于允许执行
给机器人加操作记忆,第一步不是让它把常用动作自动跑起来。
第一步是关掉执行权。
我的做法是:记忆只保存做法,模型只读说明,发文件、改配置、动账号的部分交给白名单动作层。到底有没有完成,看回执和审计,不靠一句“已完成”。
这样做会让机器人慢一点,但也更不容易乱动。它可以提示下一步,外部动作仍然要走确认,并且留下回执。
我愿意长期交给本地助手的自动化,必须知道自己哪一步还没资格继续往前走。
继续读