编程 从"第二天失忆"到"越用越聪明":Hermes Agent 如何用 Skills 闭环系统重新定义 AI Agent

2026-04-20 10:17:48 +0800 CST views 11

从"第二天失忆"到"越用越聪明":Hermes Agent 如何用 Skills 闭环系统重新定义 AI Agent

如果你用过 Claude Code、Cursor 或 OpenClaw,一定经历过这个崩溃时刻:花半小时跟 AI 讲清楚项目规范,第二天它两眼一抹黑,什么都不记得了。Hermes Agent 想解决的就是这个问题——而且解决的方式,比你想象的聪明得多。


一、为什么所有 AI 助手都在"装失忆"

先说一个扎心的现实:当前主流的 AI 编程助手,几乎都是健忘症患者

你关掉终端,它们就忘了你是谁;你换一次会话,它们就忘了你上次做到哪;你教了它三遍的编码规范,下次它依然我行我素。

这不是技术不够,而是架构设计上的原罪

大多数 AI 助手的运行逻辑是:接收 Prompt → 推理 → 输出 → 结束。整个过程是无状态的,就像每次都从一个空白的大脑开始对话。它们当然可以有记忆文件(CLAUDE.md、.cursorrules 等),但这些文件是静态的——需要你手动维护,AI 不会主动更新它们。

这导致了一个悖论:理论上最了解你项目的人应该是你的 AI 助手,但实际上它是整个团队里最不了解你的那个。

1.1 现有的"曲线救国"方案

社区为了解决这个问题,搞出了各种 workaround:

方案实现方式致命缺陷
CLAUDE.md手动写提示词文件需要人维护,AI 不主动更新
claude-mem外挂记忆压缩系统与 Agent 割裂,需要额外安装
OpenClaw 记忆系统会话级持久化闭源,迁移成本高

这些方案都有个共同问题:记忆是外部附加的,不是 Agent 原生能力。Agent 本身不知道自己有记忆这回事,一切靠人来管理。

1.2 Hermes Agent 的破局思路

Hermes Agent 的设计哲学完全不同。它的 README 第一句话就亮了:

"The only agent with a built-in learning loop"
(唯一一个内置学习闭环的 Agent)

这个内置学习闭环,才是 Hermes Agent 的灵魂。它要解决的不是"怎么存记忆",而是**"Agent 怎么自己学会变得更好"**——不需要人类保姆,AI 自己能从错误中提炼经验,把经验固化成可复用的技能,然后在下次遇到类似场景时自动调用。

这听起来像是科幻,但 Hermes Agent 用工程化的方式把它实现了。


二、核心架构:从"对话机器人"到"会成长的 Agent"

2.1 整体架构一览

Hermes Agent 不是框架,是一个完整的、可运行的、会自我成长的个人 Agent。它的架构可以分成四层:

┌─────────────────────────────────────────────┐
│           应用层 (Application Layer)         │
│  CLI / Telegram / Discord / Slack / QQ / Web │
├─────────────────────────────────────────────┤
│           技能层 (Skills Layer)              │
│  Agent 自动创建 · 自我改进 · 跨会话复用        │
├─────────────────────────────────────────────┤
│           记忆层 (Memory Layer)               │
│  WORKING · EPISODIC · SEMANTIC · PROCEDURAL  │
├─────────────────────────────────────────────┤
│           执行层 (Execution Layer)            │
│  本地 / Docker / SSH / Daytona / Modal / ... │
└─────────────────────────────────────────────┘

每一层都值得深挖,但我们重点讲两个最核心的创新:Skills 闭环系统四层记忆架构

2.2 Skills 闭环系统——Agent 怎么自己写代码

传统的 Agent 系统里,工具(Tools)是开发团队预定义的,用户不能动态添加。Hermes Agent 最大的创新在于:Agent 自己可以创建新的 Skill

