深度拆解Hermes Agent,动态Prompt与Learning Loop架构的底层逻辑

张开发
2026/4/18 4:45:32 15 分钟阅读

分享文章

深度拆解Hermes Agent,动态Prompt与Learning Loop架构的底层逻辑
在AI Agent领域很多人对“智能”的理解还停留在“能对话、能执行简单指令”的层面但真正能实现“长期陪伴、自我进化”的Agent却寥寥无几。Nous Research开源的Hermes Agent正是打破这一局限的典型代表它不是一个一次性的聊天工具而是一个能“跟着用户一起成长”的自改进Agent运行环境。不同于普通聊天助手只依赖当前对话上下文Hermes Agent内置了完善的动态Prompt架构和Learning Loop学习循环机制能从每一次任务中沉淀经验、积累技能甚至形成对用户的跨会话理解。很多开发者在研究Hermes时容易陷入“模型能力”的误区却忽略了它最核心的竞争力一套工程化的上下文管理与经验沉淀系统。今天我们就彻底拆解Hermes Agent的动态Prompt设计和Learning Loop架构用通俗易懂的语言讲清它“自我进化”的底层逻辑让大家明白一个能长期可用的AI Agent真正的核心不是模型有多强而是如何让模型“记住该记的、学会该会的、做好该做的”。先搞懂Hermes Agent到底是什么在拆解核心架构前我们先明确Hermes Agent的定位——它不是单一的聊天机器人而是一个完整的Agent运行环境。很多人下载源码后会疑惑为什么它包含了CLI交互界面、消息平台网关、工具系统、记忆系统等一系列组件其实这正是它和普通聊天助手的本质区别普通助手是“单一功能工具”而Hermes是“能承载多种能力、实现长期进化的平台”。从功能层面Hermes Agent的核心能力可以分为8大类其中最关键的是记忆系统Persistent Memory和技能系统Skills System这也是它动态Prompt和Learning Loop能落地的基础Tools amp; Toolsets工具系统可根据使用平台灵活启用或禁用比如文件读取、会话搜索、技能管理等工具是Agent与外部交互的核心载体Skills System技能系统不是简单的工具列表而是可复用的工作流说明比如GitHub PR流程、代码审查、文档处理等能让Agent避免重复摸索Persistent Memory持久记忆跨会话保存用户偏好、项目细节、环境约定等让Agent每次对话都不用“从零开始”Context Files项目上下文文件自动加载当前工作目录的项目规则让Agent遵守项目约定避免犯低级工程错误Messaging Gateway消息网关支持将Agent接入Telegram、微信、Slack等多个消息平台实现多终端同步使用Cron Scheduling定时任务支持用自然语言创建定时任务比如定时复盘经验、定时执行工具操作MCP Integration外部扩展可连接外部MCP服务器进一步扩展工具能力子Agent委派与多终端后端支持将复杂任务委派给子Agent同时适配不同终端的运行需求。其中记忆系统和技能系统是Hermes Agent“自我进化”的核心支撑我们可以简单理解为记忆系统是Agent的“笔记本”记录长期事实和用户偏好技能系统是Agent的“操作手册”沉淀可复用的工作方法。而动态Prompt就是将这些“笔记本”和“操作手册”按需组装让Agent在不同场景下拥有合适的“身份和能力”Learning Loop则是负责不断更新“笔记本”和“操作手册”的后台机制。这里有一个关键误区需要澄清Hermes Agent的“自我进化”不是修改模型参数也不是拥有了“自我意识”而是通过工程化的方式将对话中的有价值信息沉淀到记忆和技能中再在后续会话中重新注入这些内容让Agent的行为越来越贴合用户需求和项目场景。这就像我们人类通过不断学习、总结经验慢慢变得更擅长某件事Hermes做的就是模拟这个“总结经验、复用经验”的过程。核心拆解一动态Prompt不是静态文案是“上下文操作系统”很多人对System Prompt系统提示词的理解还停留在“一句固定的角色设定”比如“你是一个有帮助的AI助手”。但在Hermes Agent中System Prompt完全不是这样——它不是一段写死的文本而是在运行时动态组装的上下文结构就像一个“上下文操作系统”会根据用户、项目、平台、工具等不同场景自动拼接不同的内容形成适合当前会话的Agent身份。在Hermes的源码中System Prompt由AIAgent\.\_build\_system\_prompt\(\)方法负责组装整个拼接过程有明确的顺序每一层都对应Agent的一项核心能力层层叠加后形成一个完整的“Agent身份说明书”。接下来我们逐一拆解这个动态Prompt的每一层结构看看它到底是如何“动态变化”的。第一层SOUL.mdAgent的“人格说明书”可配置、可演化Hermes Agent的人格设定不是写死在源码里的而是来自一个用户可编辑的文件\~/\.hermes/SOUL\.md。如果这个文件不存在Agent才会回退到源码中的默认人格提示。这种设计彻底打破了“Agent人格不可修改”的局限也为Agent的长期演化留下了入口。当前版本中SOUL.md的核心思想非常接地气完全区别于传统的“友好助手”提示词它更像是在给Agent定“工作准则”比如你不是一个普通聊天机器人而是在形成一个持续存在的工作身份。你要真正帮上忙而不是用客套话表现得很有帮助。你可以有判断、有偏好也可以直接指出问题。在向用户提问前先自己查文件、查上下文、查资料。用户给了你访问文件、消息和工具的权限你要用能力赢得信任。涉及外部动作时要谨慎涉及内部探索时要主动。私人内容必须保持私密。每次新会话开始时你都要依靠这些文件和记忆恢复连续性。这段话看似简单却包含了Hermes Agent的核心人格逻辑不敷衍、不盲从、主动探索、注重隐私、保持连续性。和传统Prompt中“你是一个有帮助、友好的AI助手”这种模糊的设定相比SOUL.md的优势非常明显第一用户可以直接修改SOUL.md调整Agent的长期风格比如让Agent更严谨、更简洁或者更主动不需要修改任何源码第二人格可以跨会话稳定存在不会因为新的对话而丢失比如Agent一直保持“主动查资料再回答”的习惯不会因为换了一个话题就变得敷衍第三为Agent的演化留下了入口未来如果用户希望Agent改变沟通方式、工作边界只需要修改SOUL.md即可无需重构整个系统。这背后体现了一个重要的设计原则Agent的人格不应该是“固化在代码里的摆设”而应该是可配置、可迁移、可演化的这样才能适应不同用户、不同场景的需求。第二层工具相关行为指南——按需注入避免模型幻觉很多Agent系统会在Prompt中写上“你可以使用浏览器搜索、可以写入记忆”等内容但实际运行时这些工具可能被用户禁用、缺少API密钥或者在当前平台不支持。如果Prompt中一直提到这些不可用的工具模型就很容易出现“幻觉调用”——明明工具不可用却仍然尝试调用导致任务失败。Hermes Agent的做法非常稳健工具存在才注入对应的行为指南工具不可用就不提及相关内容让Prompt和工具系统保持完全一致。这是一个非常细节但至关重要的工程设计能有效避免模型幻觉提升Agent的可靠性。例如如果memory工具可用Prompt中就会注入“如何保存长期记忆”的规则如果session_search工具可用就会注入“如何回忆历史会话”的规则如果skill_manage工具可用就会注入“如何保存和更新技能”的规则。在当前Hermes的Prompt中由于memory、session_search、skill_manage这三个核心工具默认可用所以会明确提示Agent你拥有跨会话的持久记忆。只保存未来仍然重要的稳定事实比如用户偏好、环境细节、工具使用习惯和长期约定。不要把临时任务进度、一次性TODO或完成日志写入长期记忆。当用户提到过去对话或者你怀疑历史会话里有相关信息时先用session_search查找。完成复杂任务、修复棘手错误或发现可复用流程后用skill_manage保存成技能。如果已有技能过时、不完整或错误要主动修补它。这段话不仅告诉Agent“可以用什么工具”更明确了“什么时候用、怎么用”相当于给Agent制定了一套“工具使用手册”。比如它明确区分了“长期记忆”和“临时内容”避免Agent把无关信息写入记忆明确要求Agent在需要回忆历史时先搜索避免凭记忆猜测明确要求Agent在完成任务后沉淀技能实现经验复用。这种“工具与Prompt联动”的设计让Agent的行为更可控、更可靠也避免了很多不必要的错误。第三层Memory与User Profile让Agent“记住你、记住事”普通聊天助手的最大局限的是“记不住事”每次对话都是全新的开始用户需要反复解释自己的偏好、项目细节。而Hermes Agent通过动态注入Memory记忆和User Profile用户画像彻底解决了这个问题它会把长期有价值的信息保存下来在新会话开始时自动注入Prompt让Agent每次对话都能“认出你、记得之前的事”。Hermes的内置记忆由两个文件组成分工非常清晰第一个是MEMORY\.md相当于Agent的“个人笔记”用来保存长期稳定的事实比如用户偏好、环境细节、工具使用惯例、稳定约定、反复出现的问题以及能减少未来重复解释的信息。比如用户告诉Agent“我习惯用VS Code编辑代码”这句话就会被写入MEMORY.md后续Agent在推荐编辑工具时就会优先推荐VS Code再比如Agent发现“每次调用某个工具都需要先激活虚拟环境”这个经验也会被写入MEMORY.md避免未来再犯同样的错误。第二个是USER\.md相当于Agent的“用户档案”专门用来保存用户的身份信息和沟通偏好比如用户的名字、所在时区、关心的项目、喜欢的沟通方式、不喜欢的行为。比如用户说“我不喜欢太冗长的回复尽量简洁”这句话就会被写入USER.md后续Agent的回复就会自动调整为简洁风格再比如用户告诉Agent“我所在的时区是东八区”Agent就会根据这个信息调整定时任务的时间、回复的时间相关表述。这里有一个非常关键的细节不是所有内容都能写入Memory和User Profile。Hermes明确规定以下内容不适合进入长期记忆临时任务进度、已完成工作的流水账、一次性TODO、本轮会话中的短期状态。原因很简单如果把这些无关内容都塞进去Prompt会越来越冗长不仅会增加模型的处理成本还会让模型被无关信息干扰影响回复质量。更合理的分工是长期偏好进入Memory用户身份信息进入User Profile历史对话细节通过session_search工具查询可复用流程沉淀为Skill。这种清晰的信息管理策略让Agent的“记忆”变得更高效、更纯净。另外Memory和User Profile并不是在同一会话的每一轮都实时重新注入。Hermes会在会话开始时将这两个文件的内容作为“冻结快照”注入System Prompt在同一会话内复用这个快照不会每一轮都重新加载。这样做的目的是保护Prompt Cache提示词缓存避免因为每一轮Prompt变化而导致缓存失效从而降低成本、减少延迟。第四层Skills——把经验沉淀成“可复用操作手册”如果说Memory和User Profile解决了Agent“记住事、记住人”的问题那么Skills系统就解决了Agent“学会方法、复用方法”的问题。Skills是Hermes Agent最核心的设计之一它不是简单的工具列表而是Agent可以按需加载的“可复用工作流”相当于给Agent提供了一套“操作手册”让Agent不需要每次都重新摸索解决问题的方法。在Hermes的动态Prompt中会自动注入当前可用的技能列表比如GitHub工作流、系统化调试、测试驱动开发、MCP使用、macOS自动化、文档处理、YouTube内容提取、代码审查、多Agent协作等。这些技能的内容非常详细不仅包含“什么时候用”还包含“怎么用、注意什么”比如一个“GitHub PR流程”技能可能会包含什么时候应该使用这个技能当需要提交代码到GitHub并创建PR时使用前需要检查什么代码是否通过测试、是否符合项目编码规范、是否有未解决的冲突应该调用哪些命令git add、git commit、git push、创建PR的命令常见坑点是什么忘记拉取最新代码导致冲突、提交信息不规范、未关联相关issue用户偏好的做法是什么提交信息需要包含issue编号、PR描述需要清晰说明修改内容完成后如何验证检查PR是否成功创建、是否通过CI测试、是否有代码审查意见。Hermes的System Prompt会明确要求Agent回复前先检查可用技能列表只要某个技能和当前任务相关哪怕只是部分相关也应该先加载该技能加载后按照技能中的步骤执行如果技能内容有问题要主动修补如果本次任务形成了新的可复用经验要考虑保存为新技能。这个设计带来的实际好处非常明显Agent不需要每次都重新摸索解决问题的方法。比如用户让Agent帮忙做代码审查而Hermes已经沉淀了“代码审查”技能Agent就会直接加载这个技能按照技能中规定的步骤检查代码包括代码规范、逻辑漏洞、测试覆盖等而不是从通用经验重新开始大大提升了效率和准确性。更重要的是Skills不是静态的文档而是可维护、可更新的。如果Agent在使用某个技能时发现它已经过时、不完整或错误就会主动修补这个技能如果遇到了新的可复用方法就会创建新的技能。这就让Agent的“能力”能够不断积累、不断优化真正实现“自我进化”。其他动态层让Prompt适配不同场景除了上述四层核心内容Hermes的动态Prompt还包含多个辅助层用来适配不同的模型、平台、环境和项目场景确保Agent在任何情况下都能“找准自己的定位”Nous subscription相关提示根据当前工具和订阅/环境状态按需加入比如用户开通了特定订阅就会注入相关的功能提示工具使用强制规则根据模型、工具和配置按需加入比如对GPT/Codex类模型会注入更强的执行纪律避免模型“只说不做”用户或gateway传入的system message允许用户在会话开始时临时注入自定义的系统提示满足个性化需求外部memory provider的系统提示块如果接入了外部记忆服务就会注入相关的提示内容项目上下文文件自动加载当前工作目录的项目规则让Agent遵守项目约定会话开始时间、Session ID、模型和provider让Agent知道当前的运行环境和会话信息特定provider的模型身份修正比如接入Alibaba provider时会注入相关的身份修正提示确保模型行为符合平台要求环境提示比如当前运行在WSL、Termux等环境中会注入相关的环境适配提示平台特定提示比如在CLI、Telegram、微信、Slack等不同平台运行时会注入对应的平台交互提示。除此之外Hermes还有一类特殊的提示词——ephemeral_system_prompt临时系统提示词。它不会存入缓存的System Prompt也不会写入SessionDB而是在每次API调用时临时拼到最终的System Prompt后面。这样做的好处是既能临时影响模型的行为又不会破坏稳定的缓存前缀比如临时让Agent更注重细节、更简洁任务完成后就恢复正常不会影响后续会话。总结来说Hermes的动态Prompt不是一段简单的文本而是由多个独立层组成的“上下文操作系统”。不同用户、不同项目、不同平台、不同模型、不同工具集最终生成的System Prompt都可能不一样但每一层都有明确的作用和来源既保证了Agent的灵活性又保证了行为的稳定性。核心拆解二Learning Loop后台复盘让Agent悄悄“成长”如果说动态Prompt是Hermes Agent的“身份和能力基础”那么Learning Loop学习循环就是它“自我进化”的核心动力。很多人误以为Hermes的“自我进化”是模型本身在学习其实不然——它的学习过程更像是一个后台复盘系统当达到一定阈值时Hermes会在主回复完成后后台启动一个临时Agent回顾刚才的对话判断是否有内容值得保存到Memory或者是否应该创建/更新Skill。这个过程完全是异步的不会阻塞主回复也不会向用户发送无关的复盘信息只会在成功创建或更新Memory、Skill时显示一条简短的提示比如“Memory已更新”“新Skill已创建”。这种设计既保证了用户体验又实现了经验的沉淀让Agent在“不打扰用户”的情况下悄悄成长。在Hermes的源码中这个机制被称为“Background memory/skill review”后台记忆/技能复盘它包含三类复盘Prompt分别对应不同的复盘场景我们逐一拆解。6.1 Memory Review Prompt筛选有价值的“长期事实”Memory Review记忆复盘的核心目的是从对话中筛选出值得长期保存的事实信息避免Memory被无关内容污染。当触发Memory复盘时后台临时Agent会收到这样的指令回顾上面的对话判断是否有适合保存到长期记忆中的内容。重点关注两类信息第一用户是否透露了关于自己的稳定信息比如性格、愿望、偏好或值得以后记住的个人细节。第二用户是否表达了对你行为方式的期待比如希望你如何工作、如何沟通、采用什么工作风格。如果发现有价值的信息就使用memory工具保存。如果没有值得保存的内容就回答“Nothing to save.”并停止。这段话的核心是“筛选”而不是“总结”。它不要求Agent总结整个对话的内容只要求Agent找出“长期有价值”的信息比如用户说“我以后希望你优先使用Python编写脚本”这句话就是用户的稳定偏好会被保存到Memory再比如用户说“你之前的回复太冗长了以后尽量简洁”这句话是用户对Agent行为方式的期待也会被保存到Memory。而像“我现在要修改这个文件”“这个任务已经完成了”这类临时内容不会被保存到Memory因为它们没有长期复用价值。如果没有找到有价值的信息后台Agent就会回复“Nothing to save.”然后停止复盘不会做多余的操作。这种“有价值才保存”的筛选机制是Hermes Memory系统高效、纯净的关键。一个好的记忆系统不是“什么都记”而是“记该记的”这样才能避免Memory越来越臃肿也能让Agent在后续会话中快速获取有价值的信息。6.2 Skill Review Prompt沉淀可复用的“工作方法”Skill Review技能复盘的核心目的是从任务中沉淀可复用的工作方法让Agent下次遇到类似任务时能够直接复用经验不需要重新摸索。当触发Skill复盘时后台临时Agent会收到这样的指令回顾上面的对话判断是否应该保存一个新技能或者更新已有技能。重点关注这次任务是否使用了非平凡的方法是否经历了试错是否因为过程中发现的新情况而改变策略用户是否期待另一种方法或结果如果已经存在相关技能就把这次学到的内容更新进去。如果没有相关技能但这个方法未来可以复用就创建一个新技能。如果没有值得保存的内容就回答“Nothing to save.”并停止。这里的关键是“非平凡的方法”——也就是说普通的、通用的方法不需要保存只有那些经过试错、有特殊技巧、可复用性强的方法才值得沉淀为Skill。比如用户让Agent调试一个Python脚本Agent经过多次试错发现是“虚拟环境未激活导致的模块导入错误”并且总结出了“先激活虚拟环境、再检查模块安装情况、最后运行脚本”的调试流程这个流程就属于“非平凡的方法”会被保存为新的Skill再比如Agent发现之前的“GitHub PR流程”技能中缺少了“关联issue”的步骤就会把这个步骤更新到已有技能中。Skill Review关注的不是“用户是谁”而是“解决问题的方法是什么”它让Agent的“能力”能够不断积累比如从不会调试某个服务到慢慢掌握该服务的调试流程从不会使用某个工具到慢慢沉淀出该工具的使用技巧。这种过程性的学习正是Hermes Agent“自我进化”的核心体现。6.3 Combined Review Prompt——同时复盘记忆和技能有些对话中既包含用户的偏好信息又包含可复用的工作方法这时Hermes会触发Combined Review联合复盘让后台临时Agent同时检查Memory和Skill避免遗漏有价值的信息。联合复盘的指令如下回顾上面的对话同时考虑两件事。第一是否有值得保存到memory的信息用户是否透露了关于自己的稳定信息用户是否表达了对你行为方式、工作风格或沟通方式的期待如果有就使用memory工具保存。第二是否有值得保存为skill的方法本次任务是否使用了非平凡方法是否经历了试错是否根据实践发现改变了方向用户是否期待不同的方法或结果如果已有相关技能就更新它。如果没有相关技能但方法可复用就创建一个新技能。只有在确实有内容值得保存时才行动。如果没有明显值得保存的内容就回答“Nothing to save.”并停止。联合复盘的核心是“兼顾”既不遗漏用户的偏好信息也不遗漏可复用的工作方法。比如用户在让Agent处理文档的过程中既说“我喜欢用Markdown格式的文档”用户偏好需保存到Memory又展示了“如何快速批量转换文档格式”的方法可复用方法需保存为Skill这时后台Agent就会同时处理这两件事既更新Memory又创建新Skill。无论哪种复盘方式都有一个共同的约束只有在确实有内容值得保存时才行动没有价值就停止。这个约束非常重要它避免了Hermes无脑记录防止Memory和Skill被无关内容污染保证了经验沉淀的质量。关键补充Learning Loop的触发机制与异步设计Hermes的Learning Loop不是随时都在运行而是有明确的触发条件和阈值并且采用异步后台运行的方式避免干扰用户的正常使用。我们从触发方式、运行机制两个方面补充拆解它的设计细节。7.1 触发方式达到阈值才启动避免频繁复盘Hermes的Learning Loop有明确的触发阈值默认情况下Memory Review记忆复盘每10个用户turn用户发言次数触发一次。触发时需要同时满足三个条件memory.nudge_interval gt; 0开启记忆复盘、当前工具集中包含memory工具、内置memory store已启用并加载。Skill Review技能复盘每10次工具调用迭代后触发一次。触发时需要同时满足三个条件skills.creation_nudge_interval gt; 0开启技能复盘、当前工具集中包含skill_manage工具、工具调用迭代计数达到阈值。这样的设计避免了每次对话都进行复盘减少了系统资源消耗同时也保证了复盘的质量经过10次用户发言或10次工具调用往往已经积累了一定的经验和信息此时复盘更有价值。用户也可以根据自己的需求修改配置文件中的阈值比如把Memory Review的阈值改为5次让Agent更频繁地保存用户偏好。7.2 运行机制异步后台执行不干扰主任务Hermes的Learning Loop最核心的设计之一就是“异步后台执行”。它的运行流程大致如下1. 主Agent完成用户当前的任务向用户发送回复2. 检查是否达到复盘阈值如果达到后台fork一个临时Agent3. 临时Agent执行复盘任务判断是否有内容值得保存到Memory或Skill4. 如果有临时Agent使用memory或skill_manage工具将内容写入对应的文件MEMORY.md、USER.md或技能文件5. 复盘完成后临时Agent自动停止不向用户发送任何多余回复除非成功保存了内容会显示一条简短提示6. 主Agent继续等待用户的下一条指令不被复盘过程干扰。同时后台复盘Agent还有一个限制最多运行8次迭代避免因为复盘任务过于复杂而占用过多系统资源。这种“主任务与复盘任务分离”的设计非常符合真实的产品体验——用户要的是任务结果而不是看Agent“自我反思”后台异步复盘既保证了经验沉淀又不会干扰用户的正常使用。举个例子用户让Agent帮忙调试一个代码bug主Agent很快找到bug并给出修复方案用户确认问题解决后主Agent的任务就完成了。此时如果达到了Skill Review的阈值后台就会启动临时Agent回顾整个调试过程判断是否有可复用的调试方法如果有就创建一个新的Skill这个过程完全不会影响用户用户甚至不知道后台正在进行复盘只有当Skill创建成功时才会看到一条“新Skill已创建”的简短提示。7.3 Pre-reset Flush会话清空前的“最后一次整理”除了周期性的Learning LoopHermes还有一个特殊的复盘机制Pre-reset Flush重置前刷新用来解决“会话上下文丢失导致经验遗漏”的问题。在网关场景下用户可能在Telegram、微信、Slack等平台进行长时间对话而这些平台的会话可能会因为长时间不活跃、每日重置等原因被清空会话上下文一旦清空里面的有价值信息比如用户新的偏好、新的工作方法就可能被遗漏无法沉淀到Memory或Skill中。Pre-reset Flush机制就是为了解决这个问题当会话即将因为空闲或每日重置而清空时Hermes会触发一次复盘让临时Agent执行“临终整理”指令如下当前会话即将因为长时间不活跃或定时重置而自动清空。这一轮之后对话上下文会被清除。请回顾上面的对话并完成以下检查1. 如果其中有未来会话仍然有用的重要事实、用户偏好或决定请保存到memory或user profile。2. 如果你发现了可复用工作流或者解决了一个非平凡问题请考虑保存为skill。3. 如果没有值得保存的内容可以直接跳过。不要回复用户。只在需要时使用memory和skill_manage工具然后停止。这次复盘的核心是“查漏补缺”在上下文丢失前最后检查一次是否有遗漏的有价值信息。同时为了避免旧会话的信息覆盖新的记忆临时Agent会先读取当前的live memory状态也就是最新的MEMORY.md和USER.md并被明确要求不要覆盖或删除已有记忆除非当前对话确实证明旧内容已经被取代只添加尚未被记录的新信息。比如用户在会话即将清空时提到“我以后希望你用中文编写注释”这句话是新的用户偏好Pre-reset Flush机制就会让临时Agent将这句话保存到Memory中避免因为会话清空而丢失。这种设计进一步增强了Hermes的长期连续性也降低了多会话、定时任务或用户手动更新记忆后被旧上下文覆盖的风险。补充拆解Project Context与工具执行纪律除了动态Prompt和Learning LoopHermes Agent还有两个关键设计分别是Project Context项目上下文和工具执行纪律它们虽然不是核心架构的一部分但却是动态Prompt能落地、Learning Loop能有效沉淀经验的重要保障我们简单拆解一下。8.1 Project Context让Agent“遵守项目规则”对于coding Agent来说最容易犯的低级错误就是“不遵守项目约定”比如忘记激活虚拟环境、跑错测试命令、硬编码用户目录、忽略项目已有架构等。Hermes通过自动加载Project Context项目上下文彻底解决了这个问题它会根据当前工作目录自动加载项目的规则文件让Agent在进入项目时先“阅读项目手册”再开展工作。Hermes加载项目上下文文件的优先级如下first found wins只加载第一个命中的文件不叠加\.hermes\.md/HERMES\.md从当前目录向上查找到git root项目根目录AGENTS\.md/agents\.md只查找当前工作目录CLAUDE\.md/claude\.md只查找当前工作目录\.cursorrules/\.cursor/rules/\*\.mdc只查找当前工作目录。这些项目上下文文件会告诉Agent项目的核心规则比如项目结构是什么、运行Python前必须激活哪个虚拟环境、如何新增工具、如何新增slash command、如何处理profile-safe路径、不要硬编码\~/\.hermes目录、测试应该怎么跑、已知的坑点是什么等。比如某个项目的AGENTS\.md文件中写着“运行Python脚本前必须先激活venv虚拟环境命令为source venv/bin/activate”那么Hermes Agent进入这个项目后就会自动加载这条规则在运行Python脚本时先执行激活虚拟环境的命令避免出现模块导入错误。这种设计让Agent能够快速适配不同的项目场景减少低级错误也让Learning Loop沉淀的技能更贴合项目实际提高技能的复用价值。8.2 工具执行纪律防止Agent“只说不做”很多AI Agent的通病是“只说不做”比如承诺“我会检查这个文件”但实际上并没有调用文件读取工具或者“我会调试这个bug”但并没有调用相关工具查找问题原因。这种“言行不一”的行为会严重影响Agent的可靠性尤其是在coding、文档处理等需要实际操作的场景中。Hermes Agent通过在动态Prompt中注入“工具执行纪律”彻底解决了这个问题。核心思想很简单如果你说要做就必须立刻调用工具做只要工具能提高正确性、完整性或依据性就必须使用工具。对于GPT/Codex类模型Hermes会注入更强的执行纪律明确要求只要工具能提高正确性、完整性或依据性就使用工具。如果进一步调用工具能改善结果不要过早停止。如果工具返回空结果或部分结果先换查询方式或策略重试。算术、哈希、当前时间、系统状态、文件内容、git diff等都必须通过工具确认。缺少上下文时优先用工具查找不要猜测。最终回复前检查结果是否满足要求、是否有依据、格式是否正确、是否存在副作用风险。这些纪律不是在教模型“更聪明”而是在约束模型“更像工程师”工程师在解决问题时会主动查文件、看日志、跑测试而不是凭猜测下结论会反复验证结果而不是敷衍了事。Hermes的工具执行纪律就是让Agent模拟这种严谨的工作态度确保每一个操作都有依据、每一个结论都可靠。关键细节为什么System Prompt需要缓存前面我们提到Hermes的动态Prompt是在会话开始时动态生成的生成后在同一会话内保持稳定不会每一轮都重新生成。很多人会疑惑既然是“动态Prompt”为什么不每一轮都重新组装反而要缓存起来其实这是一个非常重要的工程取舍核心目的是保护Prompt Cache降低成本、减少延迟。如果System Prompt每一轮都变化比如当前时间每轮更新、Memory每轮重新读取、Skills列表顺序变化、项目上下文重新扫描那么模型的前缀缓存就会失效。前缀缓存是大语言模型的重要优化手段它能缓存Prompt的前缀部分当Prompt重复时模型不需要重新处理直接复用缓存结果从而降低计算成本、减少响应延迟。如果Prompt每一轮都变化前缀缓存就失去了意义会导致两个严重问题一是成本上升每一轮都需要重新处理完整的Prompt计算量大幅增加二是延迟增加用户需要等待更长时间才能收到回复。因此Hermes采取了“新会话动态生成同一会话稳定复用”的策略新会话构建一次System Prompt保存到SessionDB中同一会话复用已保存的System Prompt不重新生成继续旧会话优先从SessionDB读取旧的System Prompt特殊情况只有在上下文压缩、配置变更等特殊情况下才重新构建System Prompt临时提示ephemeral_system_prompt只在API调用时临时拼接不写入缓存快照避免影响缓存。这种策略既保证了不同会话的Prompt能够动态适配场景又保证了单个会话内Prompt Cache的稳定实现了“灵活性”和“高效性”的平衡。这也提醒我们在设计Agent的Prompt架构时缓存不是“优化细节”而是架构的一部分必须提前考虑否则会导致成本和延迟失控。架构启示构建长期可用Agent的7个关键原则拆解完Hermes Agent的动态Prompt和Learning Loop架构我们不难发现它的核心竞争力不是模型能力而是一套工程化的上下文管理和经验沉淀系统。这套设计给我们构建长期可用的AI Agent提供了7个非常有价值的启示值得每一个开发者借鉴。1. System Prompt要分层不要堆成一整段Hermes的动态Prompt之所以灵活、可维护核心是采用了分层设计——人格、工具规则、记忆、技能、项目上下文、平台提示、模型约束每一层都是独立的有明确的作用和来源。这种设计比把所有内容堆成一整段Prompt更易维护、易调试、易扩展。比如要修改Agent的人格只需要修改SOUL.md要调整工具规则只需要修改工具相关的提示层不会影响其他部分。2. 动态内容要有清晰来源Hermes的动态Prompt中每一部分内容都有明确的来源SOUL.md来自用户可编辑文件Memory来自持久记忆文件Skills来自技能索引Project Context来自当前项目文件Model/Provider来自运行时配置。这种“来源清晰”的设计不仅让Agent的行为更可解释用户能知道Agent为什么会这样做也让调试变得更简单——如果Agent出现异常行为能快速定位到是哪一层内容出了问题。3. Prompt要和工具系统联动不要在Prompt中要求模型调用不存在的工具这是很多Agent系统的常见错误。Hermes的做法是“工具存在才注入对应规则”让Prompt和工具系统保持一致有效避免模型幻觉。同时Prompt中不仅要告诉模型“可以用什么工具”还要明确“什么时候用、怎么用”给模型制定清晰的工具使用规则。4. 长期记忆要克制做好信息分工长期记忆不是“什么都记”而是要做好信息分工避免记忆污染。Hermes的分工值得借鉴长期偏好进Memory用户画像进User Profile可复用流程进Skill历史细节进session_search临时状态不保存。这样的分工让每一种信息都有合适的存储载体既保证了记忆的高效性又避免了无关信息干扰模型。5. 自我进化要落到外部状态上Hermes的“自我进化”没有依赖模型参数更新而是落到了外部状态的维护上——Memory、User Profile、Skills、Project Context、SessionDB。这种方式比修改模型参数更可控、更可解释、更易调试也更适合自托管Agent场景。对于大多数开发者来说与其追求“模型层面的自我进化”不如先做好外部知识结构的维护让Agent通过复用经验实现“进化”。6. Learning Loop要后台运行解耦体验和学习用户使用Agent的核心需求是“完成任务”而不是“看Agent自我反思”。Hermes将Learning Loop设计为后台异步运行既保证了经验沉淀又不干扰用户的正常使用这种“体验与学习解耦”的设计非常符合真实的产品需求。在设计Agent时一定要避免让学习过程阻塞主任务否则会严重影响用户体验。7. 缓存是Agent架构的一部分不是优化细节当System Prompt包含动态内容时缓存就成了影响成本和延迟的关键因素。Hermes“新会话动态生成同一会话稳定复用”的策略为我们提供了很好的参考——既要保证不同会话的灵活性又要保证单个会话的高效性。在设计Agent架构时一定要提前考虑Prompt的缓存策略否则会导致成本和延迟失控。总结Hermes Agent的核心价值的是什么拆解完Hermes Agent的动态Prompt和Learning Loop架构我们可以清晰地看到它的核心价值不是“更聪明的模型”而是“更合理的上下文管理和经验沉淀系统”。Hermes的System Prompt不是一句简单的角色设定而是一个动态组装的上下文架构它让Agent在不同场景下都能拥有合适的身份和能力它的Learning Loop不是神秘的自我意识而是一个工程化的后台复盘系统它让Agent能从每一次任务中沉淀经验、积累技能它的记忆系统、技能系统、项目上下文系统共同构成了一个“可长期进化、可适配场景、可信赖”的Agent运行环境。对于开发者来说Hermes Agent的设计思路给我们提供了一个重要的启示构建一个长期可用的AI Agent问题不只是“Prompt怎么写”而是“哪些信息应该长期保存、哪些经验应该沉淀成技能、哪些上下文应该自动加载、哪些规则应该动态注入、什么时候该学习、什么时候该缓存”。真正优秀的AI Agent不是“一次性的工具”而是“能跟着用户一起成长的伙伴”。Hermes Agent用一套工程化的设计实现了这一点——它不会改变模型本身但会改变模型每次运行时看到的上下文而对Agent来说上下文就是能力的一部分。

更多文章