当前位置: 首页 > news >正文

从 Hermes Agent 架构中提炼出的第11个 LangGraph 设计模式:Self-Improving Agent

从 Hermes Agent 架构中提炼出的第11个 LangGraph 设计模式:Self-Improving Agent

拆解 Nous Research 最新开源项目的学习闭环,用 LangGraph 实现一个会自我进化的 Agent

这两天 Nous Research 发布了 Hermes Agent,一个号称"会随你成长的 AI Agent"。28k+ GitHub stars(现在有33.1k了),社区讨论热度很高。

我花了几天时间深入分析了它的源码,发现最有价值的可能不在于它的40+工具或14个平台接入,反而是它的学习闭环架构——Agent 完成复杂任务后,自动将方法提取为可复用的 Skill,下次遇到类似问题直接调用并改进,当然这也是 Hermes Agent 的核心卖点。

我觉得这个设计理念十分不错,再结合自身的开源项目 AgentFlow,完全可以用 LangGraph 的 StateGraph 来实现。于是我把它提炼成了 AgentFlow 的第11个设计模式:Self-Improving Agent


一、Hermes 的核心设计:四层记忆 + 学习闭环

1.1 四层记忆架构

传统 Agent 的做法是把所有历史对话塞进 context window。问题很明显——token 线性增长,几轮对话后要么截断(丢失信息),要么全塞(费钱且注意力稀释)。

Hermes 的解法是把记忆按访问频率进行分层,和计算机的 CPU缓存/内存/磁盘 是完全相同的思路:

层级存储大小加载时机
Layer 1MEMORY.md~800 tokens每次对话开始,冻结快照注入 system prompt
Layer 2USER.md~500 tokens同上,记录用户偏好和沟通风格
Layer 3SQLite FTS5无限按需检索,"上周讨论的 X 是什么?"
Layer 4Skills/渐进加载Level 0 只加载名称(~3k tokens),Level 1 按需加载全文

这样设计有几点好处:

  • 有界热记忆:MEMORY.md 限制 2200 字符,满了必须先整合再添加、跟 Claude Code 相反,当然这肯定不是 bug,而是 feature——强制记忆保持高信噪比。
  • 渐进式技能加载:643+ 个 skill 不可能全塞进 context window,所以默认只看名字,匹配到才加载全文。
  • 冻结快照:session 开始时冻结记忆快照,避免高频 LLM 调用时每次都重建 system prompt,配合 Anthropic 的 prompt caching 省 token。

1.2 学习闭环

任务完成 → 评估质量 → 高分(≥7) + 复杂(≥5步) ↓ 提取方法为 Skill Markdown ↓ 下次遇到类似任务 → 加载 Skill 指导执行 ↓ 根据新结果更新 Skill(自我改进)

每15个任务触发一次Periodic Nudge:Agent 全局评估自己的记忆,整合重复条目,清理过期信息。

核心在于:Hermes 记住的是方法,而不是事实。它把成功的工作流转化为可复用的程序,这就是所谓的 Procedural Memory(程序性记忆)。


二、LangGraph 实现:Self-Improving Agent

我用 LangGraph StateGraph 实现了这个模式,5个节点:

Router → Executor → Evaluator → Skill Extractor → Memory Updater

2.1 核心 State 定义

class AgentState(TypedDict): messages: Annotated[list, add_messages] task: str task_type: str matched_skill: Optional[dict] # 从 Skill Store 检索到的技能 execution_steps: list[str] # 执行步骤记录 result: str evaluation_score: float # 1-10 质量评分 should_create_skill: bool # 是否需要提取技能 should_update_memory: bool # 是否触发记忆整合 task_count: int # 任务计数器(控制 nudge 频率)

2.2 MemoryStore:双层持久化

class MemoryStore: """ Layer 1 - Hot Memory: 有界(2000字符), 每次注入 system prompt Layer 2 - Skill Store: 渐进加载, JSON markdown 文件 """ def get_memory_snapshot(self) -> str: """冻结快照,注入 system prompt""" def get_skill_index(self) -> list[dict]: """Level 0: 只返回名称和描述""" def get_skill(self, name: str) -> dict: """Level 1: 加载完整技能内容""" def save_skill(self, skill: dict): """保存新技能或更新已有技能""" def consolidate_memory(self, entries: list[str]): """Nudge: 整合记忆,替换所有条目"""

2.3 关键条件边:什么时候触发技能提取?

