很多人都知道 AI 有个毛病,失忆。跟它说过的话、定好的规矩,开个新对话可能全忘了。所以不少人花了很大精力,给项目建了 memory 文件(memory 就是记忆文件夹的英文单词),想让 AI 在这个项目里长记性。
但你有没有遇到过这种情况,明明在 memory 文件里写了一大堆东西,AI 下次开对话还是忘了,该犯的错照样犯。
你是不是也在纳闷,这到底是为什么?我明明记下来了啊,AI 怎么还是看不见?
原因就在于你搞反了重要性。
每次在 Trae 里新建一个工作区,Trae 都会自动在里面建一个隐藏的 .trae 文件夹。你进去看一下,里面不会只有 memory 这一个文件夹。除了 memory,它还会建 rules 文件夹(rules 翻译过来就是规则,这个文件夹下面存的是这个项目的硬性约束)。
你仔细观察一下就会发现一个关键的事。当你跟 AI 开一个新对话的时候,AI 每次都会收到 rules 文件夹里的内容,而不是 memory 文件夹里的内容。
所以如果你把一些强制的、重要的、一定要执行的事情,写在了 memory 里,AI 可能就读不到。结果就是,你写了等于没写。
搞清楚了这个关系,什么该放 rules、什么该放 memory,就有答案了。
那什么该进 rules,什么该进 memory?
那 rules 和 memory 各自该装什么呢?
如果是你希望不管谁接手这个项目、不管换哪个 AI 对话、都必须遵守。比如禁止用某些词汇、限制使用特定句式、维持特定交付流程,那么你需要把相关内容写在rules里。
如果是,你希望 AI 在项目里有个上下文的了解,比如项目的愿景是什么、目前做到哪一步了、最近碰到了什么麻烦,那么你需要把相关内容写在 memory 里。它不是约束 AI 必须怎么做,而是让 AI 对这个项目有个上下文的了解。但请注意,这个上下文是暂时的,AI 可能会在下次对话里忘记。需要你每次提醒它,它才会去阅读。
简单说,rules 是法则,memory 是笔记。法则必须要遵守,笔记会偶尔翻阅。如果你想AI每次都照做,请使用规则而不是记忆。
但 rules 也有它的局限
话又说回来,rules 不是万能的。它本质上还是一段纯文本约束。只要是文本,AI 就有可能略读,或者看到了但执行的时候打折扣。你在 rules 里写了不许用某个词,AI 可能有时候就是忘了。光靠文本约束,AI 的注意力机制决定了它不可能百分之百执行。
那怎么办呢?rules 说了不听,总不能每次都手动搜一遍吧?
rules 加脚本,才是真正的双保险
解决办法就是给 rules 配上脚本。我之前专门写过一篇博客讲过这个事,里面有个 Python 脚本,核心就是把你禁止的词列好,逐行扫一遍你要检查的文件。跑完脚本之后,如果发现违禁词,再让 AI 逐个地改掉。
更进一步,你还可以把写完东西必须跑一遍检查脚本这件事本身写进 rules 文件里。这样它就不是靠 AI 自觉记得去做,而是流程本身就要求它必须做。交付之前不跑脚本检查核完毕,就永远不会给你交付。
这样就形成了一个闭环:rules 里写清楚什么不能做,脚本负责硬查有没有犯,AI 负责逐个修正。此时,文本和代码对AI形成了双重约束,AI的老毛病才能被被医治个八九不离十。
还有一个容易忽略的前提:rules 文件放哪
所以,你口述规则让AI随便写在项目的任意位置,并将它命名为规则,然后再再让规则调用一个会运行代码调用的技能,一切就万事大吉了吗?
这里要敲重点了!
你写好了 rules 文件,千万不能把它当成普通文件随便放在项目根目录下,也不能自己建个别的文件夹来存。系统只认.trae/rules/这个固定路径。只有你把规则文件放进这个文件夹里,它才会在每次开新对话的时候自动塞给 AI 先读一遍。放错了位置,哪怕只是放在项目根目录或者你自己建的别的子文件夹里,系统都不会塞给AI阅读,既然AI读不到,你写了等于没写。
所以你说 AI 不听话的时候,先别急着骂它没记性。先查两个地方,一是你的约束是不是实打实写进了 rules 而不是混在了 memory 里,二是你的 rules 文件是不是实打实塞进了.trae/rules/这个文件夹。这两个地方只要有一个放错了,AI 就是看不见。另外,为了让你的规则文本不会因为AI注意力的分散遗漏执行某些步骤,可以脚本化的,请形成技能让规则文件调用技能执行脚本,才是确保规则不打折扣执行的关键。
总结一下
所以当你明明写了一堆东西让AI记住,却发现AI还是忘,你就有了优化的思路。
记住:强制的、硬性的约束要写进 rules 文件,rules 文件必须放进.trae/rules/文件夹里,再加个脚本当最后一道关卡,AI才能老老实实按听你的。至于那些背景的进度快照,放 memory 里,需要的时候提醒AI去阅读就好了。