深入浅出 Hermes Agent 架构一个自进化 AI Agent 的设计哲学发布于2025-05-17分类人工智能 · 系统架构 · 深度解析阅读时间约 20 分钟难度等级⭐⭐⭐⭐ 中高写在前面在上一篇部署教程中我们学会了如何让 Hermes Agent 跑起来。今天让我们深入它的内脏理解这个 28.4k Stars 开源项目的架构设计。为什么值得深入研究Hermes Agent 是目前唯一内置学习循环的 AI Agent 系统。它不是简单的 LLM 包装器而是一个能够自我进化的数字生命体。一、架构全景图1.1 核心设计理念┌─────────────────────────────────────────────────────────────────┐ │ Hermes Agent 架构全景 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 用户界面 │───→│ 核心引擎 │───→│ 工具层 │───→│ 执行环境 │ │ │ │ Layer │ │ Core │ │ Tools │ │ Backend │ │ │ └──────────┘ └────┬─────┘ └──────────┘ └──────────┘ │ │ │ │ │ ┌────┴────┐ │ │ │ 记忆系统 │ ← 自进化的核心 │ │ │ Memory │ │ │ └────┬────┘ │ │ │ │ │ ┌─────────┼─────────┐ │ │ ↓ ↓ ↓ │ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │ │ 会话记忆 │ │ 技能记忆 │ │ 用户建模 │ │ │ │Session │ │ Skills │ │ Honcho │ │ │ └────────┘ └────────┘ └────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘1.2 与传统 Agent 的本质区别维度传统 AgentHermes Agent记忆单会话、易丢失跨会话、自组织、FTS5 全文索引技能预定义、固定自创建、自优化、可共享学习无闭环学习、持续进化用户理解通用提示词深度用户建模部署绑定 IDE/本地云原生、Serverless二、核心引擎对话流转的艺术2.1 消息生命周期# 简化的消息处理流程classConversationEngine:asyncdefprocess_turn(self,user_message):# 1. 上下文检索contextawaitself.memory.retrieve_relevant(queryuser_message,session_idself.session_id,user_idself.user_id)# 2. 技能匹配relevant_skillsawaitself.skill_registry.match(intentuser_message,contextcontext)# 3. LLM 推理responseawaitself.llm.generate(messagesbuild_messages(context,user_message),toolsself.tool_registry.get_available(),skillsrelevant_skills)# 4. 工具执行如有ifresponse.has_tool_calls:resultsawaitself.execute_tools(response.tool_calls)# 4.1 递归推理观察-行动循环responseawaitself.llm.generate(messagesadd_observations(results),toolsself.tool_registry.get_available())# 5. 记忆持久化awaitself.memory.store(session_idself.session_id,turn{input:user_message,output:response})# 6. 技能学习触发异步asyncio.create_task(self.learning_loop.analyze_and_learn(session_idself.session_id,trajectoryget_recent_turns(n5)))returnresponse2.2 ReAct 模式的进化传统 ReActReasoning ActingThought → Action → Observation → Thought → Action → ... → AnswerHermes 的增强 ReActThought → Action → Observation → [Skill Check] → Thought → Action → ... ↓ [学习触发器] → 生成/优化 Skill → 存入技能库关键创新在每次行动循环中嵌入学习触发器让 Agent 从执行过程中自动提炼经验。三、记忆系统超越 RAG 的设计3.1 三层记忆架构┌─────────────────────────────────────────────────────────────┐ │ 记忆金字塔 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ Level 3: 用户建模层 (Honcho) │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ • 用户偏好画像 • 对话风格偏好 │ │ │ │ • 长期目标追踪 • 个性化知识 │ │ │ │ • 情感状态历史 • 信任度评估 │ │ │ └─────────────────────────────────────────────────────┘ │ │ ↑ dialectic 对话 │ │ Level 2: 技能记忆层 (Skills) │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ • 程序化记忆 • 可复用工作流 │ │ │ │ • 自创建、自优化 • agentskills.io 标准 │ │ │ └─────────────────────────────────────────────────────┘ │ │ ↑ 经验提炼 │ │ Level 1: 会话记忆层 (Session) │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ • 对话历史 • FTS5 全文索引 │ │ │ │ • 向量检索 • LLM 摘要压缩 │ │ │ │ • 跨会话关联 • 时间衰减算法 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘3.2 会话记忆的实现细节# 基于 SQLite FTS5 的混合检索classSessionMemory:def__init__(self,db_path):self.connsqlite3.connect(db_path)self._init_fts5()def_init_fts5(self):初始化全文搜索表self.conn.execute( CREATE VIRTUAL TABLE IF NOT EXISTS memories USING fts5( session_id, content, timestamp, embedding, -- 可选向量存储 metadata ) )asyncdefretrieve_relevant(self,query,session_id,limit5):混合检索关键词 语义 时间衰减# 1. FTS5 关键词检索keyword_resultsself.conn.execute( SELECT content, timestamp, rank FROM memories WHERE session_id ? AND memories MATCH ? ORDER BY rank LIMIT ? ,(session_id,query,limit)).fetchall()# 2. 向量相似度检索如有 embeddingsemantic_resultsawaitself.vector_search(query_embeddingawaitself.embed(query),session_idsession_id,limitlimit)# 3. 时间衰减加权time_weightedself._apply_time_decay(resultskeyword_resultssemantic_results,decay_factor0.95# 越旧的记忆权重越低)# 4. LLM 重排序rerankedawaitself.llm_rerank(queryquery,candidatestime_weighted,top_klimit)returnreranked3.3 跨会话召回机制问题用户上周让 Agent 记住了一个重要信息本周新会话如何找回Hermes 的解决方案classCrossSessionRecall:asyncdefrecall(self,current_query,user_id):# 1. 生成搜索查询LLM 扩展search_queriesawaitself.llm.generate(promptf基于当前问题 {current_query}生成 3 个可能相关的历史搜索词)# 2. 跨会话全文搜索all_memories[]forqueryinsearch_queries:memoriesself.fts5_search_across_sessions(queryquery,user_iduser_id,limit10)all_memories.extend(memories)# 3. 去重和聚类clusteredself.cluster_by_topic(all_memories)# 4. LLM 摘要生成summaryawaitself.llm.summarize(f基于以下历史记忆生成对当前问题的相关背景\n{clustered})returnsummary四、技能系统程序化的经验4.1 Skill 的本质Skill 是 Hermes 最核心的创新——将经验转化为可执行代码。# Skill 的结构示例# ~/.hermes/skills/web_search_skill.yamlname:web_search_enhancedversion:1.2.3created_at:2025-03-15optimized_at:2025-04-01# 自优化时间戳description:|增强版网页搜索技能针对技术问题优化 会自动访问多个结果并综合答案。triggers:-pattern:搜索.*最新-pattern:查找.*文档-intent:technical_researchparameters:query:type:stringrequired:truedepth:type:enumvalues:[quick,thorough,deep]default:thoroughimplementation:type:pythoncode:|async def execute(query, depth): # 技能的具体实现 results await search_web(query, num_results5 if depth quick else 10) if depth deep: # 访问每个结果页面提取详细内容 detailed await asyncio.gather(*[ extract_content(url) for url in results ]) return synthesize_answer(detailed) return summarize_results(results)# 性能追踪用于自优化metrics:total_calls:156avg_latency_ms:2300success_rate:0.94user_ratings:[5,4,5,5,4,...]4.2 技能创建流程┌─────────────────────────────────────────────────────────────┐ │ 技能创建流水线 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 触发条件 │ │ │ │ │ ▼ │ │ ┌─────────────────┐ │ │ │ 1. 检测复杂任务 │ ← 多步骤、多工具调用、成功完成 │ │ │ Detect │ │ │ └────────┬────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────┐ │ │ │ 2. 轨迹记录 │ ← 记录完整的 Thought-Action-Observation │ │ │ Trajectory │ │ │ └────────┬────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────┐ ┌─────────────────┐ │ │ │ 3. 模式抽象 │────→│ LLM 分析通用模式 │ │ │ │ Abstract │ │ 提取可复用步骤 │ │ │ └────────┬────────┘ └─────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────┐ ┌─────────────────┐ │ │ │ 4. 代码生成 │────→│ 生成 Skill 代码 │ │ │ │ Generate │ │ 触发器 参数 │ │ │ └────────┬────────┘ └─────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────┐ │ │ │ 5. 验证测试 │ ← 在沙箱中执行验证正确性 │ │ │ Validate │ │ │ └────────┬────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────┐ │ │ │ 6. 注册入库 │ ← 存入技能库可被后续调用 │ │ │ Register │ │ │ └─────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘4.3 技能自优化机制classSkillOptimizer:asyncdefoptimize_skill(self,skill_id):skillself.skill_registry.get(skill_id)# 1. 收集性能数据metricsskill.get_metrics()# 2. 识别瓶颈ifmetrics.avg_latency_ms3000:# 延迟过高尝试并行化optimized_codeawaitself.llm.optimize(skill.code,goalreduce_latency,strategyparallelize_io)ifmetrics.success_rate0.9:# 成功率低增强错误处理optimized_codeawaitself.llm.optimize(skill.code,goalimprove_reliability,strategyadd_retries_and_fallbacks)# 3. A/B 测试test_resultsawaitself.ab_test(originalskill.code,optimizedoptimized_code,test_casesself.generate_test_cases(skill))# 4. 如果优化版本更好更新技能iftest_results.improvement0.1:# 10% 提升阈值skill.update_code(optimized_code)skill.version_bump()skill.record_optimization()五、工具层能力的延伸5.1 工具架构# 工具注册与发现机制classToolRegistry:def__init__(self):self.tools:Dict[str,Tool]{}self.toolsets:Dict[str,ToolSet]{}defregister(self,tool:Tool):注册单个工具self.tools[tool.name]tooldefregister_toolset(self,toolset:ToolSet):注册工具集一组相关工具self.toolsets[toolset.name]toolsetfortoolintoolset.tools:self.register(tool)defget_available(self,context:Context)-List[Tool]:根据上下文动态返回可用工具available[]fortoolinself.tools.values():# 检查权限ifnotself.check_permission(tool,context.user):continue# 检查环境依赖ifnottool.check_dependencies():continue# 检查上下文相关性可选的语义过滤ifcontext.intentandtool.relevance_score(context.intent)0.3:continueavailable.append(tool)returnavailable5.2 内置工具分类类别工具示例用途Websearch, fetch, browse信息检索、网页浏览Fileread, write, edit, grep文件操作Codeexecute_code, exec代码执行Systemshell, ssh系统管理Mediaimage_gen, tts, vision多媒体处理Commsend_message, email消息发送Datasql_query, csv_process数据处理5.3 MCP 集成无限扩展# Model Context Protocol 支持classMCPConnector:连接外部 MCP 服务器扩展工具能力def__init__(self,server_config):self.servers{}forconfiginserver_config:self.connect(config)defconnect(self,config):连接到 MCP 服务器serverMCPClient(commandconfig[command],argsconfig[args],envconfig.get(env,{}))# 发现服务器提供的工具toolsserver.list_tools()# 注册到工具库fortoolintools:self.register_mcp_tool(server,tool)self.servers[config[name]]serverdefregister_mcp_tool(self,server,tool_def):将 MCP 工具包装为 Hermes 工具asyncdefwrapper(**kwargs):returnawaitserver.call_tool(tool_def[name],kwargs)toolTool(namefmcp_{server.name}_{tool_def[name]},descriptiontool_def[description],parameterstool_def[parameters],executewrapper)self.registry.register(tool)六、执行环境无处不在的部署6.1 终端后端抽象# 统一的执行环境接口classTerminalBackend(ABC):终端后端抽象基类abstractmethodasyncdefexecute(self,command:str)-ExecutionResult:passabstractmethodasyncdefread_file(self,path:str)-str:passabstractmethodasyncdefwrite_file(self,path:str,content:str):pass# 具体实现classLocalBackend(TerminalBackend):本地执行passclassDockerBackend(TerminalBackend):Docker 容器执行passclassSSHBackend(TerminalBackend):SSH 远程执行passclassDaytonaBackend(TerminalBackend):Daytona ServerlesspassclassModalBackend(TerminalBackend):Modal Serverlesspass6.2 Serverless 休眠唤醒机制classServerlessBackend(TerminalBackend): Serverless 后端的核心休眠时零成本唤醒时快速恢复 asyncdefensure_active(self):确保环境处于活跃状态ifself.statehibernating:# 唤醒环境awaitself.wake_up()# 恢复会话状态awaitself.restore_session()# 启动心跳保持活跃self.start_heartbeat()asyncdefhibernate(self):进入休眠状态# 保存会话状态awaitself.save_session()# 停止心跳self.stop_heartbeat()# 通知平台休眠awaitself.platform.hibernate()self.statehibernating七、消息网关多平台统一接入7.1 网关架构┌─────────────────────────────────────────────────────────────┐ │ 消息网关层 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │Telegram │ │Discord │ │ Slack │ │WhatsApp │ │ │ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │ │ │ │ │ │ │ │ └───────────┴─────┬─────┴───────────┘ │ │ │ │ │ ┌─────┴─────┐ │ │ │ 协议适配器 │ ← 统一消息格式转换 │ │ │ Adapters │ │ │ └─────┬─────┘ │ │ │ │ │ ┌─────┴─────┐ │ │ │ 消息路由器 │ ← 会话管理与路由 │ │ │ Router │ │ │ └─────┬─────┘ │ │ │ │ │ ┌─────┴─────┐ │ │ │ 核心引擎 │ │ │ │ Core │ │ │ └───────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘7.2 跨平台会话连续性classConversationRouter: 确保用户可以在不同平台间无缝切换会话状态保持一致 asyncdefroute_message(self,incoming_msg:Message):# 1. 识别用户跨平台身份关联userawaitself.identify_user(platformincoming_msg.platform,platform_user_idincoming_msg.user_id)# 2. 查找或创建会话sessionawaitself.get_or_create_session(useruser,contextincoming_msg.context)# 3. 检查跨平台状态ifsession.last_platform!incoming_msg.platform:# 用户切换了平台发送上下文摘要context_summaryawaitself.generate_context_summary(session)awaitself.send_notification(platformincoming_msg.platform,messagef继续之前的会话{context_summary})# 4. 处理消息responseawaitself.core.process(sessionsession,messageincoming_msg.content)# 5. 回复到原平台awaitself.reply(platformincoming_msg.platform,chat_idincoming_msg.chat_id,contentresponse)八、安全设计信任但验证8.1 多层安全模型┌─────────────────────────────────────────────────────────────┐ │ 安全架构层 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ Level 1: 命令审批层 │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ • 危险操作需用户确认 • 可配置自动审批白名单 │ │ │ │ • 沙箱执行敏感命令 • 操作日志审计 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ Level 2: 权限控制层 │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ • 工具级权限控制 • 文件访问限制 │ │ │ │ • 网络访问白名单 • 资源使用配额 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ Level 3: 环境隔离层 │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ • Docker 容器隔离 • 非特权用户运行 │ │ │ │ • 只读文件系统可选 • 资源限制CPU/内存 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘8.2 危险操作识别classSafetyChecker:DANGEROUS_PATTERNS[rrm\s-rf\s/,# 删除根目录rdd\sif.*of/dev/sd,# 直接写磁盘r:?\s*/dev/sd,# 覆盖磁盘设备rcurl.*\|\s*sh,# 管道执行远程脚本rwget.*\|\s*bash,# 同上]asyncdefcheck_command(self,command:str)-SafetyResult:# 1. 模式匹配forpatterninself.DANGEROUS_PATTERNS:ifre.search(pattern,command):returnSafetyResult(safeFalse,risk_levelhigh,reasonf匹配危险模式:{pattern},requires_approvalTrue)# 2. LLM 语义分析llm_analysisawaitself.llm.analyze_safety(command)# 3. 综合判断returnself.combine_results(pattern_result,llm_analysis)九、写在最后架构的哲学9.1 设计原则总结学习优先不是执行工具而是从执行中学习记忆即身份Agent 的本质是其积累的记忆用户为中心深度理解用户而非通用响应无处不在灵活部署不绑定特定环境开放生态标准化接口社区共建9.2 为什么这很重要当前大多数 AI Agent 是无状态的——每次对话都是新的开始。Hermes Agent 探索的是有状态的路径——像人类一样从经验中成长。这不仅是技术架构的差异更是AI 范式的转变从LLM Prompt → 响应 到LLM 记忆 技能 用户模型 → 持续进化的伙伴参考资源官方文档https://hermes-agent.nousresearch.com/docs/架构详解https://hermes-agent.nousresearch.com/docs/developer-guide/architectureGitHub 仓库https://github.com/NousResearch/hermes-agentSkill 标准https://agentskills.io评论区互动你对 Hermes Agent 的哪个架构设计最感兴趣你觉得自进化 AI 的未来会怎样欢迎讨论本文基于 Hermes Agent 开源代码和官方文档分析整理如有理解偏差欢迎指正。标签#HermesAgent #AI架构 #Agent设计 #自进化AI #系统架构 #深度解析版权声明本文为博主原创文章遵循 CC 4.0 BY-SA 版权协议转载请附上原文出处链接和本声明。原文链接https://blog.csdn.net/[your_username]/article/details/[article_id]