news 2026/8/15 17:21:57

【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 12 篇(完结篇)】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 12 篇(完结篇)】

自我进化闭环:从后台审视到强化学习(系列终篇)

导读:一个 agent 不仅能执行任务,还能在后台悄悄审视自己的对话、沉淀技能、把轨迹压缩成训练数据、最终训练出下一代自己。这不是科幻,而是 Hermes 架构的最后一环。本文拆解 s20-s27 共 8 章:用 → 记 → 抽象 → 训练 → 更好地用,完整闭环一次讲透。

先问一个问题:你的 agent 会"长大"吗?

你写过一个能用的 agent。它能调工具、能查资料、能按流程完成任务。

但三个月后,它还是老样子。同样的错误犯三遍,同样的坑踩三次,你手动改 prompt 改到怀疑人生。

LangChain 和 AutoGen 能帮你搭流程,但不会帮你进化。这是 Hermes 从头到尾坚持的一件事。

前 11 篇,我们完成了从环境搭建到工具调用的全部基础。今天收官,聊最后一个问题:agent 如何改写自己?

闭环总览:五个节点,一个循环

先看全景。Hermes 的自我进化不是某个单一功能,而是一条完整的流水线:

用 → 记 → 抽象 → 训练 → 更好地用

  • :agent 正常干活,产生对话轨迹
  • :后台审视对话,把值得记的写进 MEMORY.md 或 USER.md
  • 抽象:把可复用的做法提炼成 skill 文件
  • 训练:把整段轨迹压缩成训练数据,喂给 RL 管线
  • 更好地用:新一代模型部署,下次对话自动生效

前三个节点发生在运行时(agent 边干活边学习),后两个节点发生在离线(专门的数据管线)。这就是 s20-s27 的全部内容。

下面逐个拆。

s20:后台审视——agent 的"自我复盘"

最核心的机制叫Background Review(后台审视)。它解决一个问题:agent 怎么知道"这段对话值得记"?

答案是:不用它知道,系统替它盯

看真实代码,双计数器触发:

self._turns_since_memory=0# 用户消息计数self._iters_since_skill=0# 工具迭代计数self._memory_nudge_interval=10# 触发阈值self._skill_nudge_interval=10

每轮结束检查一次。用户消息累计 10 轮,或者工具迭代累计 10 次,就触发_spawn_background_review()。用户手动调 memory/skill 工具时,计数器重置,防止重复审视。

触发后,后台会 fork 一个审查 agent:复制当前 messages 快照、max_iterations=8nudge_interval=0、daemon 线程、完全静默。它不打扰主对话,干完活就退。

关键是审查 agent 自己不能触发新的审查——nudge_interval=0加独立计数器,双重防护,防止递归爆炸。

两个审视 prompt,防编造

审查 agent 用两个 prompt 审视对话:

  • _MEMORY_REVIEW_PROMPT:用户透露了关于自己的事吗?对我行为有期望吗?
  • _SKILL_REVIEW_PROMPT:是否用了需要试错才掌握的非平凡方法?可复用吗?

两个 prompt 的收尾都有一句关键的话:

“If nothing is worth saving, just say ‘Nothing to save.’ and stop.”

这句话是防呆设计。没有它,审查 agent 会为了"交差"强行编造记忆——这是所有自进化系统最容易翻车的地方。

s21:技能创作闭环——从手动到自动

有了后台审视,下一步是沉淀

最笨的实现是什么?人手动改 SKILL.md 文件。没有量化评估,改坏了也不知道,全靠手感。

Hermes 的做法是闭环:后台审视发现可复用做法 → 创建/更新技能文件 → 下次遇到同类任务自动加载。

技能文件长这样:frontmatter(name + description)+ 正文(Steps + 注意事项)。比如 GitHub Actions Python CI 的完整配置流程,第一次试错学会后,沉淀成 skill,下次直接复用。

这就是"抽象"节点:从具体对话中提炼出可复用的方法论。

s22:Hook 系统——不改核心代码的扩展方式