should_create = ( score >= 7.0 # 高质量完成 and num_steps >= 3 # 非平凡任务(至少3步) and not state["matched_skill"] # 没有使用已有技能(避免重复创建) )

这直接借鉴了 Hermes 的设计:只有"足够复杂"且"做得足够好"的任务才值得提取为技能。Hermes 用的阈值是 5+ tool calls,我这里简化成 3 步,当然可以按需设置。

2.4 Skill 的数据结构

{ "name": "python_code_review", "description": "Review Python code for bugs, security issues, and style", "task_type": "code_review", "procedure": "1. Check for security issues...\n2. Check logic bugs...\n3. Check performance...", "pitfalls": "Don't just look at syntax, check for race conditions in async code", "verification": "Ensure every finding has a concrete fix suggestion", "use_count": 3, "avg_score": 8.2 }

这里需要注意三个字段:

  • procedure— 核心,记录的是方法不是结论。"先查安全→再查逻辑→最后看性能",这个执行顺序本身就是知识。
  • pitfalls— 记录踩过的坑,防止下次犯同样的错。
  • verification— 怎么验证结果是对的。没有这个字段,skill 就只是一堆指令,没有质量保障。

2.5 Skill 的复用与自我改进

在 Executor 节点,匹配到的 skill 会被注入到 prompt 中引导执行:

def executor(state: AgentState) -> AgentState: skill_guidance = "" if state.get("matched_skill"): skill = state["matched_skill"] skill_guidance = f""" You have a relevant skill to guide you: Procedure: {skill['procedure']} Pitfalls to avoid: {skill['pitfalls']} Verification: {skill['verification']} """ # skill_guidance 注入 prompt,引导 LLM 按已验证的方法执行

这里并不是硬编码——LLM 仍然可以偏离 skill 的步骤。但有了 skill 指导,输出质量和一致性会显著提高。

当已有技能被复用时,根据新评分更新统计:

def update_skill_stats(self, skill_name: str, score: float): skill["use_count"] += 1 skill["avg_score"] = running_average(old_avg, new_score)

低分技能自然淘汰(Router 优先匹配高分技能),高分技能持续强化——简化版"自然选择"。


三、与 Hermes 原版的对比

特性Hermes AgentAgentFlow 实现
记忆层数4层 + 可插拔外部 provider2层(Hot Memory + Skill Store)
技能格式http://agentskills.io Markdown 标准JSON(更适合程序化处理)
技能加载渐进式 Level 0/1/2简化版 Level 0/1
Nudge 频率每15个任务可配置(默认5)
编排引擎同步单循环 (run_agent.py)LangGraph StateGraph(声明式)
User ModelingHoncho 辩证用户建模未实现(可扩展)

关键差异:Hermes 是一个完整产品(9200行核心代码),而我的实现是一个可组合的设计模式(~300行),可以嵌入到任何 LangGraph 项目中。


四、适用场景

  • 重复性知识工作:代码审查、数据分析、报告生成——做过一次的事不应该从零开始
  • 个人 AI 助手:积累用户偏好,越用越懂你
  • 自动化运维:把排障流程沉淀为技能,新人也能用
  • 教育场景:Agent 记住学生的薄弱点,调整教学策略

五、如何集成到你的项目

from self_improving_agent import create_self_improving_agent agent = create_self_improving_agent( llm=your_llm, storage_dir="./my_agent_memory", nudge_interval=10, skill_threshold=7.0, ) result = agent.invoke({ "messages": [HumanMessage(content="你的任务")], "task": "你的任务", "task_type": "", "matched_skill": None, "execution_steps": [], "result": "", "evaluation_score": 0, "should_create_skill": False, "should_update_memory": False, "task_count": current_count, })

六、总结

Hermes Agent 最值得学习的不是它的40+工具,而是它的架构思想

  1. 有界热记忆> 无限上下文窗口——强制高信噪比
  2. 程序性记忆> 陈述性记忆——记住方法,不是事实
  3. 渐进式加载> 全量注入——用 token 预算换技能规模
  4. 周期性自省> 被动积累——定期整理才能保持记忆质量

这些原则适用于任何 Agent 系统,不仅仅是 Hermes。

http://www.rkmt.cn/news/1462667.html

相关文章:

  • 学习严谨的大湾区EMBA:5大高严谨度优质项目深度解析 - 品牌2026推荐
  • 我花了半年写论文,只花3分钟做PPT:一键生成到底有多强?
  • OpenProject终极指南:如何用免费开源软件实现专业项目管理
  • 实战案例解析:如何用智能工具提升网盘下载效率300%
  • 解锁百度网盘全速下载:3分钟掌握直链解析秘诀
  • 2026轴流风机厂家最新推荐:方形壁式/防爆防腐/边墙轴流风机优质品牌测评 - 资讯纵览
  • 2026年新能源洁净空调推荐榜单:锂电池洁净空调/新能源净化空调/新能源中央空调最新品牌实力解析与口碑之选 - 品牌企业推荐师(官方)
  • 别再让EMC测试卡脖子!硬件工程师必看的PCB布局与接地实战避坑指南
  • Arduino避障机器人实战:从传感器原理到代码实现的完整指南
  • 2026年湖州代理记账推荐榜单:5家靠谱专业服务机构精选 - 本地品牌推荐
  • 微博相册批量下载神器:告别繁琐手动保存,一键获取高清原图
  • UVa 383 Shipping Routes
  • 破解窗户漏水反复修漏难题:‘测定施保’四阶根治法如何实现长效不漏? - 资讯纵览
  • 计算机毕业设计之基于大数据的中医药传承平台的构建
  • UltraStar Deluxe:从零开始打造你的开源卡拉OK娱乐中心
  • 开源IT资产管理系统Snipe-IT:如何三步解决企业资产管理难题
  • 什么是穿越机?从“空中F1”到沉浸式飞行的终极体验
  • 2026多联机口碑榜:选购必看的六大核心维度 - 资讯纵览
  • 空铁复合网络的复杂性及联运网络设计方案【附代码】
  • 最新发布!清远夏令营哪家靠谱? - 13724980961
  • 2026前端必备:手把手教你打造AI Agent,引领全栈开发新潮流!
  • Xournal++:为什么这款免费开源手写笔记软件是你的数字笔记革命终极选择?
  • 【通信】基带QAM通信系统Matlab仿真
  • ControlNet-v1.1 FP16模型集:当AI绘画遇到效率革命
  • Agent“活”起来!企业级动态RAG的可靠记忆与知识进化之路
  • nf-core流程本地化实战:从AWS-iGenomes到自定义参考基因组的配置避坑指南
  • 2026 年 6 月消防设施操作员免费题库实测:告别无效刷题 - 讲清楚了
  • Qt Quick Canvas 画布实战:手把手教你用QML打造一个可复用的汽车仪表盘组件
  • QNAP多云盘挂载工具完整指南:一站式云存储管理中心终极方案
  • 2026 年 6 月消防设施操作员题库高效备考攻略:5 款工具实测 - 讲清楚了