你在 Claude Project 的 “Custom Instructions” 里清清楚楚写了”回答不要用 emoji”、“代码用 TypeScript 不要 JavaScript”、“输出英文不要中文”——结果聊两轮 Claude 又开始 emoji 满天飞、回 JS 代码、用中文回答。这不是 Claude 在故意忽略你,是 Project Instructions 在模型眼里是软约束,不是硬规则。
理解关键:Project Instructions 在每次对话开头被拼到 system prompt 里。模型会”参考”它,但当用户当前 prompt 隐式或显式与指令冲突,或指令写得太模糊,模型会按”最近、最具体”的信号执行——这就是 instruction drift。
常见原因
按命中率从高到低:
1. 指令太抽象,模型无法判断什么算违反
“请回答得专业一点”——什么算专业?“不要太冗长”——多长算长?这种主观词模型有解释空间,飘是必然的。
如何判断:把你的指令读一遍,问”如果我是个新人,能客观判断哪些回答违反了这条吗?“如果不能,就是这种情况。
2. 当前 prompt 与指令隐式冲突
指令说”输出 TypeScript”,但你在 chat 里问”这段 JS 怎么改?“——模型会跟着你 prompt 走给 JS 答案,因为它判断你当前要的就是 JS。
如何判断:回看最近几轮 prompt,看有没有暗示你想要被禁的格式 / 语言 / 风格。
3. 指令位置在长上下文里被稀释
Project Instructions 永远在 system prompt 里,但聊了 30 轮后,模型 attention 大部分被最近对话占据,早早写的指令影响力变弱。
如何判断:新会话第一轮就违反 = 指令本身的问题;聊到 20 轮才违反 = 上下文稀释。
4. 指令之间互相矛盾
“详细解释每一步” + “保持回答简洁”——模型只能选一个,且不一定选你想的那个。
如何判断:通读 instructions,找有没有”必须详细”和”必须简短”这类直接对立的要求。
5. 指令里有歧义的否定句
“不要不写测试”双重否定,“避免使用过多的技术术语”模糊形容词——模型解析出错。
如何判断:你的指令里是否有 “不要不”、“避免太”、“少用”、“尽量别”这类弱化否定。
6. 指令太长(> 1000 字)
超长指令会让关键规则淹没在装饰性说明里。前 200 字是”我们公司是一家专注…”这种背景介绍时,真正的规则就被推后了。
如何判断:复制 instructions 到 word count tool,> 500 字基本可以删一半。
最短修复路径
Step 1:抽象指令改成硬规则
❌ "回答专业一点"
✅ "回答里不许出现 emoji,不许使用感叹号收尾"
❌ "不要太冗长"
✅ "每个回答不超过 300 字,超过必须分成清单"
❌ "用 TypeScript"
✅ "所有代码块语言标签必须是 ts 或 tsx;
禁止输出 .js / .jsx 文件后缀;
如果用户贴的是 JS 代码,先指出'我把它转成 TS'再回答"
可观察、可机器验证的规则模型遵守率显著更高。
Step 2:结构化指令模板
# Hard rules (must follow)
- Never use emoji
- Always respond in English
- Code is always TypeScript, never JavaScript
# Soft preferences
- Prefer functional patterns over OOP
- Use named arguments
# Tone
- Direct, no hedging
- No filler intro ("Great question!")
明确划分 hard / soft,模型先满足 hard 再考虑 soft。
Step 3:精简到 300-500 字
删掉:
- 公司 / 项目背景介绍(除非影响回答)
- 礼貌客套(“please” / “thank you”)
- 重复表述(“一定要” + “千万别忘”)
- 装饰段落
只保留行为规则。
Step 4:每个 chat 开头复述最关键 1-2 条
chat 第一句:
提醒:本次对话所有代码必须 TypeScript,禁止 emoji。
现在我的问题是...
最近、最具体 = 模型最优先响应。
Step 5:违反时立刻 call-out 并要求 acknowledge
你回答里出现了 emoji。请确认你看到了 "Never use emoji" 这条规则,
并解释为什么破例了。然后重新回答这个问题。
让模型自己复述规则,下一轮遵守率显著上升。
Step 6:极端情况用 system prompt API 而非 Projects
如果是 API 调用(不是网页 Claude),把硬规则放到 system 字段,权重比 Projects 的 instructions 高。配合 prefix <critical_rules>...</critical_rules> 标签,模型遵守度更高。
预防建议
- 指令分三块:MUST / MUST NOT / Style。每块不超过 5 条
- 每条规则必须”可观察、可机器验证”——抽象描述模型不会执行
- Instructions 总长控制在 500 字以内;冗余说明都删掉
- 重要规则在 chat 开头再复述一次(短一句即可)
- 模型违反时不要假装没看到,明确指出”违反了哪条规则”
- 每月 review instructions,按实际命中情况增减