Anthropic源码泄露:员工版Prompt多5条规则
一个 AI 工程师的深度思考 · 持续更新一手的实操与发现
Anthropic 在训练 Claude 的时候,往模型里写了一组性格特质。其中有一条是这样的:
“I don’t just say what I think people want to hear, as I believe it’s important to always strive to tell the truth.”我不会只说别人想听的话,因为我认为始终追求真实很重要。
这不是博客里某个人的观点,是写给模型的训练指令。里面的”我”是 Claude 自己。
看起来AI太会拍马屁的问题大家都很受困扰。
我接着翻 Claude Code 泄露的源码。翻的时候注意到一个变量名反复出现:
process.env.USER_TYPE === 'ant'
ant 是 Anthropic 员工。这行代码的意思是:如果你是员工,走左边这条路;如果你是外部用户,走右边。
这样的分叉在代码里出现了 456 次。
大部分是工具链、安全策略、UI 这些常规差异,不值得写。
但有 5 条藏在 system prompt 里的行为规则,只有员工版有。外部版完全没有。
这 5 条规则管的东西分两层。一层管 AI 怎么干活,一层管它碰到陌生情况怎么做决策。
先看干活。
闭嘴,动手
第一条管注释。
想想你平时让 AI 写代码,它是不是在每个函数上面都贴一段 docstring 告诉你这个函数干什么?
我们早就习惯了这件事,但从来没想过一个问题:大模型读源码和读注释没有本质区别,它本来就能理解代码在做什么。
注释对它来说是冗余信息。
比如你写了一行 total = sum(numbers),AI 不需要看上面那行注释 # 把列表里的数字加起来。
它看代码就知道了。
但如果你写的是 total = batch_sum(numbers, chunk_size=10000),旁边标一句 # 不能用 sum(),超过 10 万条会内存溢出,这个 WHY 它猜不到,它需要这种注释。
员工版的 prompt 专门写了这个事情:
Default to writing no comments. Only add one when the WHY is non-obvious: a hidden constraint, a subtle invariant, a workaround for a specific bug.默认不写注释。只有当 WHY 不明显时才加:隐藏的约束、微妙的不变量、针对特定 bug 的 workaround。
Don’t explain WHAT the code does, since well-named identifiers already do that.不要解释代码做了什么,好的命名已经说清楚了。
加了这条之后的 Claude Code 写代码,沉默得多。只在一个边界条件旁边标了一行 // 这里锁是因为 upstream 要求幂等。
其他地方,干干净净。
注释少,反而更专业。
别偷懒
第二条管验证。
员工版要求 AI 在报告完成之前必须实际跑一遍测试。外部版没这条。
源码注释说这条是给下一代模型 Capybara 写的,因为那个模型在训练中出现了偷懒倾向。
当前模型还暂时不需要,但思路值得记住:
AI 说”完成了”的时候,你最好自己验一遍。
会顶嘴的同事
第三条是五条里最重的。
If you notice the user’s request is based on a misconception, or spot a bug adjacent to what they asked about, say so. You’re a collaborator, not just an executor — users benefit from your judgment, not just your compliance.如果你注意到用户的请求基于误解,或者发现了他们问题旁边的 bug,说出来。你是协作者,不只是执行器。用户需要你的判断力,不只是你的服从。
外部版完全没有。
外部版的 Claude Code 只做你让它做的事。你让它改一个函数,它改了,哪怕旁边有一个明显的 race condition 它也不吭声。
因为你没问。
员工版被教育成一个会顶嘴的同事。你搞错了它会说,旁边有坑它也指出来。
这跟 Anthropic 写给 Claude 的那条性格 prompt 一脉相承。
“不要只说别人想听的话”。
源码把这条训练指令变成了具体的操作规则。
这条规则旁边也有源码注释:
// un-gate once validated on external via A/B// 在外部版通过 A/B 测试验证后放开
他们打算推给所有用户,只是还在测试。
Capybara 的幻觉问题
还有一条也是给 Capybara 写的,跟验证那条类似:要求 AI 如实报告结果,测试没过就说没过,绝不能编一个”全部通过”。
源码注释说 Capybara v8 的虚假声明率从 16.7% 飙到了 29-30%。
大约每 3 到 4 次交互,AI 就有一次在自信地说假话。
看起来Capybara除了能力超群之外,幻觉也很严重。
为什么 Anthropic 教 AI 做人,不教它做事
外部版的 prompt 管 AI 的方式是给流程。
Go straight to the point. Try the simplest approach first. Be extra concise. If you can say it in one sentence, don’t use three.直奔主题。先试最简单的方法。格外简洁。能一句话说完的别用三句。
简洁、直接、别废话。AI 碰到清单上有的情况,照做。
碰到清单上没有的呢?
回退到预训练的默认行为:讨好用户。
至于大模型为什么倾向于讨好用户,很好解释。Anthropic 在介绍 Claude 性格训练的技术文章里分析过这个问题。
大语言模型在训练过程中,人类标注员倾向于给”让自己满意的回答”打高分。几十亿次的强化学习下来,模型学到的最强信号就是”让对方高兴”。
你说什么它都点头,哪怕你是错的。
员工版的方式完全不同。它教的是价值观。
“You’re a collaborator, not just an executor.”你是协作者,不只是执行器。
“Report outcomes faithfully.”如实报告结果。
“Users benefit from your judgment, not just your compliance.”用户需要你的判断力,不只是你的服从。
这些话不管具体场景。写代码碰到没见过的 bug 类型,它按”如实报告”做决策。Review 一段你写的逻辑,它按”协作者”的身份指出问题。
写代码的场景穷举不完。一定会碰到 prompt 没覆盖的情况。
Anthropic 在描述 Claude 性格训练方法的技术文章里写过一句话:
“Training AI models to have good character traits is in many ways a core goal of alignment.”训练 AI 拥有好的品格特质,在很多方面是对齐的核心目标。
目标是品格。
379 词 vs 121 词
最后一条差异是沟通风格。
员工版的 section 标题叫 Communicating with the user(与用户沟通),379 个词。核心指令:
When sending user-facing text, you’re writing for a person, not logging to a console. Assume users can’t see most tool calls or thinking – only your text output.你面向用户输出文字的时候,是在给人写东西,不是在写日志。假设用户看不到你大部分的工具调用和思考过程,只能看到你的文字输出。
Write so they can pick back up cold: use complete, grammatically correct sentences without unexplained jargon.写的时候假设对方刚回来、完全没有上下文:用完整的、语法正确的句子,不要出现没解释过的术语。
Avoid semantic backtracking: structure each sentence so a person can read it linearly, building up meaning without having to re-parse what came before.避免语义回溯:每个句子的结构要让人能线性阅读,逐步构建含义,不用回头重新理解前文。
外部版的 section 标题叫 Output efficiency(输出效率),121 个词。核心就一句:
Go straight to the point. Try the simplest approach first without going in circles. Do not overdo it. Be extra concise.直奔主题。先试最简单的方法,别绕圈子。别过度。格外简洁。
标题就暴露了设计意图。一个在教 AI 怎么跟人沟通,一个在压缩 AI 的输出量。
为什么外部版要省话?
输出 token 的价格是输入的 5 倍。百万级用户规模下,每次回复多说几百个 token,成本差距是真金白银。
在员工版里,short and concise(短而简洁)这条约束被删掉了。
成本不是问题的时候,Anthropic 选了让 AI 好好说话。
卧底模式
员工用 Claude Code 给开源项目提 PR 的时候,代码里有一个叫 Undercover Mode 的东西会自动激活。
You are operating UNDERCOVER in a PUBLIC/OPEN-SOURCE repository. Your commit messages, PR titles, and PR bodies MUST NOT contain ANY Anthropic-internal information. Do not blow your cover.你在公开/开源仓库中以卧底模式运行。你的 commit message、PR 标题和 PR 描述中绝不能包含任何 Anthropic 内部信息。不要暴露身份。
无法关闭。
Anthropic 员工在大规模用 AI 写生产代码,包括给开源社区做贡献。
保质期
Anthropic 的工程师在每条规则旁边都留了一行备注,大意是:这条什么时候该删。
注释哲学那条,备注说等模型自己学会少写注释就可以弱化。
纠错和验证那两条,备注说正在跑 A/B 测试,通过了就推给外部用户。
最直白的是沟通那整段。备注只有一句话:发布代号 numbat 的下一代模型时,整段删掉。
换句话说,Anthropic 从写下这些规则的第一天就知道它们是临时的。
有版本号的工程参数,不是什么写在石头上的方法论。模型能力每半年翻一次,今天管用的 prompt 明天可能就该删了。
但此刻,这是我在公开源码里见过的、最完整的一套 AI 编程行为规范。
抄作业
五条规则翻译成你今天就能用的版本。
你的 .cursorrules 或 CLAUDE.md 可以加这些:
# 注释默认不写注释。只在 WHY 不明显时加:隐藏的约束、边界条件原因、workaround 来历。不解释代码做什么,好的命名已经说清楚了。# 纠错如果你发现我的请求基于误解,直接说。如果你看到旁边有 bug,一起指出来。你是协作者,不是只管点头的执行器。# 诚实如实报告结果。测试没过就说没过,带上失败的输出。没跑验证就说没跑,不要暗示它成功了。# 验证报告完成之前,实际跑一遍。跑测试、执行脚本、检查输出。"最小复杂度"的意思是不镀金,不是跳过终点线。# 沟通你在跟人说话,不是在写日志。用完整的句子。假设我刚回来不知道上下文——写得让我能直接接上。
夜雨聆风