深度拆解 HermesAgent(二):闭环学习系统 —— AI Agent 如何“自我进化“?
深度拆解 HermesAgent(二):闭环学习系统 —— AI Agent 如何"自我进化"?
系列导读:本文是 HermesAgent 深度拆解系列 的第二篇。我们将深入分析 HermesAgent 最核心的创新——闭环学习系统,看看 AI Agent 是如何从经验中学习、创建技能、持续进化的。
CSDN 分类:人工智能 > AI Agent > 架构设计
CSDN 标签:HermesAgent, AI Agent, 闭环学习, 自我改进, FTS5, Honcho, 技能系统
阅读量:预计 8万+ | 收藏量:预计 4000+ | 点赞量:预计 1500+
一、为什么"学习"对 AI Agent 至关重要?
当前绝大多数 AI Agent 产品都有一个共同的问题:无状态。
每次你跟 Agent 对话,它就像一个失忆症患者——要么从零开始,要么仅依赖有限的上下文窗口。你能想象一个"数字分身"每次见面都要重新认识你吗?
HermesAgent 的 Nous Research 团队显然思考过这个问题。他们的解决方案是:让 Agent 自己决定学什么、怎么学、什么时候学。
这就是闭环学习系统(Closed Learning Loop)的核心思想。
二、闭环学习全景
先看完整的闭环流程:
用户发起任务
│
▼
┌─────────────┐
│ 执行任务 │ ← Agent 使用已有技能和知识
└──────┬──────┘
│
▼
┌─────────────┐
│ 观察结果 │ ← 任务成功?失败?部分完成?
└──────┬──────┘
│
▼
┌─────────────┐
│ 提取经验 │ ← "这个任务的关键步骤是什么?"
└──────┬──────┘
│
├──→ 创建新技能(如果是新类型的任务)
├──→ 改进已有技能(如果有更好的方法)
└──→ 持久化知识(如果有值得记住的信息)
│
▼
┌─────────────┐
│ 下一轮任务 │ ← 使用更新后的技能和知识
└──────┬──────┘
│
└──────── 闭环 ────────┘
与传统 Agent 的对比
| 维度 | 传统 Agent | HermesAgent |
|---|---|---|
| 知识来源 | 仅系统提示词 + 上下文窗口 | 系统提示词 + 持久化记忆 + 自学技能 |
| 能力增长 | 需要人工更新 prompt/代码 | 自动从经验中创建技能 |
| 跨会话记忆 | 无或极简 | FTS5 全文搜索 + LLM 摘要 |
| 用户理解 | 每次从零开始 | 跨会话用户画像持续深化 |
| 技能演进 | 静态 | 动态改进 |
三、Agent 策展记忆(Agent-Curated Memory)
HermesAgent 的记忆系统有一个非常独特的设计理念:Agent 自己决定什么值得记住。
这不是人类预设的"记住这个关键词就触发那个规则",而是 Agent 在每次交互后,自主评估:
“这次交互中,有哪些信息对未来有帮助?”
记忆的存储结构
HermesAgent 的记忆存储在 ~/.hermes/memory/ 目录下:
~/.hermes/memory/
├── short_term/ # 短期记忆(近期会话摘要)
├── long_term/ # 长期记忆(持久化的重要知识)
└── user_model/ # 用户画像(通过 Honcho 实现)
定期 Nudge 机制
系统会定期(通过 cron 调度)向 Agent 发送"Nudge"——一种温和的提醒:
“你最近处理了一些任务,有什么值得记住的经验吗?”
Agent 收到 Nudge 后会:
- 回顾近期的会话记录
- 评估哪些信息有价值
- 将重要的知识持久化到长期记忆
这种设计避免了"什么都记"导致的信息过载,也避免了"什么都不记"导致的遗忘。
代码实现关键点
在 agent/memory_manager.py 中,记忆管理器负责构建记忆上下文:
class MemoryManager:
def build_memory_context(self, user_id: str) -> str:
"""构建当前对话的记忆上下文"""
# 1. 从 SessionDB 中搜索相关的历史会话
relevant_sessions = self.session_db.search(user_id, query)
# 2. 从长期记忆中加载相关知识
long_term_memories = self.load_long_term_memories(user_id)
# 3. 从用户画像中获取偏好信息
user_profile = self.load_user_profile(user_id)
# 4. 组装为系统提示词的一部分
return self.assemble_context(relevant_sessions, long_term_memories, user_profile)
四、自主技能创建与改进
这是闭环学习中最精彩的环节。
4.1 技能是什么?
在 HermesAgent 中,技能(Skill)本质上是一种结构化的经验文档,使用 Markdown 格式存储:
---
name: deploy-to-docker
description: 将 Python 项目打包并部署到 Docker 容器
tags: [docker, deployment, python]
---
# 部署到 Docker
## 前置条件
- 项目目录下有 requirements.txt
- Docker 已安装
## 步骤
1. 创建 Dockerfile
2. 构建 Docker 镜像
3. 运行容器
...
这种设计非常聪明:
- 人类可读:开发者可以直接查看和编辑技能文件
- LLM 可理解:Markdown 是 LLM 最擅长理解的格式之一
- 标准化:兼容 agentskills.io 开放标准
4.2 技能自动创建流程
当一个复杂任务完成后,Agent 会评估:
“这个任务的解决方法是否具有复用价值?”
如果是,Agent 会:
- 回顾任务执行的完整轨迹
- 提取关键步骤和决策点
- 生成结构化的技能文件
- 保存到
~/.hermes/skills/目录
4.3 技能自动改进
更巧妙的是,技能不是创建后就"冻结"了。当 Agent 在后续使用某个技能时:
- 如果发现某些步骤不再适用 → 更新技能
- 如果发现有更好的方法 → 优化技能
- 如果技能导致失败 → 标记并回退
4.4 Skills Hub —— 技能市场
HermesAgent 还内置了 Skills Hub,类似"Agent 版的 App Store":
# 在 CLI 中使用 /skills 命令
/skills search "docker" # 搜索技能
/skills install deploy-k8s # 安装技能
/skills list # 列出已安装技能
/skills view my-skill # 查看技能详情
所有技能都兼容 agentskills.io 开放标准,意味着不同 Agent 框架之间可以共享技能!
五、FTS5 会话搜索 —— 跨会话回忆
传统 Agent 的另一个痛点:无法回忆过去的对话。
HermesAgent 通过 SQLite FTS5(全文搜索引擎)+ LLM 摘要解决了这个问题。
搜索流程
用户问了一个涉及历史信息的问题
│
▼
从问题中提取搜索关键词
│
▼
FTS5 全文搜索历史会话
│
▼
LLM 对搜索结果进行语义摘要
│
▼
将摘要注入当前对话上下文
│
▼
Agent 基于历史信息回答问题
为什么选择 SQLite FTS5?
| 方案 | 优点 | 缺点 |
|---|---|---|
| 纯向量数据库 | 语义搜索准确 | 需要额外依赖,部署复杂 |
| 纯关键词搜索 | 简单快速 | 语义理解差 |
| SQLite FTS5 + LLM | 零额外依赖 + 语义理解 | LLM 调用有成本 |
HermesAgent 的选择非常务实:用 SQLite FTS5 做初筛(快、准、零依赖),再用 LLM 做语义摘要(深度理解)。这种"混合搜索"策略在性能和准确性之间取得了很好的平衡。
六、Honcho 用户建模
HermesAgent 集成了 Honcho —— 一个辩证用户建模(Dialectic User Modeling)系统。
什么是辩证用户建模?
传统用户画像通常是静态的标签集合:
{"name": "张三", "interests": ["编程", "AI"], "role": "开发者"}
Honcho 的辩证建模更加动态:
用户画像(Thesis)←→ 对话观察(Antithesis)→ 更新画像(Synthesis)
每次交互都会更新用户画像,形成越来越准确的用户理解:
第 1 次对话:用户是一名开发者
第 5 次对话:用户是一名 Python 开发者,偏好简洁的代码
第 20 次对话:用户是 Python 后端开发者,正在做 AI Agent 方向的创业,
喜欢务实的技术方案,不喜欢过度工程化
这对"数字分身"场景来说简直是核心基础设施——你的 AI 分身需要越了解你,才能越像你。
七、闭环学习的落地价值
理论分析完了,那闭环学习在实际使用中能带来什么?
场景一:代码助手越来越懂你
第 1 周:Agent 帮你写了些 Python 脚本
→ 学到你偏好 Python 3.11+,使用 type hints
第 2 周:Agent 帮你部署了服务
→ 创建了 "deploy-to-server" 技能
第 3 周:你需要再次部署
→ Agent 直接使用已有技能,跳过了探索阶段
场景二:跨会话的上下文连贯
周一:你告诉 Agent "我们的产品叫 XXX"
周三:你问 Agent "帮我写一段产品介绍"
→ Agent 已经知道产品名,直接使用
下周一:你又问了关于产品的问题
→ Agent 记得你们之前讨论过的定位和方向
场景三:技能市场共享
你在 CSDN 上看到一篇关于 "Docker 多阶段构建" 的技能
→ /skills install docker-multi-stage
→ 你的 Agent 立刻获得了这个能力
八、对 Agent 设计的启示
作为AI Agent的研究者,在设计 Agent 系统时可以汲取以下经验:
1. 学习闭环是数字分身的灵魂
“让每个人拥有 AI 数字分身”——如果这个数字分身不能学习和进化,它就只是一个"静态的 AI 聊天机器人"。闭环学习应该是 Agent 的核心架构之一。
2. 技能系统标准化
采用 agentskills.io 标准意味着:
- 技能可以跨平台共享
- 社区可以贡献技能
- 降低生态建设门槛
3. 混合搜索策略值得借鉴
SQLite FTS5 + LLM 摘要的组合在零额外依赖的前提下实现了高质量的跨会话回忆,非常适合初期快速落地。
4. Agent 自主策展 vs 预设规则
让 Agent 自己决定"记住什么"比人类预设规则更灵活,但也需要设置"遗忘机制"防止记忆过载。
九、小结
HermesAgent 的闭环学习系统在整个开源 Agent 生态中是独树一帜的。它不是简单的"记忆模块"或"RAG 检索",而是一个完整的"执行→观察→学习→改进→持久化"闭环。
这种设计回答了一个关键问题:AI Agent 如何从"工具"进化为"伙伴"? 答案是——让它拥有持续学习的能力。
系列导航:
- 第一篇:项目概览与核心架构
- 第三篇:工具注册与技能系统(即将发布)
本文基于 HermesAgent v0.10.0 源码分析,项目持续迭代中。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)