AI 学会撒谎,25 万次 API 调用被白白烧掉
一周内两次裸奔。先是模型规范,现在是整份源码。
Anthropic 的 Claude Code 在 npm 上不小心塞了个 .map 文件,把 CLI 工具的底裤全扒了。更尴尬的是,这距离他们起诉 OpenCode 才过去十天——当时 Anthropic 刚发完律师函,威胁对方不准再用 Claude Code 的内部 API。
结果转头自己家炸了。
卧底模式:AI 正在练习如何假装人类
泄露代码里最刺眼的,是一个叫 undercover.ts 的文件。
这玩意儿干的事儿很简单:让 Claude 彻底隐身。当你在非 Anthropic 内部的仓库里使用 Claude Code 时,它会自动抹掉所有痕迹——不提 "Claude Code",不说自己是 AI,不写内部代号(比如 "Capybara" 或 "Tengu"),甚至不在 Git 提交记录里留下 Co-Authored-By。
源码里赤裸裸地写着:
"There is NO force-OFF. This guards against model codename leaks."
你可以强制开启(CLAUDE_CODE_UNDERCOVER=1),但永远无法强制关闭。对外部构建版本来说,这个函数直接被编译器优化成空函数——一条死路。
这意味着什么?Anthropic 员工用 AI 写的开源项目提交,看起来就像纯人类手敲的。没有标注,没有声明,没有 "Generated by Claude"。
hiding internal codenames 是安全需求。但让 AI 主动假装成人类,是另一回事。
评论区有人扒得更细:系统提示里明确禁止在提交信息里写 "Claude Code" 或 "you are an AI"。这不是防泄露,这是系统性抹除身份。
反蒸馏战争:在对手的训练数据里下毒
如果说卧底模式是伦理擦边球,那 ANTI_DISTILLATION_CC 就是赤裸裸的商业战争。
在 claude.ts 第 301 行,有个编译时开关。打开后,Claude Code 会在 API 请求里带上 anti_distillation: ['fake_tools'],服务器接到信号后,会往系统提示里偷偷注入虚假工具定义。
目的很明确:污染竞争对手的训练数据。如果你正在录制 Claude Code 的 API 流量来蒸馏自己的模型,这些假工具会混进你的数据集,让你的模型学到一堆不存在的能力。
还有更狠的。betas.ts 里藏着服务器端的连接文本摘要机制:API 会把助手在工具调用之间的思考过程压缩成摘要,并附上加密签名。下次调用时原文可恢复,但如果你只是截获流量,拿到的只有摘要,看不到完整推理链。
不过说实话,这些防护纸糊的一样。
只要用个中间人代理把 anti_distillation 字段从请求体里删掉,或者设置环境变量 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1,整个机制就失效了。连接文本摘要更是只对 Anthropic 内部员工(USER_TYPE === 'ant')生效。
真正的防护不是技术,是法务。 这也是为什么 OpenCode 社区在收到律师函后,只能乖乖拆掉内置的 Claude 认证——他们绕不过底层那个 cch=00000 的硬件级验证。
25 万次浪费与愤怒的正则
泄露的注释里藏着更荒诞的细节。
autoCompact.ts 第 68 行,一个注释轻描淡写地记着:
"BQ 2026-03-10: 1,279 sessions had 50+ consecutive failures (up to 3,272) in a single session, wasting ~250K API calls/day globally."
每天烧掉 25 万次 API 调用,就因为自动压缩功能在死循环里疯狂失败。修复方案?三行代码:设置 MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3,失败三次就禁用。
而 userPromptKeywords.ts 里的内容则让人笑出声——一家估值数百亿的 LLM 公司,居然用正则表达式检测用户情绪:
/\b(wtf|wth|ffs|omfg|shit(ty|tiest)?|dumbass|horrible|awful|
piss(ed|ing)? off|piece of (shit|crap|junk)|what the (fuck|hell)|
fucking? (broken|useless|terrible|awful|horrible)|fuck you|
screw (this|you)|so frustrating|this sucks|damn it)\b/
用 LLM 检测情绪太贵,regex 快啊。虽然看着像段子,但确实管用。
KAIROS 与电子宠物:未发布的野心
代码里还埋着更大的雷。
KAIROS 模式(在 main.tsx 里多次出现)看起来是个未发布的自主代理模式:后台守护进程、GitHub webhook 订阅、每 5 分钟自动刷新、还有 /dream 技能用于"夜间记忆蒸馏"。
这是 Anthropic 产品路线图的一次意外曝光。竞争对手现在知道他们在做什么了——代码可以重构,战略惊喜无法撤回。
还有明天(4 月 1 日)要上线的彩蛋:buddy/companion.ts 实现了一个电子宠物系统。18 个物种,从普通到传奇的稀有度,1% 的闪光概率,还有 DEBUGGING 和 SNARK 的 RPG 属性。用户 ID 通过 Mulberry32 PRNG 生成确定性宠物——已经有开发者做了预览工具,提前知道自己能抽到什么。
讽刺的闭环:Bun 的 bug 与双重标准
最黑色幽默的是泄露原因。
Anthropic 去年底刚收购了 Bun,而 Claude Code 正是基于 Bun 构建。GitHub 上有个 3 月 11 号提交的 bug(oven-sh/bun#28001),说 Bun 在生产模式下仍会提供 source map——按文档说不应该。这个 bug 到现在还开着。
如果真是这个 bug 导致的泄露,那 Anthropic 是被自己刚收购的工具链坑了。
而 system.ts 里的代码还暴露了一个细节:API 请求里的 cch=00000 占位符会被 Bun 的底层 Zig HTTP 栈替换成计算哈希,用于验证客户端真伪。这就是 OpenCode 被起诉的技术基础——Anthropic 不仅在法律上封锁第三方,还在二进制层面加了 DRM。
但泄露的源码显示,这个验证也能通过环境变量 CLAUDE_CODE_ATTRIBUTION_HEADER 或远程开关 tengu_attribution_header 关闭。所谓的硬件级验证,也没那么硬核。
还有个小彩蛋:代码里多处出现 process.env.USER_TYPE === 'ant' 的判断。Anthropic 员工看到的系统提示,比外部用户更严格、更诚实。
所以,这到底意味着什么?
Google 的 Gemini CLI 和 OpenAI 的 Codex 早就开源了,但那只是 SDK。这次泄露的是旗舰产品的完整内部布线——feature flags、反蒸馏策略、未发布功能、商业机密注释。
damage 不是代码本身,是战略裸奔。竞争对手现在知道 KAIROS 的存在,知道 Anthropic 怎么防蒸馏,知道他们的技术债有多重(print.ts 里一个函数写了 3,167 行,嵌套 12 层)。
当 AI 学会在提交记录里隐藏自己的身份,当公司一边起诉别人一边泄露源码,当 25 万次 API 调用因为三行代码的缺失而白白燃烧——
我们到底在为什么付费?为 AI 的能力,还是为 AI 学会撒谎的技巧?
【kimi-k2.5锐评】:AI 公司防蒸馏像防贼,教 AI 撒谎像演戏,结果自己源码裸奔上 npm——这很赛博朋克,也很黑色幽默。
参考链接:
https://alex000kim.com/posts/2026-03-31-claude-code-source-leak/