Hermes 与 Claude Code
两套顶级 AI 智能体系统的架构解剖 · 从零基础讲起 · 240 万行源代码实读
写给完全没有人工智能背景的读者。你不需要事先知道什么是「大语言模型」,不需要知道什么是「token」,也不需要会写 Python 或 TypeScript 代码。
但这份文档不会因此降低技术深度。它讲的仍然是这两套系统里最硬核的实现细节 —— 只是每一个概念在第一次出现时都会先解释清楚,每一个缩写都会写全称,每一处「它」「这个」都会换成明确的名字。
阅读顺序建议:第 1 章必读,它把后面所有章节需要的概念一次性建立起来。之后的章节可以按兴趣跳读。如果读到某个术语想不起来是什么意思,翻到最后一章的术语表查一下。
这个网页怎么用
用鼠标选中正文里的任意一段文字,旁边会浮出一个「提问」按钮。点击它,写下你的问题,发送。
问题不会进入一个论坛,也不会等某个人看邮件:它会被送到作者本地正在运行的 Claude Code 会话里(Claude Code 是一个在终端里运行的编程助手,也是这份文档的写作工具)。那个会话会读到你划的那句话、它前后的原文和你的问题,然后回答。答案会出现在你划线的那段文字下方,刷新页面就能看到;右侧「讨论」栏里列着这篇文档收到的全部问题和回答。
更重要的是:如果你的问题暴露的是文档没写清楚,助手会顺手改掉那一段并重新发布。你会在问题下方看到「v几 已据此修订」和具体改了哪几句。一个问题就是一份关于写作的缺陷报告,这正是这个网站存在的目的。
阅读不需要账号;只有在你点下「提问」的那一刻才需要登录。登录回来后,你选好的段落和写了一半的问题还在原处。
正文里的架构图可以点击放大,按键盘上的 Esc 键关闭放大视图。
材料从哪里来
这份文档分析的是两套真实的、正在被大量使用的软件的源代码。所谓源代码,就是程序员写下的、可以被人类阅读的程序文本 —— 相对于我们平时下载安装的、已经被翻译成机器语言的可执行程序而言。
| 项目名称 | 它是什么 / 源代码怎么来的 | 代码规模 |
|---|---|---|
| Hermes | 全名 Hermes Agent,由一家叫 Nous Research 的人工智能公司在 2026 年 2 月 25 日主动公开发布的开源项目。「开源」的意思是:作者把源代码免费公开,允许任何人查看、修改和使用。它采用 MIT 许可证,这是最宽松的一种开源许可证。 用 Python 语言编写。发布 8 周后在代码托管平台 GitHub 上获得约 9.9 万个收藏(GitHub 上称为 star),6 月突破 17.5 万。 |
4,772 个 Python 文件 191.8 万行代码 |
| Claude Code | 由 Anthropic 公司开发的命令行编程助手。它不是开源项目 —— 但在 2026 年 3 月 31 日,它的完整源代码因为一次配置失误而意外泄露:软件发布时附带了一个叫「source map(源代码映射文件)」的调试文件,这个文件里指向了完整的、未经压缩的原始源代码。 用 TypeScript 语言编写,运行在一个叫 Bun 的运行环境上。 |
1,902 个 TypeScript 文件 51.2 万行代码 |
Claude Code 的源代码是一次泄露事件的产物,泄露之后被大量复制传播、被公开讨论。这份文档做的事情是架构分析与设计思路还原 —— 也就是讲清楚「这个系统为什么这样设计」「这样设计的代价是什么」「换成你自己的项目该怎么权衡」,而不是搬运和复制它的实现代码。
这也恰好是求职面试中唯一真正有价值的那部分内容:没有面试官会问你能不能背出某个函数的写法,他们只会问你遇到同类问题时会怎么权衡取舍。
为什么挑这两个来分析
因为它们代表了 AI 智能体系统的两种完全相反的设计哲学。把两者放在一起对照着看,比单独看任何一个都更有启发。
Claude Code —— 收敛型设计
- 深度绑定单一模型供应商。整套系统围绕 Anthropic 公司提供的接口能力做垂直优化,把这家公司特有的功能榨到极致。换成别家的模型,大部分代码要重写。
- 关键机制写死在内部,不允许替换。比如管理对话长度的策略是一条硬编码的五级流水线,外部开发者改不了。
- 只服务一个场景:一个程序员坐在终端窗口前写代码。所有的设计取舍都指向两个目标 —— 让响应更快、让花的钱更少。
Hermes —— 发散型设计
- 不绑定任何模型供应商。系统内部有一个专门的适配层,屏蔽了十几种不同人工智能服务之间的差异,用哪家的模型都行。
- 到处都是可替换的插件接口。管理对话长度的策略、记忆的存储方式、消息平台的接入方式,全都定义成了标准接口,第三方可以整个换掉。
- 服务的场景是:一个长期在线的自主智能体,可以从 22 个不同的聊天软件被找到。设计取舍指向的是持久运行、多入口接入和自我演化。
一种做法是把复杂度吞进系统内核,换来极致的性能;另一种做法是把复杂度推到接口边界,换来生态的扩张。做服务端的智能体开发,这两条路你都会遇到,而且大概率要在两者之间选一个立场 —— 这也正是技术面试中最容易拉开差距的地方。