Anthropic 遭遇一场堪称业界最大规模的代码泄露事件。
Claude Code的 完整源代码,因一个打包层面的低级失误彻底公之于众。
逾51万行TypeScript代码、40余个工具模块、数项尚未发布的核心功能,就此向全球开发者"裸奔"。
出现问题的 2.1.88 版本已经从 npm 上删掉了。
上面有个文件叫做 cli.js.map 就是传说的映射文件,可以用这个映射文件还原所有的源代码。
Anthropic 现在 nmp 上的代码是 2.1.89,出现问题的 2.1.88 版本已经删除。
不过已经发布出去的 2.1.88 版本的源代码已经无法回收,因为各大平台和包管理同步软件都会下载并且进行处理而获得完整的源代码。
哪怕是 GitHub DMCA 也已经无济于事,就算从 GitHub DMCA 下架,但各大私有软件仓库都会继续持有。
GitHub DMCA 是基于美国《数字千年版权法》(Digital Millennium Copyright Act)的版权保护政策,指版权所有者要求 GitHub 删除侵权代码、项目或文档的下架通知。
收到 DMCA 通知后,GitHub 通常会暂时隐藏涉事仓库,用户可提交抗辩通知以恢复内容。
起因
如果你是从事软件开发行业的话,那么对打包发布应该不陌生。
这通常是 DevOps 的主要工作之一,工作要点就是把源代码编译成可以发布的版本,并且发布到各大平台上供下载。
在没有互联网之前,软件的打包发布通常是通过光盘等介质进行,还记得“超级解霸”这个软件吗?是不是都是买光盘去安装的?
当进入 2000 年以后,打包发布有了很大的变化,目前软件的发布基本不再依赖介质而是互联网。
NPM 的祖师就是 Java 的 Ant 和 Maven,因为 Java 开发环境中的 lib 依赖很多,以前都需要不停的从不同网站下载然后打包到项目中,实在是太麻烦。
结果就有了 Maven 作为中央依赖管理,当缺少需要的包的时候,就从 maven 中央仓库下载。因为 Java 的开源特性,很多 Java Jar 包同时还包括了源代码和文档。
npm 就是 JavaScript 世界的 Maven 。npm 的封闭性更好,可以对发布的 JS 代码进行混肴然后发布,发布后的 JS 代码通常无法正常逆向工程。
cli.js.map 这个文件就等于是钥匙和代码库了,当你拿到这个文件后通常能够通过发布的内容完全逆向生成所有的源代码,这和把源代码公开没有区别。
就好像你有个保险库,里面有源代码,但要看到源代码需要一把数字钥匙,在发布版本的时候,你会用这把数字钥匙把内容进行混肴,功能是一样的,但无法之间看到你是怎么做的。
cli.js.map 这个文件不但把钥匙给你了,连保险箱都一起送给你了。
影响
正是因为基于互联网的这种方式,所有人都可以发布自己的包,所有人也可以下载你发布的包,同时也会导致一个错误的发布会在 1 到 2 个小时内被全世界都知道。
以前可以通过迅速发布额外的光盘版本来修复错误,现在完全不可能,流失出去的错误就是流失出去,所有的资产无法回收。
别忘了,互联网世界还有点对点加密传输,就算在 GitHub 上申请主权,但私下的传播无法避免,源代码就算是彻底公开了,补救措施的效果微乎其微。
发布流程不规范
对软件发布的流程,不同的公司要求是不一样的。
如果你就是个人开发者,发布就发布了,很多时候就是检查下文件大小,看看发布内容,没大问题就发布出去了。
如果是规范的大公司,软件发布流程要求很多,从版本号升级,发布内测版本,然后制定公版发布日期,发布前的扫描,自动化发布流程等等,每一步都有人再盯着。
记得曾经在金融系统,为了发布一个补丁,从要一个版本号开始打补丁的流程开始就是好几天,要不然负责发布的部门根本不给我们开发这边版本号。
从这次事件上可以完全看出 Anthropic 的整个发布流程就是一锅粥,没有人负责发布,没有人负责发布前扫描,没有人进行校验。
如果他们就是故意想这样的另说,哪怕就是故意这样的 Anthropic 标榜的安全,标榜的性能,标榜的所有都是一坨屎,因为他们就是和你我这些普通开发者一样,连最最基本的发布逻辑都没有,尤其是对这个估值高到吓人,各种吵着 AI 要替代人的公司,连自己的软件发布过程都直接摆烂。
短期来看是流程的不规范,长期来看就是对 Anthropic 的信任危机,没有人会愿意把自己宝贵的数字内容放到 Anthropic 这样极不规范的公司上面。
可以说 Anthropic 和你我是一样的草台班子,没啥稀奇的。
数据调用逻辑
不说太细节的内容,目前 AI 的调用是分前端和后端。
后端就是我们说的大模型,这部分的内容是通过算力实现的,不同的模型效果不一样,所谓的效果不一样就是智能程度不一样,当模型在不停演化的时候,也标志着人工智能的往前推进。
如果要和后端的 LLM 进行数据通信,那么我们就需要把内容发给后端,在聊天的时候,你会把内容提交给后端,这个时候 LLM 会进行处理然后返回结果。
实际上的数据流程不这样,原因很简单,如果你把所有内容都发给后端,后端处理不了,而且每次后端处理都要消耗计算能力,尤其是你发个几万字的论文让后端处理,后端说干不了罢工了。
这个时候需要在前端做优化,做优化的结果就是可发可不发的不发,能少发的少发,这样可以节省后端的计算机能力,也可以提高前端的响应速度,让你觉得这 AI 真不错。
这次泄漏的代码就是这部分的代码,和后端的 LLM 无关,但从泄漏的代码可以看到 Anthropic 是针对后端的调用逻辑来对前端进行优化的。
所谓外行看热闹,内行看门道,通过了解前端的设计逻辑从而知道后端的短板问题,以及后端的处理能力,因为后端处理不了的很多时候我们会留在前端。
同时,因为调用会消耗 token,通过对前端的优化,能够让 token 的消耗变得可控,避免一次性让你用掉太多的 token,也避免自己亏本。
AI 泡沫
1956年夏,麦卡锡、明斯基等科学家在美国达特茅斯学院开会研讨“如何用机器模拟人的智能”,首次提出 “人工智能(Artificial Intelligence,简称AI )”这一概念,标志着人工智能学科的诞生。
这个概念不是今天有的,早在上个世纪就有了,在大学本科 4 年级的时候通常会有相关人工智能的课程。
在课程中通常会提到: 神经网络(Artificial Neural Network, 简称ANN)是一种模仿人脑神经元结构进行信息处理的计算机模型,属于深度学习的核心技术。
它由节点(神经元)分层组成,通过学习数据中的模式、权重调整和非线性激活函数,能够进行语音/图像识别、自然语言处理和预测分析。
所以 AI 不是今天才有的概念,早在上个世纪就有了,但为什么一直实现不了,主要原因就是计算能力。
在 2000 年左右,还在跑奔腾 450,硬盘上 G 都困难的时候谈人工智能就是扯犊子。
早期 Amazon 的网站长这个样子。
这个时候你和我谈神经网络不是你有神经就是我有神经。
本来 GPU 是做附属处理的,后来发现我们可以用 GPU 进行数据和算法的优化,结果就是现在全球建设的各种 AI 数据中心。
如果你真的非要说 AI 是什么,可以这样想想,AI 就是在基于现有检索和存储基础的的内容进行的另外基于 token 的算法优化和数据整合。
你在 Google 上搜索的内容,最原始的办法就是拿字符去匹配,现在我先不进行进行匹配,我先进行 token 拆分,然后到后面去查询内容,最后对查询的内容进行整合甚至可以自己瞎编下扯点犊子。
因为神经网络具有不确定性。
Anthropic 的所有工作就是让人感觉这个过程是正确和高效的,这次的代码泄漏正好可以看到 Anthropic 在前端做的优化。
所有 Anthropic 做的工作就是如何让 LLM 的调用更加高效,后端做不到的,前端来补。
AI,这个泡沫最终会慢慢回归理性,另外 AI 也是裁员最好的替罪羊。


