你在 Claude Project 的指令里清清楚楚写了”回答不要用 emoji”、“代码用 TypeScript 不要 JavaScript”、“输出英文不要中文”——结果聊两轮,emoji 又满天飞、回 JS 代码、还有一条直接切回了中文。这不是 Claude 在故意忽略你。Project instructions 在模型眼里是软约束,不是硬规则,而规则写法直接决定了它能不能撑过一段真实对话。
最快的修复(多数人有效):把每条规则改成”陌生人也能客观判断这条答案有没有违反”的形式(用 Never output emoji characters 代替 回答专业一点),把指令拆成 MUST / MUST NOT / Style 三块,整体控制在 500 字以内。可机器验证的规则,遵守率远高于含糊的规则。本文剩下的部分是完整诊断,以及这招不够用时的进阶修复。
理解关键:Project instructions 会在每次对话开头被拼到 system prompt 里。模型会权衡它,但当用户当前 prompt 隐式或显式与指令冲突,或指令模糊到无法验证时,模型会按”最近、最具体”的信号执行——这就是 instruction drift。
指令到底存在哪(2026 年 6 月)
如果你连指令有没有存对地方都不确定,先看这一步。Projects 现在所有套餐都能用,包括 Free(Free 账号最多保留 5 个 project),所以步骤对所有人一样:
- 在 claude.ai 打开这个 project。
- 在右侧的 project knowledge 面板里,点 Set project instructions。
- 写入规则,点 Save instructions。
这里有两个常见误区:
- 你的个人 profile 指令(Settings,再进 Profile)和 project 指令是两个不同的框。写在其中一个里的规则,不会作用到你以为的另一个位置。
- Team 和 Enterprise 套餐现在多了第三层、优先级更高的 organization instructions(由管理员在 Organization settings 再进 Organization and access 设置,上限 3,000 字符)。按 Anthropic 文档:“when both are set, organization instructions take precedence”,以及”if an individual instruction directly contradicts an organization instruction, Claude favors the organization-level instruction”。如果你团队的回答总是无视某条 project 规则,很可能是 org 级规则在悄悄覆盖它——找你们管理员确认。
常见原因
按命中率从高到低:
1. 指令太抽象,模型无法判断什么算违反
“请回答得专业一点”——什么算专业?“不要太冗长”——多长算长?这种主观词模型有解释空间,飘是必然的。
如何判断:把指令读一遍,问”如果我是个新人,能客观判断哪些回答违反了这条吗?“如果不能,就是这种情况。
2. 当前 prompt 与指令隐式冲突
指令说”输出 TypeScript”,但你在 chat 里问”这段 JS 怎么改?“——模型会跟着你 prompt 走给 JS 答案,因为它判断你这一轮要的就是 JS。
如何判断:回看最近几轮 prompt,看有没有暗示你想要被禁的格式 / 语言 / 风格。
3. 指令在长上下文里被稀释
指令一直在 system prompt 里,但长对话中 Claude 会压缩(compact)较早的轮次以塞进上下文窗口,那些在压缩器看来”价值低”的规则会被改写甚至丢掉;而且模型 attention 大部分落在最近对话上,早写的指令影响力变弱。(反过来说,越具体的规则反而越能扛过压缩,因为压缩器不太会把它当成可丢弃的废话。)
如何判断:新会话第一轮就违反 = 指令本身的问题;聊到 20 轮左右才违反 = 上下文稀释。在同一个 project 里开一个全新对话重测第一轮,能干净地区分这两种情况。
4. 指令之间互相矛盾
“详细解释每一步” + “保持回答简洁”——模型只能选一个,且不一定选你想的那个。
如何判断:通读 instructions,找有没有”必须详细”和”必须简短”这类直接对立的要求。
5. 指令里有歧义的否定句
“不要不写测试”双重否定,“避免使用过多的技术术语”模糊形容词——模型解析容易出错。
如何判断:你的指令里是否有”不要不”、“避免太”、“少用”、“尽量别”这类弱化否定。
6. 指令太长
project 指令框大约能放 8,000 字符(约 2,000 词),但容量不是目标。超长指令会让关键规则淹没在装饰性说明里,而当生效的 system prompt 远低于几千 token 时遵守率最稳。前 200 字是”我们公司是一家专注…”这种背景介绍时,真正的规则就被推后了。
如何判断:把 instructions 复制到 word count 工具里,超过 500 字基本就该删。
快速诊断表
| 症状 | 最可能的原因 | 去看 |
|---|---|---|
| 新对话第一轮就违反 | 规则含糊或自相矛盾 | 修复步骤 1、2 |
| 前期遵守,约 20 轮后开始飘 | 上下文稀释 / 压缩 | 修复步骤 4,再开新对话 |
| 只在你提到被禁格式时违反 | prompt 隐式冲突 | 修复步骤 4(每个 chat 复述) |
| 全团队都犯,改 project 也没用 | org 指令覆盖 | 找管理员(见上文) |
| API 里正常但 claude.ai 不正常(或反过来) | 层级用错 / 设置未同步 | 硬规则放进 system(修复步骤 6) |
最短修复路径
Step 1:抽象指令改成硬规则
❌ "回答专业一点"
✅ "回答里不许出现 emoji,不许使用感叹号收尾"
❌ "不要太冗长"
✅ "每个回答不超过 300 字,超过必须分成清单"
❌ "用 TypeScript"
✅ "所有代码块语言标签必须是 ts 或 tsx;
禁止输出 .js / .jsx 文件后缀;
如果用户贴的是 JS 代码,先指出'我把它转成 TS'再回答"
可观察、可机器验证的规则,模型遵守率显著更高。
Step 2:用 XML 标签包住硬规则的结构化模板
Claude 在 XML 结构化的 prompt 上训练过,当不可妥协的部分被打上标签时,它对多段指令的遵守更稳定,所以把硬规则显式包起来:
<critical_rules>
- Never use emoji
- Always respond in English
- Code is always TypeScript, never JavaScript
</critical_rules>
# Soft preferences
- Prefer functional patterns over OOP
- Use named arguments
# Tone
- Direct, no hedging
- No filler intro ("Great question!")
明确划分 hard / soft,模型会先满足 critical 块,再把其余当作偏好。
Step 3:精简到 300-500 字
删掉:
- 公司 / 项目背景介绍(除非真的影响回答)
- 礼貌客套(“please” / “thank you”)
- 重复表述(“一定要” + “千万别忘”)
- 装饰段落
只保留行为规则。
Step 4:每个 chat 开头复述最关键的 1-2 条
chat 第一句:
提醒:本次对话所有代码必须 TypeScript,禁止 emoji。
现在我的问题是...
最近、最具体 = 模型最优先响应。这是长对话里对抗 drift 最有效的一招。
Step 5:违反时立刻 call-out 并要求 acknowledge
你回答里出现了 emoji。请确认你看到了 "Never use emoji" 这条规则,
并解释为什么破例了。然后重新回答这个问题。
让模型自己复述规则,下一轮遵守率显著上升。
Step 6:API 场景把硬规则放进 system,而不是 Projects
如果你走 API 而不是网页 Claude,把硬规则放到 system 字段——它比对话级上下文权重更高,也不受同样的压缩影响。配合 <critical_rules>...</critical_rules> 标签,遵守度更高。注意:在 API 里设的 system prompt 不会出现在 claude.ai 上,在 claude.ai 设的 project instructions 也不会进入 API——它们是两个独立的入口,规则要设在你实际使用的那一面。
如何确认已经修好
- 在这个 project 里开一个全新对话(不要接着旧对话——旧上下文会带着旧行为)。
- 发一个以前会触发违规的 prompt,最好是会轻微诱导被禁行为的那种(比如规则是 TypeScript-only 时,故意贴一段 JS 代码)。
- 用你现在已经客观化的规则去对照第一轮回答。通过的话,再聊到约 10-15 轮,确认在长度下依然成立。
- 如果第一轮还是违反,说明规则仍然含糊、或和另一条相互矛盾——回到 Step 1、2。如果只在长对话后期才坏,就靠 Step 4(每个 chat 复述)。
常见问题
为什么 Claude 一开始照做,后面就忘了? 长对话会被压缩以塞进上下文窗口,那些在压缩器看来价值低的规则会被改写或丢掉,同时最近的轮次主导着模型的注意力。在每个 chat 开头复述关键规则,或者在开始飘的时候直接开个新对话。
Project 指令会覆盖我的个人 / profile 指令吗? 是叠加,而不是严格覆盖。Anthropic 明确写出来的优先级在 org 层:在 Team 和 Enterprise 上,organization instructions 与 individual instructions 冲突时前者胜出。在你自己的账号内,要让 project 和 profile 规则不互相矛盾,免得模型被迫二选一。
Project 指令有字符上限吗? Anthropic 没有公布官方数字,但截至 2026 年 6 月,project 指令框大约能放 8,000 字符(约 2,000 词)。空间大不等于更好——规则越短,遵守越稳,建议控制在 300-500 字。
整个团队的回答都无视某条 project 规则,差别在哪? 检查是不是有 organization instruction。在 Team 和 Enterprise 套餐上,管理员设置的 org 级指令(Organization settings 再进 Organization and access)优先级高于 project 和 individual,冲突的 org 规则会悄悄覆盖你的。
API 里和 claude.ai 上的指令效果一样吗?
不一样,它们是两个独立入口。API 的 system prompt 不会出现在 claude.ai 上,claude.ai 的 project instructions 也到不了 API。规则要设在你的请求实际经过的那一面。
预防建议
- 指令分三块:MUST / MUST NOT / Style,每块就几条短句。
- 每条规则必须”可观察、可机器验证”——抽象描述模型不会执行。
- 总长控制在 500 字以内,冗余说明都删掉。
- 重要规则在每个 chat 开头再复述一次(短一句即可)。
- 模型违反时明确指出”违反了哪条规则”,别假装没看到。
- 每月 review 一次 instructions,按实际命中情况增减。