深度拆解 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 后会:

  1. 回顾近期的会话记录
  2. 评估哪些信息有价值
  3. 将重要的知识持久化到长期记忆

这种设计避免了"什么都记"导致的信息过载,也避免了"什么都不记"导致的遗忘。

代码实现关键点

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 会:

  1. 回顾任务执行的完整轨迹
  2. 提取关键步骤和决策点
  3. 生成结构化的技能文件
  4. 保存到 ~/.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 如何从"工具"进化为"伙伴"? 答案是——让它拥有持续学习的能力。


系列导航

相关阅读OpenClaw 架构深度分析 | HermesAgent 源码分析报告


本文基于 HermesAgent v0.10.0 源码分析,项目持续迭代中。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