为了让 Agent 拥有特定的能力,我们不得不手动编写大量 Skill 代码、维护复杂的Prompt,并在"写技能 → 发现新问题 → 修改技能"的循环中反复消耗。这种"人工编排"的模式,不仅效率低下,更让 Agent 的能力被限制在开发者手动编写的边界内。
那么,Agent 能不能像人类一样,在解决问题的过程中自己总结经验,自己生成新的技能,实现"自我进化"?GitHub上 23k+ Star的 开源项目 hermes-agent 给出了一个解法。
01
—
痛点:Agent 面临的问题
了解了当前 Agent 面临的其中两类痛点问题,就能理解 hermes-agent 的设计逻辑。
一类是能力边界问题。 这一问题是所有依赖手动编写 Skill 的 Agent 的共同局限:Agent 只能处理开发者预见到的场景和为其预置 Skill,面对动态变化的真实任务时,技能库很快就会失效或缺位。在动态场景中,就算找到了对应技能,随着任务场景变化也可能马上失败。
还有一类是生态安全问题,即社区贡献的 Skill 的安全性问题。
hermes-agent 试图解决的正是“能力边界”问题——让 Agent 自己生成和维护技能,从而突破人工编排的上限。
02
—
hermes-agent 的解法:技能自动生成与自我进化
hermes-agent 的设计哲学与 OpenClaw 截然不同。如果说 OpenClaw 追求的是"广度",那么 hermes-agent 追求的则是"深度"。它的核心目标是构建一个能够随着时间推移不断成长的 Agent。
核心机制
hermes-agent 让Agent自己生长能力的核心机制在于其内置的 Self-Improvement Loop(自我提升闭环)。这个闭环的本质,是将"能力生产"的工作从开发者手中交给了 Agent 本身。
当 Hermes-agent 面对一个复杂任务时,它的工作流程如下:失败 → 反思 → 生成 Skill → 存储 → 再使用。
具体来说:Agent 在尝试解决问题的过程中,会不断地调用工具、遭遇错误、分析原因、调整策略。当它最终成功解决问题后,它会自动编写一个结构化的 Skill 文档,记录下解决该问题的步骤、可能遇到的陷阱以及验证方法。
这个新生成的 Skill 会被保存下来,遵循开源的 agentskills.io 标准,使其可以跨平台移植。下次遇到类似任务时,它会直接加载这个 Skill,而不是从头开始摸索。
这不是一个简单的"记忆"功能,而是一个真正的技能自动生成。
技能的自动生成
在 hermes-agent 中,技能不再是预先写死的代码,而是 Agent 在实践中总结出的经验池。通过内置的 skill_manage 工具,Agent 可以自主创建、更新和管理技能。
系统 Prompt 中内置了如下指令,驱动 Agent 在特定情形下主动生成技能:
# agent/prompt_builder.py SKILLS_GUIDANCE = ( "After completing a complex task (5+ tool calls), fixing a tricky error, " "or discovering a non-trivial workflow, save the approach as a " "skill with skill_manage so you can reuse it next time.\n" "When using a skill and finding it outdated, incomplete, or wrong, " "patch it immediately with skill_manage(action='patch') — don't wait to be asked. " "Skills that aren't maintained become liabilities." )
换句话说,Hermes 并不依赖外部触发,而是在系统层面将"经验沉淀"写进了 Agent 的行为规范。一旦满足条件,Agent 就会调用 skill_manage 的 create 动作,生成一份标准格式的 SKILL.md 技能文档,包含 YAML frontmatter 元数据和 Markdown 正文两部分。
每一个自动生成的技能文档,都包含了完整的操作步骤、已知的边界条件、以及验证成功的方法。以创建 deploy-k8s 技能为例:
# ~/.hermes/skills/devops/deploy-k8s/SKILL.md --- name: deploy-k8s description: 将应用部署到 Kubernetes 集群,包含镜像构建、推送和滚动更新 version: 1.0.0 author: Hermes Agent license: MIT metadata: hermes: tags: [kubernetes, devops, deployment] related_skills: [docker-build, github-pr-workflow] --- # Kubernetes 部署工作流 ## 触发条件 需要将容器化应用部署到 K8s 集群时使用。 ## 步骤 1. 构建并推送镜像:`docker build -t registry/app:$TAG . && docker push` 2. 更新 deployment:`kubectl set image deployment/app app=registry/app:$TAG` 3. 等待滚动更新:`kubectl rollout status deployment/app` ## 已知陷阱 - ImagePullBackOff:检查 registry 凭证是否已配置为 K8s Secret - 滚动更新卡住:检查 readinessProbe 配置是否正确 ## 验证 `kubectl get pods` 所有 Pod 状态为 Running 且 READY 列为 1/1。
当 Agent 决定创建上述技能时,实际执行的是如下工具调用:
# Agent 调用 skill_manage 创建新技能 skill_manage( action="create",a name="deploy-k8s", category="devops", content="""--- name: deploy-k8s description: 将应用部署到 Kubernetes 集群,包含镜像构建、推送和滚动更新 ... --- # Kubernetes 部署工作流 ...""" ) # 返回:{"success": true, "message": "Skill 'deploy-k8s' created.","path": "devops/deploy-k8s"}
在底层,skill_manager_tool.py 中的 _create_skill 函数会依次完成:校验 name 格式与 frontmatter 结构、检查同名技能是否已存在、创建目录、原子写入 SKILL.md(使用临时文件 + os.replace() 防止写入中断导致文件损坏),最后对新技能执行安全扫描——与社区 Hub 安装的技能享有同等的安全审查待遇。
# tools/skill_manager_tool.py(节选) def _create_skill(name: str, content: str, category: str = None) -> Dict[str, Any]: # 1. 校验名称(小写字母、数字、连字符,最长 64 字符) err = _validate_name(name) # 2. 校验 frontmatter 结构(必须包含 name 和 description 字段) err = _validate_frontmatter(content) # 3. 检查同名冲突(跨本地目录和外部目录全量搜索) existing = _find_skill(name) if existing: return {"success": False, "error": f"Skill '{name}' already exists."} # 4. 创建目录并原子写入 SKILL.md skill_dir = _resolve_skill_dir(name, category) skill_dir.mkdir(parents=True, exist_ok=True) _atomic_write_text(skill_dir / "SKILL.md", content) # 5. 安全扫描(与 Hub 安装技能同等待遇) scan_error = _security_scan_skill(skill_dir) if scan_error: shutil.rmtree(skill_dir, ignore_errors=True) # 扫描失败则回滚 return {"success": False, "error": scan_error} # 6. 清除系统 Prompt 缓存,使新技能立即生效 clear_skills_system_prompt_cache(clear_snapshot=True) return {"success": True, "message": f"Skill '{name}' created.", ...}
技能创建完成后,系统会立即清除缓存,使新技能在当前会话中即刻可用——这意味着 Agent 在同一次任务中就能复用刚刚总结的经验。
这种从无到有的自动生成能力,打破了人工编写技能的瓶颈,让 Agent 能够适应各种未知的场景。
技能的自我进化
更重要的是,这些自动生成的技能并不是一成不变的。随着 Agent 处理更多类似的任务,它会不断完善和优化现有的技能文档,添加新的边界条件处理,优化执行步骤。
技能的生命周期并不止于"创建"。Hermes-agent 同样在系统层面规定了技能的维护义务:当 Agent 在使用某个技能时发现它"过时、不完整或有错误",必须立即修复,不必等待用户提示。
技能进化的核心工具是 patch 动作。 与 edit(全量替换)不同,patch 采用精准的 find-and-replace 方式,只修改需要变更的片段,大幅降低 Token 消耗。这是 Hermes 明确推荐的首选更新方式:
# Agent 发现技能如deploy-k8s中缺少对某个错误信息如 ImagePullBackOff 的处理,立即修补 skill_manage( action="patch", name="deploy-k8s", old_string="## 已知陷阱\n- ImagePullBackOff:检查 registry 凭证是否已配置为 K8s Secret", new_string="""## 已知陷阱 - ImagePullBackOff:检查 registry 凭证是否已配置为 K8s Secret - CrashLoopBackOff:先用 `kubectl logs <pod>` 查看启动日志,通常是配置文件路径错误 - 节点资源不足:`kubectl describe node` 检查 CPU/Memory 是否有 Pressure 状态""" ) # 返回:{"success": true, "message": "Patched SKILL.md in skill 'deploy-k8s' (1 replacement)."}
在底层,_patch_skill 函数调用了 fuzzy_find_and_replace,这意味着即便 Agent 提供的 old_string 存在轻微的空白符差异或缩进偏差,匹配依然能够成功——这是一个专门为 LLM 生成内容的不精确性而设计的容错机制。
# tools/skill_manager_tool.py(节选) def _patch_skill(name, old_string, new_string, file_path=None, replace_all=False): target = skill_dir / "SKILL.md" # 默认修改 SKILL.md content = target.read_text(encoding="utf-8") # 使用模糊匹配引擎,容忍空白符/缩进差异 new_content, match_count, match_error = fuzzy_find_and_replace( content, old_string, new_string, replace_all ) if match_error: # 匹配失败时返回文件预览,帮助 Agent 自我纠正 return {"success": False, "error": match_error, "file_preview": content[:500]} # 校验 patch 后 frontmatter 结构仍然完整 _validate_frontmatter(new_content) # 原子写入 + 安全扫描 + 回滚机制 _atomic_write_text(target, new_content) ...
值得注意的是,patch 失败时系统会返回文件的前 500 字符作为预览,这是一个专门为 Agent 自我纠错设计的反馈机制——Agent 可以根据预览重新构造正确的 old_string,完成自主修复,无需人工介入。
除了修改 SKILL.md 正文,Agent 还可以通过 write_file 动作为技能添加辅助文件,例如将复杂的 API 文档写入 references 目录,或将可复用的脚本放入 scripts 目录,形成一个完整的技能知识包。
这种从有到优的自我进化,使得 Agent 的能力随着使用时间的增长而不断增强——就像一个经验丰富的工程师,每解决一个新问题,都会让他的技能树更加完整。
03
—
不只是 Agent:hermes 还在为下一代模型采集训练数据
当然 Agent 处理任务的能力单靠 skill 是还不够,无论 Agent 设计得多么精妙,它的最终表现仍然受限于底层大语言模型(LLM)的推理和规划能力。Skill 可以让 Agent 更高效地执行已知任务,但面对真正需要深度推理的新问题,模型本身的能力才是最终的瓶颈。要突破这个现实约束,就必须让模型本身变得更强。
hermes-agent 的架构中隐藏着一个"大招":它与的强化学习(RL)框架 Atropos 进行了深度集成。在 hermes-agent 执行任务的过程中,它不仅会生成 Skill,还会完整记录下整个执行轨迹(Trajectory),包括所有的工具调用、环境反馈、推理过程以及最终的奖励评分(Reward)。
这些包含了丰富上下文和交互细节的 Trajectory 数据,是微调和训练下一代模型的高质量数据。
hermes-agent 不仅仅是在让当前的 Agent 变强,它更像是一个不知疲倦的数据源,在真实世界的交互中不断积累高质量的训练数据资产。开发者可以并行生成数以千计的工具调用轨迹,导出这些数据,并用它们来微调模型。
这是一种从 Agent 到 Model 的能力迁移。今天 Agent 踩过的坑、总结的经验,明天就会成为新模型出厂自带的"本能"。hermes 不只是让 Agent 变强,而是在为更强的模型积累数据资产。
04
—
结语
从手动编写 Skill 到 Agent 自主生成、改进优化,hermes-agent 向我们展示了 Agent 发展的下一个重要阶段:自我进化。
当 Agent 成为一个长期运行的进程,能够不断积累关于你的代码库、工作流和决策模式的知识时,它就不再只是一个工具,而是真正意义上会成长的智能体。
更深远的意义在于它展示了:Agent 在真实世界中的每一次交互,都在为下一代更强大的模型积累数据预料。这个从Agent 使用到模型进化的数据飞轮,才是 hermes-agent 最令人兴奋的地方。
(如果这篇文章对您有所帮助,请帮忙 关注 并 转发,谢谢!)
参考资料
[1] NousResearch. (2026 ). hermes-agent: The agent that grows with you. GitHub.
https://github.com/NousResearch/hermes-agent
[2] Janakiram MSV. (2026 ). OpenClaw vs. Hermes Agent: The race to build AI assistants that never forget. The New Stack.
https://thenewstack.io/persistent-ai-agents-compared
[3] NousResearch. (2026 ). Hermes Agent v0.6.0 Release Notes. GitHub.
https://github.com/NousResearch/hermes-agent/blob/main/RELEASE_v0.6.0.md