模块 1 / 10

核心概念与架构

从"什么是 AI Agent"开始,一步步拆解 Hermes 的骨架——它怎么想、怎么做、各部分怎么配合。

预计阅读时间:25 分钟 · 适合:所有技术背景

📑 本模块目录

  1. 先理解:「Agent」到底是什么?
  2. Hermes 在这个光谱的哪个位置?
  3. Hermes Agent 的核心定位
  4. 核心引擎:Agent Loop(循环)
  5. 关键目录结构
  6. System Prompt 是怎么拼出来的?
  7. 一次请求的完整数据流
  8. 核心术语速查表
  9. 常见疑问
0 先理解:「Agent」到底是什么?
如果你已经理解 Agent 概念,可以直接跳到第 1 节

🔍 传统 AI(ChatGPT 等)

像一个知识渊博的顾问——你问它答,对话结束。不会主动做事,不记上次说了什么,无法操作你的系统。

🤖 AI Agent(Hermes 等)

像一个能干的员工——你交代任务,它自己规划、执行、检查结果。能调工具、跨会话记忆、定时运行。

Agent 的四个核心能力

1️⃣ 感知

读取输入——消息、文件、API 返回、终端输出。

2️⃣ 推理

理解意图、拆解任务、决定下一步。LLM 的核心价值。

3️⃣ 行动

写文件、跑命令、调 API。不只"想",还要"做"。

4️⃣ 记忆

把重要信息存下来,下次还能用。没有记忆 = 每次都是第一次见面。

🤔 ChatGPT 有这四种吗?有感知和推理,但没有行动能力和持久记忆。这就是 Agent 和 Chatbot 的本质区别。
类型例子感知推理行动记忆
ChatbotChatGPT✅✅❌❌
CopilotGitHub Copilot✅✅✅ 编辑器内❌
Coding AgentClaude Code / Codex CLI✅✅✅ 终端+文件❌ 单会话
Autonomous AgentHermes Agent✅✅✅ 完整系统✅ 跨会话
📌 关键认知
  • Chatbot ≠ Agent
  • Agent 的核心增量是行动能力和持久记忆
  • Hermes 站在光谱最右端:全能力、全平台、自进化

0 Hermes 在这个光谱的哪个位置?
维度ChatGPTClaude CodeCodex CLIHermes
定位通用 Chatbot终端 Coding Agent终端 Coding Agent通用自主 Agent
持久记忆✗✗✗✓
自我学习✗✗✗✓ Skills
多平台网页+App终端终端✓ 10+
定时任务✗✗✗✓ Cron
Provider仅 OpenAI仅 Anthropic仅 OpenAI✓ 20+
开源✗✗✗✓ MIT

1 Hermes Agent 的核心定位
✅ Hermes 是:有记忆、会学习、能独立干活的自主 Agent 进程——一个"数字员工"。

🔓 Provider 无关

20+ Provider,任务中途可切换。

🧠 自我进化

完成复杂任务后自动保存为 Skill。

🌐 无处不在

终端/飞书/Telegram/Discord 等 10+ 平台。

⏰ 自主运行

Cron 定时任务,无人值守。


2 核心引擎:Agent Loop
理解了这个循环,就理解了 Hermes 怎么"想"和"做"

🎬 具体例子

👤

用户说:

"帮我在 ~/projects/myapp 创建 FastAPI 项目,带 /health 端点。"

步LLM 返回Agent 做什么结果
1Tool Call: mkdir建目录成功
2Tool Call: write_file(main.py)写 FastAPI 代码已写入
3Tool Call: write_file(requirements.txt)写依赖已写入
4Tool Call: pip install装依赖成功
5Tool Call: curl /health验证端点{"status":"ok"}
6文本回复→ "项目已创建,/health 正常"
🤔 Agent 不是一次性搞定。它一步一步来——每步都是 LLM 看了上一步结果后决定下一步。感知→推理→行动→观察→再推理→直到完成。

🔁 Agent Loop 流程图