自进化系统有个矛盾:既要改行为,又不能把核心代码改坏。

Hermes 的解法是三类 hooks:

  1. Gateway hooks:消息生命周期钩子(消息到达、回复发送前等时机触发)
  2. BOOT.md:启动时执行的自检清单(Startup Checklist)——“检查 API key 存在”"验证环境"等
  3. Plugin hooks:注册表分发时触发(比如 audit_log 记录每条工具调用)

这套设计的好处是:注入逻辑,不改核心。你想加审计、加日志、加自检,写个 hook 挂上去就行,核心代码一行不动。

s23:Trajectory + RL——对话变成训练数据

运行时学习讲完了,接下来是离线进化。

核心思路一句话:对话轨迹 → 训练数据 → RL 改进模型

关键组件四个:

  • batch_runner:批量跑对话,产出大量轨迹
  • trajectory_compressor:压缩轨迹——头尾不压缩,中间摘要(和 s05 的压缩逻辑同理)
  • reward 函数:给轨迹打分
  • rl_cli:命令行入口,跑 RL 训练

为什么头尾不压缩、中间摘要?因为对话的开头和结尾往往包含最关键的信息(任务目标、最终结论),中间的过程性内容可以摘要化。这和人类记笔记的逻辑一模一样。

从"运行时学习"到"离线进化"

到这里,你已经看到了两种学习:

  • 运行时学习(s20-s22):agent 边干活边记,改的是 MEMORY.md 和 skill 文件
  • 离线进化(s23):轨迹压缩成数据,训练下一代模型

前者是"换衣服",后者是"换身体"。但两者共享同一个优化循环:打分 → 改写 → 择优。

接下来进入终篇的高潮:s25-s27 的自进化总览。

s25:四层进化目标——风险递进

Hermes 的自进化有四个层次的目标,每一层风险和收益都不同:

Phase对象风险引擎状态
1Skill 文件最低(改坏只影响一个 skill)DSPy+GEPA✅ 已实现
2Tool descriptionsDSPy+GEPA计划中
3System prompt sections高(影响所有对话)DSPy+GEPA计划中
4Tool implementation code最高Darwinian Evolver计划中

从改一个 skill 到改核心代码,风险逐级递增。Hermes 的策略是从风险最低的开始,跑通闭环后再往上走。

7 步管线:自进化的完整流程

这是 s25 文档的核心图示,也是整个自进化系统的骨架:

1. SELECT TARGET → 2. BUILD EVAL DATASET → 3. EVALUATE BASELINE → 4. CHECK CONSTRAINTS → 5. OPTIMIZE (repeat N) → 6. VALIDATE EVOLVED → 7. DEPLOY

步骤 2-4 是度量体系(s26),步骤 5-7 是优化与部署(s27)。每一步都有明确输入输出,不靠运气。

s26:评估体系——没有度量就没有进化

进化没有方向就是随机游走。Hermes 的度量体系三个组件:

LLM-as-judge:适应度函数(FitnessScore)用 LLM 打分。关键设计:rubric 描述而非精确匹配。“好"的定义是"符合 rubric 描述”,不是"输出等于某个字符串"——因为 agent 的任务本质是开放的。

SyntheticDatasetBuilder:合成评估数据集,分 train/val/holdout 三份。防止过拟合到训练数据。

ConstraintValidator:约束门控。版本号、文件大小、测试通过率——不满足约束直接打回,不让劣质进化结果上线。

s27:优化与部署——进化落地

最后一步。优化循环四步走:

收集反馈 → 针对性改写 → 打分 → 择优

注意"针对性"三个字。GEPA 的思路是:先读 trace 理解"为什么"失败,再做针对性变异,而不是盲目随机改。这比纯遗传算法聪明得多——理解原因,再动手

evolve_skill()完整对接 s25 的 7 步管线。部署流程三步:备份 → 写入 → 下次对话自动生效。永远留后路。

一个重要的架构决策

自进化系统是独立仓库(NousResearch/hermes-agent-self-evolution)。

