系列:Hermes Agent 源码探秘 作者:元思未来 字数:约2800字
引子
你用过 ChatGPT、Claude、文心一言吗?
大概率用过。但你想过没有:这些大模型对话产品,和"AI Agent"有什么区别?
如果你是一个程序员,最近一定经常看到这几个词:
- AI Agent(AI代理/智能体)
- Agentic AI(代理式AI)
- Tool Calling(工具调用)
- 自主Agent(Autonomous Agent)
听着很玄乎,但拆开来看,核心逻辑其实很简单。这篇文章我会用一个真实开源项目——Hermes Agent——来给你讲清楚。
而且这篇文章会是一个系列的开端,一共10篇,从易到难,从使用到源码拆解,带你彻底搞懂一个AI Agent是怎么工作的。
一、先搞懂:AI Agent 到底是什么?
ChatGPT 和 AI Agent 的区别
你用 ChatGPT 的时候流程是这样的:
你问一个问题 → ChatGPT 在脑子里想答案 → 输出文字
这叫 LLM(大语言模型)。它只做一件事:生成下一个字。
但 AI Agent 是这样的:
你给一个任务 → AI 思考需要什么 → 调用工具(查资料/写代码/发请求)
→ 看结果 → 再思考 → 再调用工具 → 直到任务完成 → 输出最终结果
这叫 Agent Loop(代理循环)。它会主动调用工具、观察结果、调整下一步。
一个会说,一个会做。区别就这么大。
举个具体的例子
普通ChatGPT:
你:今天天气怎么样?
ChatGPT:抱歉,我无法获取实时天气数据,建议你打开天气App查看。
AI Agent(Hermes):
你:今天天气怎么样?
Hermes:我来查一下。(调用天气API)
Hermes:北京今天多云,15-22°C,东南风3级。
区别在哪?Agent会自己去调用工具获取信息,而不是只靠训练数据里的知识。
二、Agent 的核心运行机制
所有 AI Agent 不管长什么样,核心都是这个循环:
┌─────────────────────────────────────────────────┐
│ Agent Loop │
│ │
│ 用户输入 → LLM思考 → 决定: │
│ ├─ 回复文字 → 返回给用户 → 结束本轮 │
│ └─ 调用工具 → 执行工具 → 结果喂回LLM → 继续 │
│ │
│ 重复直到:任务完成 / 达到最大轮数 / 用户中断 │
└─────────────────────────────────────────────────┘
用伪代码写出来就这几行:
def run_conversation(user_message):
messages = [system_prompt, user_message]
for i in range(max_iterations):
response = llm.chat(messages, tools=available_tools)
if response.has_tool_calls():
for tool_call in response.tool_calls:
result = execute_tool(tool_call.name, tool_call.args)
messages.append(tool_result(result))
# 继续循环,让LLM看结果后决定下一步
else:
# LLM决定直接回复,结束
return response.text
就是这样。 一个 AI Agent 的核心,简单到令人惊讶。
当然,真正生产级的实现要复杂得多——错误处理、重试、上下文压缩、记忆注入、权限控制——但最核心的逻辑就是上面这个循环。
三、为什么选 Hermes Agent 来拆解?
市面上有很多 AI Agent 项目,我为什么选 Hermes?
理由1:开源且完整
Hermes Agent 是 Nous Research 开源的,代码在 GitHub 上。它不是玩具项目,而是生产级的框架:
- 20+ 工具集(文件操作、终端执行、浏览器、搜索、图片生成等)
- 15+ 消息平台适配(微信、Telegram、Discord、Slack 等)
- 内置定时任务系统
- 内置技能系统(让Agent学会新技能)
- 持久化记忆
- 子代理机制
理由2:架构清晰,适合学习
作为程序员,最怕的是一打开项目几千个文件不知道从哪看起。Hermes 的代码结构非常规整:
run_agent.py # Agent核心循环
tools/registry.py # 工具注册中心
tools/*.py # 各个工具实现
agent/prompt_builder.py # 系统提示词组装
gateway/platforms/ # 各平台适配器
每个模块职责单一,非常适合作为学习AI Agent架构的教材。
理由3:它是"活的"
这不是一个归档项目,而是每天都在被使用和开发的项目。我每天就在用 Hermes 写代码、查资料、管理项目。这意味着你看到的每一行代码都在生产环境中运行着。
四、一个全景图:Hermes 的整体架构
先给你一个全貌,后续每篇文章会深入一个模块:
┌─────────────────────────────────────────────────────────┐
│ 用户交互层 │
│ CLI (终端) │ Gateway (微信/Telegram/Discord/...) │
└───────────────────────┬─────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ AIAgent 核心循环 │
│ run_conversation() │
│ ┌───────────────────────────────────┐ │
│ │ System Prompt 组装 │ │
│ │ → prompt_builder.py │ │
│ ├───────────────────────────────────┤ │
│ │ LLM 调用 (20+ Provider) │ │
│ │ → run_agent.py → OpenAI API │ │
│ ├───────────────────────────────────┤ │
│ │ 工具调度 │ │
│ │ → model_tools.py │ │
│ └───────────────────────────────────┘ │
├─────────────────────────────────────────────────────────┤
│ 子系统 │
│ 工具集 │ 记忆系统 │ 技能系统 │ 子代理 │
│ cron │ MCP服务器 │ 插件系统 │ checkpoint │
└─────────────────────────────────────────────────────────┘
五、一个"普通人"和一个"Agent"的区别
为了帮非程序员读者理解,我用一个类比:
普通 LLM 就像一个只有大脑、没有手脚的专家。 你可以问他问题,他能给出很好的建议,但他什么也做不了。
AI Agent 就像一个专家+助理的组合。 专家负责思考决策,助理负责执行:查资料、写代码、发邮件、操作服务器。
而 Hermes,就是一个训练有素、装备齐全的"数字助理":
| 装备(工具) | 能做什么 |
|---|---|
| terminal | 执行命令、运行脚本、部署服务 |
| file_operations | 读写文件、修改代码 |
| web_search | 搜索互联网、获取最新信息 |
| browser | 打开网页、点击、填表单 |
| cronjob | 定时执行任务(每天早报、周报) |
| delegate | 派生子Agent并行工作 |
六、这个系列10篇,你将学到什么?
| 篇号 | 标题 | 你会学到 |
|---|---|---|
| 01 | AI Agent入门+Hermes概览 | Agent是什么、整体架构 |
| 02 | 5分钟跑起来 | 安装、初体验、基本操作 |
| 03 | 核心循环 | run_conversation()的完整实现 |
| 04 | 工具系统 | 工具注册、发现、调度机制 |
| 05 | System Prompt | Agent的"人设"和指令是怎么组装的 |
| 06 | 多平台网关 | 一个Agent接入15+平台 |
| 07 | 记忆与技能 | Agent怎么学习和记住东西 |
| 08 | 子代理系统 | Agent生Agent的机制 |
| 09 | 实战案例 | 我用Hermes做了什么 |
| 10 | 总结 | 学到了什么、能复用哪些 |
预告
下一篇,我会带你5分钟安装运行Hermes,然后做几件事让它展示一下"Agent能力"——查天气、写代码、搜资料。让你亲手感受一下 AI Agent 和普通聊天的区别。
然后第三篇,我们就直接杀入核心源码:run_conversation() 这个循环到底是怎么写的。
作者: 十年全栈工程师,从设计到前端到后端到运维,目前在探索AI Agent + 副业变现。
系列目录: [Hermes Agent 源码探秘]
讨论: 欢迎在评论区告诉我你想深入了解的模块,我会在后续文章中重点拆解。
元思未来 · 行稳致远,进而有为