flowchart TD A["① 构建 System Prompt
Persona · SOUL.md · Memory · Skills · Tools
Project Context · Environment Hints · Messages"] B["② 调用 LLM
发送 messages + tool schemas"] C{"LLM 返回类型?"} D["③a 执行工具
终端 · 文件 · 浏览器 · 网络"] E["③b 返回给用户
任务完成 · Gateway 格式化投递"] A --> B B --> C C -->|"Tool Call"| D C -->|"Text"| E D -.->|"结果追加到上下文
🔄 循环继续"| B subgraph guard ["🛡 循环防护"] F["上限 max_turns=90
token 超限自动 Compression"] end

Turn

1 次 LLM 调用 = 1 Turn。Tool Call 是 Turn 内子步骤。

并行 Tool Call

LLM 可一次返回多个,并行执行。

Prompt Caching

System Prompt 不变→可缓存。改配置需 /reset。

Compression

太长时自动压缩。默认 50% 触发→压到 20%。


3 关键目录结构
~/.hermes/ ← 数据根目录 ($HERMES_HOME)
├── config.yaml ← 主配置
├── .env ← API Key(不入 git)
├── SOUL.md ← 全局人格
├── skills/ ← 技能文件
├── state.db ← SQLite 会话存储
├── sessions/ ← 路由索引
├── logs/ ← 日志
└── profiles/ ← 多配置隔离

4 System Prompt 是怎么拼出来的?
Layer 1 · Persona角色定义
Layer 2 · SOUL.md全局身份
Layer 3 · User Profile用户画像 (Memory)
Layer 4 · Agent MemoryAgent 笔记 (Memory)
Layer 5 · Active Skills加载的技能文档
Layer 6 · Project Context.hermes.md / AGENTS.md
Layer 7 · Environment HintsOS · Shell · CWD
Layer 8 · Tools + Enforcementtool schemas
优先级:Persona > SOUL.md > Memory > Skills > Project Context。越靠上越核心。

5 一次请求的完整数据流
用户通过平台发消息 → 适配器 → Agent Loop → LLM → 返回
flowchart TD A["👤 用户发送消息"] --> B["🟣 平台适配器
Gateway 接收 · 创建会话"] B --> C["🔵 Agent Loop
读 state.db · 注入 Prompt"] C --> D["🟡 LLM API 调用
POST → Provider"] D --> E{"返回类型?"} E -->|"Tool Call"| F["🔴 Tool Call 分支
执行工具 → 结果追加"] E -->|"Text"| G["🟢 文本回复
LLM 认为任务完成"] F -.->|"🔄 循环回到 LLM"| D G --> H["🟣 平台适配器投递
适配格式 → 发送到平台"] H --> I["✅ 用户收到回复"]

🔴 Tool Call

LLM 返回 tool_calls → Agent 执行 → 结果追加 → 再次调 LLM(虚线回路)。循环直到 LLM 认为可以回答。上限 max_turns=90。

🟢 Text

LLM 返回纯文本 → 格式化 → 平台适配器投递 → 用户收到。会话结束。等待下一条消息。


6 核心术语速查表
🔄
Agent Loop
Prompt→LLM→工具→循环
📋
System Prompt
8 层拼成的世界观
🔁
Turn
1 次 LLM 调用
🗜️
Compression
自动压缩历史
🌐
Gateway
多平台接入
🗄️
state.db
SQLite+FTS5 会话
🧠
Memory
跨会话记忆
🛠️
Toolset
工具分组
📚
Skill
自学习技能
👤
Profile
多配置隔离
⏰
Cron Job
定时任务
🤝
Delegation
子 Agent

7 常见疑问
Q: Hermes vs LangChain?
LangChain 是开发框架,Hermes 是成品 Agent。
Q: 会不会死循环?
max_turns=90 + Compression + LLM 自身判断力三重保护。
Q: 隐私安全?
数据全本地,不上传。可配置脱敏和定期清理。
Q: 能用本地模型?
可以。任何 OpenAI 兼容端点。建议 70B+。