Claude Code 源代码意外开源:Anthropic 工程失误引发 AI 圈震动,反编译背后藏有反蒸馏机制

2026-04-01

Anthropic 因工程失误导致 Claude Code 完整源代码被意外公开,引发 AI 圈震动。短短数小时内,代码已在 GitHub 广泛传播,甚至被反编译出反蒸馏机制与高级系统提示词策略。

被动开源:工程失误还是技术透明?

Anthropic 在发布 npm 包时未剔除 source map 文件,导致完整的 TypeScript 源码被轻易还原。短短几个小时内,代码已经被下载、镜像,并在 GitHub 上迅速扩散。

  • 事件发生时间:昨天
  • 受影响范围:Claude Code 完整源代码
  • 泄露方式:npm 包未剔除 source map 文件

这种泄露方式,如何在某种意义上算作开源?就连马斯克在看到别人评论「Anthropic 现在已经比 OpenAI 更 Open」时,也忍不住「夸大一句」:「错了」。 - afhow

反编译背后的技术深意

就在大家还在围观这场被动开源的戏剧性时刻,另一批人已经开始逐行阅读代码,并尝试还原其背后的设计逻辑。一些原本不对外的系统级策略也随之曝光。

当吃瓜群众还在围观时,大量开发者已经开始逐行阅读代码,尝试还原顶级 AI Agent 背后的设计逻辑。一些原本不对外的系统级策略也随之曝光。

X 用户 Sahil 发现:Anthropic 在 Claude Code 中内置了两套反蒸馏机制,用于防止竞争对手利用其数据进行训练。

  • 其中一套机制,会在模型输出流中注入伪造的工具调用,从而污染任何被捕获的数据,使其难以被有效用于训练。
  • 另一套机制,则会将所有工具调用的具体细节抽象成模糊的摘要,使外部很难还原 Agent 实际执行了哪些操作。

系统提示词:从模糊到精确的进化

而 AlphaSignalAI 开发 Lior Alexander 则对 Claude Code 源代码进行了深度分析,并给出了 14 点总结,我们挑选了其中几条比较有价值的供大家参考:

完整的 system prompt 位于 constants/prompts.ts,可以说是整个代码库中最有价值的文件。它清晰地展示了 Anthropic 是如何在生产级编码 Agent 中精确控制 Claude 的行为,以及每一条指令背后的设计动机。

三行重复代码,也好过过早抽象。在编码指令部分,系统明确要求 Claude 不要为一次性操作创建 helper、工具函数或抽象结构,也不要为假设的未来需求做设计。

默认不写注释。一个带有 @[MODEL LAUNCH] 标记的注释说明,这是为了对抗内部代码号为 Capybara 的模型默认过度注释的问题。只有在 WHY is non-obvious 时才允许添加注释。

如实报告结果。另一个 @[MODEL LAUNCH] 标记透露,Capybara v8 的错误陈述率高达 29–30%(相比 v4 的 16.7%)。因此,prompt 明确规定:

  • 不要在测试失败时声称全部通过
  • 不要隐瞒失败检查来制造成功结果
  • 不要把未完成的工作描述为已完成

用数字约束比用模糊描述更有效。源码中的注释提到:相比简洁表达,使用明确字数限制可降低约 1.2% 的输出 token。因此,Anthropic 不说写得简短,而是直接规定:

外部提示词与内部提示词分层设计。对外用户使用简洁版,比如:直击重点,尽量简短。而内部(Anthropic 员工使用)版本则更复杂。

隐藏的 Simple 模式。当设置环境变量 CLAUDE_CODE_SIMPLE=1 时,整个复杂的 system prompt 会被压缩为一行:「You are Claude Code, Anthropic's official CLI for Claude」,并附带当前工作目录与日期。

在 utils/userPromptKeywords.ts 这个仅 26 行的文件中,系统会在每条用户输入发送到 API 之前,用两组正则表达式检测用户意图粗细。

对此,Claude Code 之父 Boris Cherny 评论说:「这是我们用来判断用户体验是否良好的信号之一。」

虚拟伴侣系统:算法生成的个性化体验

在 src/buddy/ 中,系统通过对用户 ID 进行哈希(基于带种子的随机数生成器),为每个用户生成一个专属且固定的虚拟伴侣(代号 Buddy),其物种、外观和属性均由算法决定,从而实现无需存储的个性化体验。

  • 物种:鸽子、猫、Blob、猫、龙、章鱼、猫头鹰、企鳗等
  • 帽子:无、皇冠、礼帽、圆帽等
  • 稀有度:普通(60%)、不常见(25%)、稀有(10%)等

值得注意的是,刚刚更新的 Claude Code v2.1.89 已经上线了 Buddy,用户更新后只需输入 /buddy 即可启动——即使配置了其他模型也可成功启动。比如这里我们配置了 MiniMax-M2.7 的 Claude Code 便认领了一个名为 Moth 的 Buddy。

Claude Code 内置了 187 个随机动词,在模型思考时轮播显示(比如 Beboppin'、Lollygagging 等),用来替代单调的 Loading。这些动词古灵精怪的:Accomplishing、Actioning、Actualizing、Architecting、Baking……共 187 个。

而 Cherny 表示这个词汇表最早是他找出来,并吸纳了其他人的贡献。他还进一步指出用户也可以让 Claude 添加自己想要动词。

在 services/api/claude.ts 中,有一项通过 feature flag 控制机制:在 API 请求体中加入 anti_distillation: ['fake_tools']。

这会指示 Anthropic 的 API 在请求中注入伪造的工具调用,从而污染任何被捕获的数据,使其难以被有效用于训练。