这个 Skill 不是配置文件,是一个完整的 Markdown 文件,包含:

  • 描述(Description):这个 Skill 干什么用
  • 触发条件(Triggers):什么场景下应该调用它
  • 使用示例(Examples):怎么用
  • 最佳实践(Best Practices):积累的工程经验
  • 预期输出(Expected Output):如何验证结果

具体怎么生成? 看这个流程:

用户请求 → Agent 执行任务 → 任务成功/失败 
       ↓
  触发 Skill 生成评估
       ↓
  如果 Agent 发现"这个操作以后还会用到"
       ↓
  自动生成 Skill 文件(Markdown 格式)
       ↓
  存入 ~/.hermes/skills/
       ↓
  下次遇到类似场景 → 自动检索相关 Skill → 注入上下文 → 执行

一个实际的例子:假设你让 Agent 帮你审查一个 PR,它发现你团队有一条不成文的规矩——"所有对外 API 必须加 Retry 逻辑"。传统的 Agent 下次就忘了。但 Hermes Agent 会:

  1. 识别:从对话中识别出这是一条值得沉淀的工程规范
  2. 生成:自动写一个 api-review-checklist.md Skill
  3. 存储:持久化到 ~/.hermes/skills/
  4. 复用:下次做 PR review 时自动加载这条规则

这不是简单的"保存对话记录",是从经验中提取可复用的工程知识

2.3 代码:Skill 文件长什么样

# Skill: API Review Checklist for [Your Team]

## Description
Ensures all public API endpoints have proper retry logic, 
logging, and error handling before merging.

## Triggers
- Keywords: `review`, `api`, `endpoint`, `pr`, `merge`
- File patterns: `**/api/**`, `**/routes/**`, `**/handlers/**`

## Examples
When reviewing a new API file:
1. Check for @retry decorator or manual retry logic
2. Verify structured logging (not print statements)
3. Ensure error responses follow team format

## Best Practices
- Retry: Use exponential backoff, max 3 attempts
- Logging: Use team logger, include request_id
- Errors: Always return structured JSON, never raw exceptions

## Expected Output
A markdown checklist with ✅/❌ for each item

这就是一个 Skill 的本质——AI 自己从经验中提炼出来的工程最佳实践文档。它比 CLAUDE.md 聪明的地方在于:不需要人写,AI 主动生成


三、四层记忆架构——Agent 的"大脑皮层"

Hermes Agent 的记忆系统是它区别于所有竞品的核心技术壁垒。它模拟人类记忆的逻辑,设计了四层架构:

3.1 第一层:工作记忆(Working Memory)

这是最薄的一层,只在单次会话内有效

类似于 CPU 的 L1 Cache,用来暂存当前任务的上下文——正在写的代码、正在处理的需求文档、当前对话的历史摘要。当会话结束,这层记忆就清空了。

实现方式

# 伪代码示意
class WorkingMemory:
    def __init__(self):
        self.current_task = {}      # 当前任务上下文
        self.conversation_history = []  # 本会话对话记录
        self.working_files = []      # 当前打开的文件列表
    
    def update(self, event):
        # 实时更新,容量很小(~4K tokens)
        self.current_task = event

3.2 第二层:情景记忆(Episodic Memory)

这是 Hermes Agent 最核心的记忆层,对应人类大脑的海马体——负责"发生了什么"的记忆。

持久化存储所有历史交互数据

  • 对话记录(按项目/按时间组织)
  • 任务执行历史(成功/失败/踩坑记录)
  • 项目细节(项目结构、技术栈、部署方式)
  • 开发者偏好(编码风格、习惯、禁忌)

存储结构:

~/.hermes/
├── memories/
│   ├── MEMORY.md        # Agent 个人笔记 (~2200 chars)
│   ├── USER.md          # 用户画像 (~1100 chars)
│   └── episodes/        # 历史交互记录(SQLite/FTS5)
└── skills/
    └── *.md             # 沉淀的技能

