智能体不听文档规则,分享5条我的解决方案
你好,我是茂林,一个AI爱好者,最近一直在折腾OpenClaw/Hermes,踩过老多坑了。我把踩过的坑整理出来,帮你少走弯路。
解决什么问题
你给智能体写了详细的文档规则(比如 PROJECT_RULES.md、AGENTS.md),要求它必须遵守,但它像个小孩一样,有时候听有时候不听,经常犯你已经说过的错误。今天我就来分享下我的解决方法。
原因分析
原因一:规则位置不对,根本没看到
你可能会把规则藏在项目深处,对话上下文里根本没有加载这个文档。看不到=不存在,当然不会遵守。
Hermes、OpenClaw 这些框架,不会自动遍历你项目所有文件找规则。你得明确告诉它加载规则文档,或者把规则放在固定位置让框架自动加载。
原因二:规则冲突,选了优先级高的
如果不同地方有不同规则:
-
• 系统提示一条规则 -
• 文档里一条规则 -
• 用户最新消息又说了一条
它会默认越新优先级越高,如果用户最新说的和文档规则不一样,会听用户最新的,不听文档的。
原因三:规则模糊,理解错了
不好:"代码要简洁"
好:"函数不超过 50 行,每个函数只做一件事"
模糊规则理解会走偏,具体可验证的规则遵守率高很多。
原因四:上下文窗口不够,规则被挤出去了
长对话进行到后面,规则在上下文开头,已经被截断挤出去了,看不到自然就不听了。这就是为什么”开头有规则,做到一半就不守了”。
文档规则本质:建议属性而非强制属性
常见的误解:我写的就是天条,我定的规则就必须执行。
真实情况是:
文档规则是”给智能体参考建议”,不是”操作系统级别的强制访问控制”。
-
• 框架不会拦截违规输出,它还是会输出内容,只是看到规则会尽量遵守 -
• 智能体是概率模型,不是虚拟机,没有”必须强制执行”这回事 -
• 遵守率从来不是 100%,80%-90% 就是很好的效果了
心态摆正:不要指望写一次规则就能一劳永逸永远遵守,要接受偶尔犯错,错了及时拉回来就行。
可操作的解决方案
方案一:放对位置,让它每次都能看到
|
|
|
|---|---|
|
|
PROJECT_RULES.md
context load PROJECT_RULES.md 加载 |
|
|
memory.md
|
|
|
.claude/commands.md
CLAUDE.md |
关键:每次会话开始,主动让它加载规则:
请先加载 PROJECT_RULES.md,严格遵守里面的规则。
方案二:关键规则放最后,不被截断
长对话中,最重要的规则放最后一句话,因为截断从开头切,放后面不会丢:
...以上是当前任务。再次提醒:严格遵守 PROJECT_RULES.md 中的格式要求。
方案三:规则要具体,可检查
❌ 不好:
代码风格要好,命名要清晰。
✅ 好:
遵守以下规则:
1. 文件名全小写,用连字符分隔(比如 `user-auth.md` 不是 `UserAuth.md`)
2. 函数名用蛇形命名(`get_user_info` 不是 `getUserInfo`)
3. 每个函数必须写一行文档字符串说明用途
越具体,越不容易理解错,遵守率越高。
方案四:定期提醒,错了就拉回来
不要指望一次写入永远遵守,养成习惯:
-
• 每次任务开始前提醒一次规则 -
• 犯规了,立刻指出”你违反了 X 规则,请按规则重写”
几次之后,它就记住了,遵守率会越来越高。
方案五:拆分规则,核心规则放最前面
把规则分成两级:
-
• 核心强制规则:放在最前面,不超过 5 条(比如”不能推敏感内容、不能改密码、必须留备份”) -
• 次要建议规则:放在后面
核心规则少一点,更容易记住。
总结行动清单
-
1. ✅ 规则放在固定位置,每次会话开始明确让它加载 -
2. ✅ 规则写具体,不用模糊形容词 -
3. ✅ 核心规则不超过 5 条,放最后防截断 -
4. ✅ 接受本质:文档规则是建议不是强制,概率遵守不是 100% 强制 -
5. ✅ 犯规了就及时纠正,几次下来命中率就上去了
做好这五点,智能体遵守文档规则的概率能从 50% 提升到 90% 以上。
你还有遇到什么其他问题,留言分享,我也可以帮忙一起想想办法。
夜雨聆风