
我拆了一个开源Agent项目Hermes v0.17,核心代码就400行Python,但在做的事情非常硬核:
- 同时管理 20+大模型
- 驱动 70+工具(通过MCP Server还能无限加)
- 覆盖 6个入口(CLI/IDE/HTTP/Telegram/Discord/飞书)
- 自带 四层Memory
- 支持 多Profile并行 + 定时任务
就400行。没有花活。
传统Agent框架最费代码的地方是状态管理。Planning→Executing→Observing→Reflecting,每个阶段都要写分枝逻辑。状态一多,代码就炸。
Hermes直接把这个部分砍了。它的执行循环是这样:
调用模型 → 模型说要调用工具 → 执行工具 → 结果丢回给模型
没了。没有状态枚举,没有状态转移。模型自己从上下文里判断下一步该干什么——代码只负责提供能力。
这叫"隐式状态机"。我在自己项目里试过这种思路,坦白说第一次用有点慌——总觉得不写if-else不踏实。但用下来发现LLM的状态感知能力确实比手写的逻辑好用。
另一个让我印象很深的设计:会话开始后System Prompt 绝对不改。
大多数Agent框架会在执行中动态注入Prompt(比如发现错误加纠正指令)。Hermes不这么做,理由是Prompt稳定 = Cache命中高:
- 命中的Prompt几乎零成本
- 不需要每轮传输完整System Prompt
- 模型行为也更稳定
比起那些复杂的Prompt压缩算法,这个"不做"的思路反而效果更好。
所有模型调用走统一抽象层。用OpenAI格式的走OpenAI Provider,用Gemini格式的走Gemini Provider。多Key自动轮换,主模型挂了自动切备用。
关键:业务代码完全不感知底层用的哪个模型。今天跑GPT-5,明天换Claude,后天换自部署模型——代码一行不改。
所有工具通过统一Registry管理。LLM返回工具名+参数,Dispatcher负责查找执行。支持MCP Server动态注入,工具数量可以无限增长。
但有一个反直觉的设计:Hermes自己不做工具排序、不做相关性过滤、不做安全检查。它相信LLM有能力选对工具——框架不替模型做决定。
四层Memory:
层级存什么怎么用 User Profile你是谁、偏好每次自动加载 Session Memory当前对话会话级上下文 Long Memory跨对话重要事实检索增强 Hindsight从历史提取的经验Agent自进化
Hindsight这层特别有意思。它不是简单存摘要,而是从历史交互中提取结构化经验——"这个工具在这种场景下好用"、"这个模型不擅长这类任务"。Agent真的在越用越聪明 📈
Hermes支持同时跑多个Profile,每个Profile独立Config/独立Memory/独立Skills/独立定时任务。
比如你可以同时跑: Hermes ├── coder(写代码的Agent) ├── pm(管需求的Agent) ├── qa(做测试的Agent) └── writer(写文案的Agent)
加上Delegate任务拆分和Cron定时执行,多个Agent可以组成自动化流水线。
Hermes v0.17不是最复杂的Agent框架,但可能是最"干净"的。它的核心哲学就四条:
1. Cache First — Prompt稳定>一切花活
2. LLM自愈 — 让模型自行处理错误,不用框架try-catch 3. Provider无关 — 模型只是可替换的零件 4. 渐进增强 — 系统越用越强,不是一次交付
如果你也在做Agent方向的开发,花半小时看一遍run_agent.py那400行代码,比看十篇Agent评测文章都值 👍