关键设计:故意对 MEMORY.md 设置了 ~2200 字符的软上限。这个上限逼迫 Agent 必须提炼精华,而不是无脑堆积上下文。这个设计哲学非常有意思——它模拟了人类记忆的"遗忘曲线",逼迫 AI 做信息取舍。

3.3 第三层:语义记忆(Semantic Memory)

这层存储的是通用知识,类似于人类的"常识库"。

  • 编程语言的最佳实践(不限于当前项目)
  • 开源项目的背景知识
  • 工具链的使用经验

不是针对某个项目的经验,而是跨项目的通用知识积累

3.4 第四层:程序记忆(Procedural Memory)

这层最特殊,存储的是Agent 的"肌肉记忆"——怎么完成某个任务的流程和步骤。

# 伪代码示意:程序记忆的工作方式
class ProceduralMemory:
    def __init__(self):
        self.skills = []  # 所有已沉淀的 Skill
        
    def retrieve(self, context):
        # 根据当前上下文检索相关 Skill
        relevant_skills = vector_search(context, self.skills)
        # 将 Skill 注入到 Agent 的系统提示中
        return inject_into_context(relevant_skills)

当用户说"帮我 review 这个 PR",Agent 会自动:

  1. 从程序记忆中检索相关的 api-review-checklist.md
  2. 从情景记忆中加载项目上下文(用的是什么框架、团队规范是什么)
  3. 从工作记忆中获取当前 PR 的具体内容
  4. 组合三层信息,生成精准的 review 意见

3.5 记忆检索:FTS5 全文搜索

这么多层记忆,怎么快速检索?Hermes Agent 使用 SQLite FTS5(全文搜索)作为记忆检索引擎。

-- 记忆检索示例
SELECT snippet(memory_fts, 0, '【', '】', '...', 32) as context
FROM memory_fts
WHERE memory_fts MATCH 'retry OR api OR error handling'
ORDER BY rank
LIMIT 5;

这把记忆检索变成了一个可量化的、可排序的操作。每次 Agent 决定"我需要想起什么"时,实际上是在做一次向量相似度搜索(或 FTS5 全文搜索)。


四、实战:5 分钟部署一个自我进化的个人 Agent

说了这么多架构,是时候动手了。以下是完整的部署流程。

4.1 环境要求

要求最低推荐
Python3.9+3.11+
系统Linux/macOS/Windows (WSL2)macOS/Linux
内存4GB8GB+
磁盘1GB2GB+

依赖:curl、git、bash(安装脚本会自动检测)。

4.2 一键安装(推荐新手)

# Linux / macOS / WSL2
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

安装脚本会自动完成:

  1. 检测系统环境,识别缺失依赖
  2. 使用 uv 安装 Python 依赖(比 pip 快 10 倍)
  3. 安装 Node.js(用于浏览器自动化、QQ/Telegram 桥接)
  4. 初始化配置文件

4.3 手动安装(进阶用户)

# 克隆仓库
git clone https://github.com/NousResearch/hermes-agent.git
cd hermes-agent

# 使用 uv 安装依赖
uv sync

# 复制配置文件
cp config.example.yaml config.yaml

# 编辑配置
vim config.yaml

4.4 配置 LLM 提供商

编辑 config.yaml

llm:
  provider: "openrouter"  # 支持 openrouter / anthropic / openai / kimi / minimax
  model: "anthropic/claude-3.5-sonnet"  # 推荐用 Claude,效果最好
  api_key: "${OPENROUTER_API_KEY}"  # 从环境变量读取
  
memory:
  backend: "sqlite"  # sqlite / postgres
  fts_enabled: true  # 启用全文搜索
  
skills:
  auto_create: true      # 允许 Agent 自动创建 Skill
  auto_improve: true      # 允许 Agent 自动改进 Skill
  storage_path: "~/.hermes/skills"
  
terminal:
  backend: "local"  # local / docker / ssh / daytona / modal

