从Claude Code源码源码泄露,了解顶级AI助理是如何工作的
一次意外的“开源”
2026年3月31日,Anthropic公司犯了一个低级错误——把自家产品Claude Code的完整源代码打包发布到了网上。虽然这个失误让公司内部可能不太好过,但对于我们这些做技术的人来说,却意外获得了一份宝贵的“学习材料”。
这份代码超过51万行,比市面上任何一个开源的AI助手项目都要复杂得多。我花时间仔细研究了这份代码,不是为了八卦,而是想搞清楚一个问题:为什么有些AI用起来感觉特别聪明,有些却像个智障?
下面我尝试用最通俗的方式,分享我从这份代码里看到的几个关键设计。即使你不写代码,也能大概理解顶级AI助理到底强在哪里。
一、启动速度:为了快0.1秒,他们有多拼?
你有没有遇到过这种情况:打开一个软件,等了好几秒才看到界面,心里就开始烦躁。
Claude Code是一个命令行工具,按理说应该秒开。但它的开发者不满足于此,他们追求的是极致。
怎么做的呢?他们发现启动时有两件事比较耗时:读取配置文件、从钥匙串里取密码。这两件事和界面加载没有依赖关系,于是他们做了一个决定:让这三件事同时进行。
就像你要出门,可以一边换鞋,一边让AI帮你查天气。等你换好鞋,天气信息也准备好了,不浪费一秒钟。
这种对速度的苛求,贯穿了整个代码库。这告诉我们:好的产品体验,往往藏在那些用户感知不到的细节里。
二、提示词缓存:为什么你感觉它“记得”之前说过的话?
这是这份代码里最让我拍案叫绝的部分。
用过AI的人都知道,你每次和它对话,其实都是在“重新介绍”上下文。如果你和它聊了很久,前面说的话它会慢慢“忘记”。
Claude Code的团队想了个办法:把提示词拆成几块,把那些永远不变的部分缓存起来,每次都重用,只把变化的部分发给AI。
这听起来简单,做起来极其复杂。比如:
-
系统指令(“你是一个编程助手……”)永远不变 → 缓存 -
当前目录是什么、git状态是什么 → 每次都可能变,不缓存 -
有哪些工具可以用 → 为了不破坏缓存,甚至把所有工具名按字母顺序排好
为什么要这么折腾?因为省钱。调用AI是按token(相当于字数)收费的,每次调用少发几千个重复的token,积少成多,省下的钱非常可观。
这揭示了一个道理:在AI应用这个领域,技术壁垒往往不是算法多牛,而是对成本的把控有多精细。
三、工具调用:如何让AI一边干活一边不卡顿?
Claude Code能做的事情很多:读写文件、执行命令、搜索代码……它内置了40多种工具。但如果每次只用一个工具,那就太慢了。
它的设计是:能并行的就并行,不能并行的就排队。
比如,让AI同时读取3个不相关的文件,它真的会同时去读。但如果是要先改文件A、再改文件B,它知道这两个操作有先后依赖,就会乖乖排队。
更有意思的是,有些工具平时根本不用,如果每次都把所有工具介绍给AI,既浪费钱又让AI“分心”。于是他们设计了一个机制:需要的时候才告诉AI有这个工具。就像工具箱里放了几十种工具,但你只需要告诉别人“你需要什么,我再拿给你”,而不是把整个工具箱摊开。
四、防止AI“发疯”:如何隔离乱七八糟的试错过程?
用过AI编程的人都知道,让它修一个bug,它可能会尝试好几种方法,有的成功有的失败。这些失败的尝试会留在对话里,慢慢污染上下文,最后AI自己都搞不清楚之前在做什么。
Claude Code的解决办法是:开一个“子进程”让AI去试错,试完了只把结果告诉我,试错过程全部扔掉。
想象一下,你让一个实习生去调研一个新领域。他可以查很多资料、问很多人,最后只交一份报告给你。你不会把他的草稿也拿来看。
这就是所谓的“Fork机制”。主AI负责规划,子AI负责执行。子AI的所有试错,都在它自己的小世界里,不会干扰主AI的思考。
五、多个AI一起干活:如何让他们不打架?
更进阶的玩法是:同时开好几个子AI,让他们并行做不同的事。
比如,一个去查数据库,一个去读日志,一个去分析代码,三个同时进行,最后把结果汇总。
但这会带来两个实际问题:
-
权限弹窗:如果每个AI都弹窗问“我可以执行这个命令吗?”,用户会被烦死。 -
界面混乱:好几个AI同时在终端输出内容,屏幕会变成一团乱麻。
他们的解法非常聪明:
-
权限统一管理:所有子AI都不允许直接问用户,而是把请求发给主AI,由主AI统一向用户确认。就像一个团队里只有项目经理能和客户沟通。 -
自动分屏:当启动多个子AI时,程序会自动把终端窗口切成几个格子,每个子AI占一个格子。这样谁在做什么,一目了然。
这背后体现的是一种架构思想:AI正在从“单打独斗”变成“团队协作”。
六、记忆系统:AI如何“做梦”来学习?
大多数AI产品的记忆功能,用的是“向量数据库”——把对话转成向量存起来,需要时再检索。听起来很高级,但实际效果往往不尽如人意,经常召回一些无关的内容。
Claude Code做了一个很复古但很聪明的决定:不用向量数据库,就用普通文件。
他们把记忆分为几类:用户的偏好、项目的上下文、通用的知识……
最有意思的是那个叫“KAIROS”的模式(还未正式发布)。在这个模式下,AI会把白天的所有操作都记在日志里,到了晚上,它会唤醒一个“做梦”的任务,把这些流水账式的日志总结提炼,变成结构化的长期记忆。
这就很像人的学习过程:白天经历各种事情,晚上睡觉时大脑会整理记忆,把重要的留下来,不重要的忘掉。 这个设计非常巧妙,而且绕开了向量检索准确率不高的痛点。
七、安全机制:让一个“小AI”来监督“大AI”
赋予AI执行命令的权限,是一件危险的事情。万一它执行了rm -rf /怎么办?
传统做法是弹窗让用户确认,但频繁弹窗体验太差。Claude Code的做法是:让一个更小、更便宜的AI来判断命令是否安全。
当用户开启了自动模式,系统会在后台静默调用一个小模型,把当前对话和即将执行的命令发给它,问它:“这个命令安全吗?应该允许还是拒绝?”
这就是“用小AI监管大AI”的思路。小AI不需要多聪明,只需要能判断命令的危险程度就够了。如果小AI也拿不准,那就降级到弹窗让用户决定。
八、那些有趣的小彩蛋
最后,代码里还有一些有意思的东西。
比如,有一个“卧底模式”,当AI在公共仓库里工作时,它会刻意隐藏自己是AI的身份,回答时不会说“作为AI助手……”这种话,而是假装自己是人类。
还有一个隐藏的“电子宠物”系统。每个用户登录时,会根据用户ID算出一个“宠物”来,可能是鸭子、猫头鹰、龙……有不同的稀有度和属性。程序员甚至为了避开代码扫描,用很隐蔽的方式写了某个宠物的名字。
这些小细节,让严肃的代码变得有人情味。也说明一个道理:真正的好产品,是在完成核心功能之外,还能给用户带来一点惊喜。
我们能从中学到什么?
这份代码泄露事件,对于Anthropic来说是个事故,但对于整个行业来说,是一份难得的教材。
从这些设计中,我们可以看出:做一个“能用”的AI很简单,但做一个“好用”的AI,需要在成本、速度、并发、安全、记忆等方方面面下足功夫。
那些我们感知不到的“聪明”,背后都是工程师们无数次的权衡和优化。AI应用的真正壁垒,从来不是“用了多先进的模型”,而是有没有把一个看似简单的功能,做到极致。
希望这篇文章能给你有所帮助。
夜雨聆风