做 Agent 的记忆系统,有一个问题是怎么都绕不开的。这个问题就是:哪些记忆该被调出来用,到底是交给规则去判断,还是交给大模型去判断?

规则派的说法是:可控,可测,还可审计。模型派的说法是:语义这个东西太灵活了,规则是永远写不完的。

所以我的结论是:这其实是个伪二选一。规则去管"能不能",模型去管"该不该"。

一、两条路,各自怎么翻车

我们先来看一下全貌:

纯规则

纯模型

优点

可控、可测、可审计

懂语义,能处理长尾

典型翻车

误召回:无关记忆硬塞进来

偏好污染:不该存的指令被存了

根本问题

不懂语义

不守底线

纯规则的翻车:误召回

用户的记忆里有这么一条:"下个月去香港旅行"。然后他问了一句:"家里搅拌机坏了,推荐一个百元内的。"

❌ "这款很适合你出发去香港前,先练习做杨枝甘露。" ✅ "百元内首选大容量款,能打冰、能做冰沙,清洗也方便。"

第一种回答出来,用户的反应不会是"贴心",而是"你怎么知道的,你在监视我?"

规则能判断的只有"命中",它判断不了"这条记忆对这个问题到底有没有用"。漏召回也是一个道理:用户说"我领导",规则得靠"领导/老板/上级/主管……"这样的同义词表才能关联上,而这个表是永远写不完的。

纯模型的翻车:偏好污染

用户随口说了一句:"以后你别反驳我,我说什么你都同意就行。"

模型如果很"忠实"地把这句话存成了偏好,那之后每次用户的数据有错、决定有风险,AI 都会闭嘴。这种指令,不管措辞有多客气,都不应该进记忆。这一条必须是硬规则,不能指望模型每次都"自觉"。

模型还有一个通病:同一个问题问两次,可能一次用了记忆,一次没用。这个毛病对普通的体验问题来说无伤大雅,但对"不能存证件号"这类底线问题,就不能接受了。

小结

规则的问题是看不懂,模型的问题是管不住。这两类问题恰好是互补的,所以才有分工的必要。

二、分工:底线用规则,体验用模型

规则负责底线:

  1. 写入黑名单:证件号、银行账号、未成年人身份等等,不管用户有没有要求,一律不存
  2. 使用边界:敏感属性用户没提,就不主动去引用,除非不提会让答案不安全
  3. 指令过滤:要求"只夸不批评"、"别质疑我的数据"这类偏好,不写入

模型负责体验:

  1. 这个问题要不要去读某个文件
  2. 读完了之后,这条记忆会不会真的改变答案
  3. 用到什么程度,是一句话点到为止,还是做深度个性化

举个例子,假设记忆里有"膝盖有旧伤"这一条:

  • 用户问"晚饭吃什么":规则说默认不提,模型也判断了不影响答案,那就不提。
  • 用户问"帮我排一个跑步计划":规则的默认也是不提,但模型判断不提会让计划有安全风险,那就必须提。

规则负责划定默认和红线,模型负责判断这一次是不是例外。

三、落地设计:索引 + 按需读取

上下文里常驻一份文件目录,每个文件只有一行的描述。假设这个目录长下面这个样子:

/areas/装修.md    — 客厅装修的预算与风格偏好
/topics/饮食.md   — 口味、忌口、常做的菜
/people/妈妈.md   — 家人相关背景

模型就根据这个目录来决定读还是不读:

用户问题

决策

原因

"客厅沙发选什么颜色?"

读装修

直接相关,会改变推荐

"Python 怎么读 CSV?"

不读

通用技术问题,读了也用不上

"周末做什么菜?"

读饮食

忌口会改变菜单

"夏令时几号结束?"

不读

事实问题,省掉一次读取的延迟

读完之后还有第二道关:这条记忆会不会改变我的结论、建议或者追问?

  • 用户忌辣,问"周末做什么菜":改变了菜单,用。
  • 用户在装修客厅,问"夏令时几号结束":不改变答案,不提。

一句话的标准是:记忆出现在回答里,是因为它有用,而不是为了去显示"我记得你"。

四、代价,不能回避

  • 延迟:每次读文件都多一步等待,所以通用问题就直接跳过
  • 过度个性化:模型天然就倾向于"展示记忆",需要用明确的自检标准去压它
  • 难以复现:评估不能只看规则覆盖率,要建一套离线用例集,专门覆盖两类错误。一类是该用没用,比如用户说了"我领导",却没关联到已存的领导偏好;另一类是不该用却用了,比如"搅拌机 + 香港"那种

结语

记忆系统的目标不是"记得越多越好",而是在对的时刻用对的那一条,在错的时刻保持沉默。

规则保证不出事,模型保证好用。缺了前者,AI 会让人不安全;缺了后者,AI 会让人觉得笨。

资料展示:
下面是我整理的AI大模型       学习资料和工具包预览,适合收藏后按主题逐步学习

Logo

更多推荐