4.5 启动 Agent

# 交互式启动
hermes

# 或者指定配置文件
hermes --config ~/.hermes/prod.yaml

# 查看帮助
hermes --help

五、Skill 创作实战:从零构建一个"代码审查助手"

光说不练假把式,我们来实操一下怎么用 Hermes Agent 的 Skill 系统。

5.1 场景

你希望 Agent 每次帮你写代码时,自动检查:

  1. 是否有 SQL 注入风险
  2. 是否正确处理了边界条件
  3. 是否有单元测试覆盖

5.2 创建 Skill

# Skill: Python Code Quality Checklist

## Description
A comprehensive checklist for reviewing Python code before committing.
Catches common bugs, security issues, and ensures test coverage.

## Triggers
- Keywords: `review`, `check`, `quality`, `commit`, `submit`
- File patterns: `**/*.py`

## Examples
### Example 1: SQL Injection Check
```python
# ❌ BAD: String concatenation in SQL
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")

# ✅ GOOD: Parameterized query
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))

Example 2: Boundary Condition

# ❌ BAD: No empty check
def find_user(users, name):
    return [u for u in users if u.name == name][0]

# ✅ GOOD: Handle empty case
def find_user(users, name):
    results = [u for u in users if u.name == name]
    return results[0] if results else None

Best Practices

  • Always use parameterized queries for database operations
  • Validate input parameters at function entry points
  • Prefer early returns to reduce nesting
  • Each function should have a docstring
  • Critical paths need unit tests

Test Coverage Rules

  • New functions > 10 lines → require test
  • Functions with edge cases → require test
  • Public API methods → require test

### 5.3 手动触发 Skill

```bash
# 在 Hermes Agent CLI 中
/hermes add skill python-code-quality.md

# 或者让 Agent 自动识别
# 告诉 Agent:"以后每次我写完代码,帮我跑一下这个检查清单"

5.4 验证 Skill 是否生效

User: 帮我写一个用户登录的函数

Agent: [执行任务,生成了 login 函数]

[自动加载 python-code-quality checklist]
Agent: ✅ 参数验证已添加
✅ 密码使用 bcrypt 哈希存储
✅ 登录失败次数做了限制(防暴力破解)
✅ 敏感信息未记录到日志
❌ 缺少单元测试,是否需要我补上?

六、性能优化:让 Hermes Agent 跑得又快又省

6.1 部署方式对比

部署方式成本适用场景冷启动并发
本地运行0(只需电费)日常开发即开即用1
Docker低(VPS ~$5/mo)生产环境30s1
SSH 远程已有 GPU 资源取决于远程1
Daytona懒人部署即开即用1
Modal按需付费流量不规律秒级

6.2 内存优化策略

Hermes Agent 的记忆系统会随时间增长,如果不加控制,会导致:

  1. 检索变慢(FTS 索引膨胀)
  2. 上下文过长(LLM 调用成本上升)
  3. 存储空间浪费

优化策略一:定期压缩

# 手动压缩记忆文件
hermes compress --level=aggressive

优化策略二:Skill 合并

相似的 Skill 可以合并,避免碎片化:

# 列出所有 Skill
hermes skills list

# 合并相似 Skill
hermes skills merge api-review-checklist-1.md api-review-checklist-2.md

优化策略三:记忆分级存储

冷数据(> 90 天)→ 归档到 SQLite,脱离上下文
温数据(7-90 天)→ 正常 FTS 索引
热数据(< 7 天)→ 优先检索,高权重

6.3 LLM 调用优化

Skill 检索后不是一股脑全塞进上下文。Hermes Agent 会智能裁剪