为什么?因为它是开发时工具,不是运行时功能。它读代码和数据、输出改进文件、通过 git PR 提交——但绝不在用户对话中执行。这条边界划得很清楚:进化是离线的,服务是在线的

避坑清单:四个最容易翻车的点

  1. 审视编造:没有 “Nothing to save” 兜底,审查 agent 会强行编造记忆。这是所有自进化系统的头号陷阱。
  2. 计数器重置:用户手动调 memory/skill 工具后必须重置计数器,否则会重复审视同一段对话。
  3. 评估标准:用精确匹配做评估是自欺欺人。agent 的任务是开放的,必须用 rubric 描述。
  4. 约束门控:没有约束验证的进化是放虎归山。版本号、大小、测试通过率,一个都不能少。

系列 12 篇完整回顾

至此,手搓自主 AI Agent:Hermes 架构原理剖析系列全部完结。12 篇完整清单:

主题对应章节
1生产级 AI Agent 的五层架构s00
2百行 Agent Loop:让模型从"会说话"变成"会干活"s01
3自注册工具系统:给 Agent 装上"可插拔的双手"s02
4SQLite 会话存储与提示词组装s03+s04
5上下文压缩与错误恢复s05+s06
6记忆与技能s07+s08
7安全审批与子 Agent 委派s09+s10
8配置系统优先级链s11
9Gateway 与平台适配器s12+s13
10执行环境抽象与定时任务s14+s15
11高级能力扩展:MCP、浏览器、语音视觉s16-s19
12自我进化闭环(本篇)s20-s27

从"能跑起来"到"能干活"到"能记住"到"能调用工具"再到"能进化自己"——你跟着这条路径,手搓了一个完整的自主 AI Agent。

后台审视、技能沉淀、Hook 扩展、轨迹压缩、RL 训练、四层进化、7 步管线、评估体系、约束门控……这些不是孤立的知识点,而是一个闭环。用 → 记 → 抽象 → 训练 → 更好地用,循环往复,agent 才能从"工具"变成"伙伴"。

最后留一个问题给你:如果让你设计第六层进化目标(比改 Tool implementation code 风险更高),你会选什么?欢迎在评论区聊聊你的思路。

参考文献

  • Hermes Agent 教学仓库:agents/s20_background_review.pyagents/s27_optimization_and_deploy.py(本文代码素材,均真实可运行)
  • Hermes Agent 教学仓库:docs/zh/s20-background-review.mddocs/zh/s27-optimization-and-deploy.md(后台审视、7 步管线、评估体系详解)

📥源码获取:如需本系列全部源码,请在以下链接克隆:
https://gitcode.com/ganxin7932508/learn-hermes-agent.git

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/15 17:14:26

揭秘fastgron核心技术:基于C++20与simdjson的极速JSON解析原理

揭秘fastgron核心技术:基于C20与simdjson的极速JSON解析原理 【免费下载链接】fastgron High-performance JSON to GRON (greppable, flattened JSON) converter 项目地址: https://gitcode.com/gh_mirrors/fa/fastgron fastgron是一款高性能的JSON转GRON&a…

作者头像 李华
网站建设 2026/8/15 17:12:20

数据库三范式详解:原理、示例与实战应用

一、数据库范式概述数据库范式(Normal Form)是关系数据库设计中的一套理论规范,旨在通过合理的表结构设计来减少数据冗余、避免数据异常(插入异常、更新异常、删除异常),并确保数据的一致性和完整性。范式理…

作者头像 李华
网站建设 2026/8/15 17:08:42

openftp4使用技巧:如何避免重复访问同一服务器的实用方法

openftp4使用技巧:如何避免重复访问同一服务器的实用方法 【免费下载链接】openftp4 A list of all FTP servers in IPv4 that allow anonymous logins. 项目地址: https://gitcode.com/gh_mirrors/op/openftp4 openftp4是一个收集所有允许匿名登录的IPv4 FT…

作者头像 李华