为什么你的指令在 CLAUDE.md 里写了,但大模型就是不听话?
很多人在配置 AI Agent 的指令文件时,习惯把最重要、最核心的原则放在最前面,觉得这样能给模型定调。但实际上,这恰恰是很多“指令失效”的根源。我最近在研究指令冲突(Instruction Conflicts)时发现了一个很反直觉的规律:当两条指令打架时,模型不会报错,也不会提醒你,它会直接在后台偷偷地做决定,而且决定权竟然在指令的“物理位置”上。
下一篇
把 AI 当成自动贩卖机一样投个模糊指令就想要完美结果 →
举个具体场景,如果你在文件开头写了“scratchpad 目录下的代码不需要写测试”,但在文件末尾又写了一句“每个函数必须配一个测试”,那么当 Agent 在 scratchpad 里写脚本时,它会毫不犹豫地给你加上测试。因为在模型的逻辑里,后读到的指令优先级更高。
这种冲突最阴险的地方在于它没有“语法错误”,也不会导致程序崩溃。模型在推理过程中会静默地解决冲突,然后给你一个看起来极其自信的答案。如果你没仔细看 diff 记录,你根本意识不到它忽略了你之前的设定。
根据一些实测数据,指令的位置对执行率的影响极大。把同一条指令从文件顶部移到底部,模型的执行概率能直接波动 90% 左右。而且越强的模型(比如 Opus 5)在这种冲突面前反而越“固执”,它会非常坚定地执行最后一条指令,而旧模型可能会在两次运行中随机选择其中一条。这意味着在强模型上,那种通过多次尝试发现不稳定的“蛛丝马迹”消失了,指令失效变得更加隐蔽。

如果你想优化自己的工作流,建议尝试以下调整方案:
一、重新排序指令优先级
将那些必须绝对执行的“最终裁决”指令移到文件的最下方,而不是最上方。
二、使用具体路径覆盖通用规则
虽然位置决定胜负,但精确的路径指向(比如指定 src/payments/)能增加指令的权重。

三、精简冲突项
检查你的指令集,确保没有类似“全部都要”和“部分不需要”这种逻辑重叠的描述。
如果你在折腾 Claude Code 或者类似的 Agent 配置文件,可以参考这个简单的自查逻辑:
# ❌ 错误写法(重要规则在顶端,易被覆盖)
- 核心原则:所有临时脚本禁止写测试。
... (中间 100 行其他规则) ...
- 质量要求:所有函数必须包含单元测试。

# ✅ 优化写法(具体例外放在最后,确保生效)
- 质量要求:所有函数必须包含单元测试。
... (中间 100 行其他规则) ...
- 特殊例外:位于 scratchpad/ 路径下的代码无需编写测试。把这个逻辑应用到你的指令库里,能省掉很多反复调试提示词的时间。