# 伪代码:Skill 上下文注入策略
def inject_skills(agent_context, retrieved_skills, max_tokens=4096):
    """只注入最相关的部分,控制 token 消耗"""
    sorted_skills = rank_by_relevance(retrieved_skills, agent_context)
    
    injected = []
    total_tokens = 0
    
    for skill in sorted_skills:
        skill_tokens = count_tokens(skill.content)
        if total_tokens + skill_tokens <= max_tokens:
            injected.append(skill)
            total_tokens += skill_tokens
        else:
            # 超了就只注入摘要
            injected.append(skill.summary)
    
    return injected

七、与竞品正面PK:为什么 Hermes Agent 值得迁移

7.1 功能对比

能力Hermes AgentClaude CodeOpenClawLangChain Agent
持久记忆✅ 原生内置❌ 需外挂✅ 闭源内置❌ 无
自动创建 Skill✅ 独有
多平台网关✅ 7个
自我进化
开源✅ MIT
部署成本$0-5/mo$20+/mo免费(闭源)取决于 infra
MCP 支持

7.2 迁移成本

从 OpenClaw 迁移到 Hermes Agent 几乎是零成本的:

# Hermes Agent 支持一键导入 OpenClaw 配置
hermes import --source=openclaw

# 这会导入:
# - 记忆文件(MEMORY.md、USER.md)
# - 技能配置
# - API Keys(加密存储)

7.3 我的判断

如果你符合以下任一条件,Hermes Agent 值得一试:

  • ✅ 想用开源方案,不想被单一厂商绑定
  • ✅ 需要一个可以跑在 $5 VPS 上的 24/7 个人 Agent
  • ✅ 受够了每次新建会话都要从头解释项目背景
  • ✅ 希望 AI 助手能"学会"你团队的工程规范
  • ✅ 需要多平台接入(Telegram/Discord/QQ)

如果你只需要一个高质量的编程助手,Claude Code 依然是首选。但如果你想拥有一个会成长的、真正懂你的 AI 伙伴,Hermes Agent 是目前开源世界里最接近这个目标的选择。


八、总结:重新定义"AI 助手"的含义

Hermes Agent 给我最大的启发,不是某个具体的技术实现,而是一个设计理念的转变

传统 AI 助手的范式是:工具。你用它,它干活,不用就关掉。它不记得任何事,也不需要记得。

Hermes Agent 的范式是:伙伴。你跟它协作,它从协作中学习,把学到的经验固化成技能,下次遇到类似问题时自动调用。随着时间推移,它越来越懂你的项目、你的风格、你的偏好。

这就是为什么 Hermes Agent 的 Slogan 是 "The agent that grows with you"

不是"更强大的工具",而是"会跟你一起成长的伙伴"。

这个转变的意义,可能比任何单个技术特性都重要。它预示了一个方向:AI 不是被动的工具,而是主动的学习者。当我们习惯了有"记忆"和"学习能力"的 AI,再回头用那些每次都"失忆"的助手,那种落差感会越来越明显。


附录:资源链接


本文首发于程序员茄子(chenxutan.com),作者保留所有权利。转载需注明出处。

推荐文章

Vue3中如何进行错误处理?
2024-11-18 05:17:47 +0800 CST
js函数常见的写法以及调用方法
2024-11-19 08:55:17 +0800 CST
使用Python实现邮件自动化
2024-11-18 20:18:14 +0800 CST
curl错误代码表
2024-11-17 09:34:46 +0800 CST
聚合支付管理系统
2025-07-23 13:33:30 +0800 CST
手机导航效果
2024-11-19 07:53:16 +0800 CST
php内置函数除法取整和取余数
2024-11-19 10:11:51 +0800 CST
WebSQL数据库:HTML5的非标准伴侣
2024-11-18 22:44:20 +0800 CST
支付页面html收银台
2025-03-06 14:59:20 +0800 CST
jQuery `$.extend()` 用法总结
2024-11-19 02:12:45 +0800 CST
使用Ollama部署本地大模型
2024-11-19 10:00:55 +0800 CST
在Rust项目中使用SQLite数据库
2024-11-19 08:48:00 +0800 CST
程序员茄子在线接单