Hermes vs OpenClaw:基于源码的 Agent Loop 全面分析

发布时间:2026/9/13 3:09:09

Hermes vs OpenClaw:基于源码的 Agent Loop 全面分析 1. 引言在 AI Agent 框架的演进中Hermes 和 OpenClaw 作为两个备受关注的开源项目各自提出了独特的 Agent Loop 实现方案。本文将从源码层面深入剖析两者的核心架构、循环机制、工具调用策略和状态管理方式帮助开发者理解其设计哲学与工程实践差异。2. 项目概览与设计哲学2.1 Hermes 简介Hermes 是一个轻量级、模块化的 AI Agent 框架其核心设计理念是「可组合的推理循环」。Hermes 的 Agent Loop 围绕「感知-推理-行动」三阶段模型构建强调将 LLM 调用、工具执行和状态管理解耦为独立组件。源码仓库地址https://github.com/NousResearch/Hermes2.2 OpenClaw 简介OpenClaw 是一个面向复杂任务编排的 Agent 框架其设计哲学是「确定性执行路径 动态分支」。OpenClaw 的 Agent Loop 采用「规划-执行-验证」的闭环结构特别强调对工具调用结果的校验和异常恢复机制。源码仓库地址GitHub - openclaw/openclaw: Your own personal AI assistant. Any OS. Any Platform. The lobster way. · GitHub3. Agent Loop 核心架构对比3.1 Hermes 的 Agent Loop 源码分析Hermes 的核心循环位于hermes/agent/loop.py中的AgentLoop类。其主循环逻辑如下class AgentLoop: def __init__(self, llm, tool_registry, memory, max_steps10): self.llm llm self.tool_registry tool_registry self.memory memory self.max_steps max_steps self.state AgentState() async def run(self, task: str) -gt; AgentResult: self.state.reset() self.memory.add(user, task) for step in range(self.max_steps): # 阶段1感知 - 构建上下文 context self._build_context() # 阶段2推理 - LLM 生成下一步行动 action await self._reason(context) 阶段3行动 - 执行工具或返回结果 if action.type final: return AgentResult( outputaction.content, stepsstep 1, token_usageself.state.token_usage ) tool_result await self._execute_tool(action) self.memory.add(assistant, action.content) self.memory.add(tool, tool_result) return AgentResult(outputMax steps reached, stepsself.max_steps)lt;/codegt;lt;/pregt; 关键设计点 线性步进循环每一步都严格遵循感知→推理→行动的顺序没有提前终止或跳步机制。 内存驱动所有交互历史都存储在 memory 中每次循环都重新构建完整上下文。 工具注册表通过 tool_registry 统一管理工具支持动态注册和参数校验。 3.2 OpenClaw 的 Agent Loop 源码分析 OpenClaw 的核心循环位于 openclaw/engine/executor.py 中的 PlanExecutor 类。其实现更为复杂 class PlanExecutor: def init(self, planner, executor, verifier, max_retries3): self.planner planner self.executor executor self.verifier verifier self.max_retries max_retries self.execution_graph ExecutionGraph() async def execute(self, goal: str) -gt; ExecutionResult: 阶段1规划 - 生成执行计划 plan await self.planner.create_plan(goal) self.execution_graph.build_from_plan(plan) 阶段2执行 - 按图遍历 while not self.execution_graph.is_complete(): node self.execution_graph.next_ready_node() if node is None: break for attempt in range(self.max_retries): result await self.executor.execute_node(node) # 阶段3验证 - 校验执行结果 verification await self.verifier.verify( node, result ) if verification.is_valid: self.execution_graph.mark_completed(node, result) break else: if attempt amp;amp;amp;lt; self.max_retries - 1: node await self._revise_node( node, verification.feedback ) else: self.execution_graph.mark_failed(node, result) return ExecutionResult( graphself.execution_graph, successself.execution_graph.all_succeeded() )lt;/codegt;lt;/pregt; 关键设计点 图结构执行任务被建模为有向无环图DAG节点间存在依赖关系支持并行执行。 规划-执行-验证三阶段每个节点执行后都经过验证失败时可重试或修正。 重试与恢复机制内置 max_retries 和节点修正逻辑增强了鲁棒性。 4. 工具调用机制深度对比 4.1 Hermes 的工具调用 Hermes 的工具调用通过 ToolRegistry 实现源码位于 hermes/tools/registry.py class ToolRegistry: def init(self): self._tools: dict[str, Tool] {} def register(self, tool: Tool): schema self._generate_schema(tool) self._tools[tool.name] tool return schema # 返回给 LLM 的 JSON Schema async def execute(self, name: str, args: dict) -gt; Any: tool self._tools.get(name) if not tool: raise ToolNotFoundError(name) validated_args tool.validate(args) # Pydantic 校验 return await tool.fn(**validated_args)/code/pre Hermes 将工具 Schema 直接注入 LLM 的 system prompt 中LLM 以 JSON 格式返回工具调用指令。这种方式的优点是简单直接缺点是当工具数量增多时 prompt 会变得臃肿。 4.2 OpenClaw 的工具调用 OpenClaw 的工具系统更为分层源码位于 openclaw/tools/manager.py class ToolManager: def init(self): self.categories: dict[str, list[Tool]] {} self.execution_context ExecutionContext() async def resolve_tool(self, intent: str) -gt; Tool: 语义匹配根据意图描述匹配最合适的工具 embeddings await self._embed_intent(intent) candidates self._semantic_search(embeddings, top_k3) return self._select_best(candidates, intent) async def execute_with_context(self, tool: Tool, args: dict): 上下文注入自动传递当前执行上下文 enriched_args { **args, session_id: self.execution_context.session_id, previous_output: self.execution_context.last_output } return await tool.execute(enriched_args)/code/pre OpenClaw 引入了语义工具匹配和上下文自动注入机制使得 LLM 不需要记住所有工具名称只需描述意图即可。同时执行上下文会自动传递给工具减少了参数传递的复杂度。 5. 状态管理与记忆机制 5.1 Hermes 的状态管理 Hermes 使用 AgentState 和 Memory 两个独立组件 dataclass class AgentState: step: int 0 token_usage: int 0 last_action: str | None None last_result: Any None class Memory: def init(self, max_tokens: int 4096): self.messages: list[dict] [] self.max_tokens max_tokens def add(self, role: str, content: str): self.messages.append({role: role, content: content}) self._trim_if_needed() # 超出 token 限制时裁剪早期消息 def get_context(self) -gt; list[dict]: return self.messages[-self._context_window:]/code/pre Hermes 的状态管理相对简单AgentState 记录当前步数和 token 消耗Memory 维护消息历史并支持自动裁剪。这种设计适合短对话场景但在长任务中可能丢失早期上下文。 5.2 OpenClaw 的状态管理 OpenClaw 的状态管理更为复杂使用 ExecutionGraph 和 ContextStore class ExecutionGraph: def init(self): self.nodes: dict[str, ExecutionNode] {} self.edges: list[tuple[str, str]] [] self.global_state: dict {} def build_from_plan(self, plan: Plan): for step in plan.steps: node ExecutionNode( idstep.id, actionstep.action, dependenciesstep.depends_on, retry_count0 ) self.nodes[step.id] node for dep in step.depends_on: self.edges.append((dep, step.id)) def next_ready_node(self) -gt; ExecutionNode | None: 拓扑排序找出所有依赖已完成的节点 for node in self.nodes.values(): if node.status NodeStatus.PENDING: deps_done all( self.nodes[dep].status NodeStatus.COMPLETED for dep in node.dependencies ) if deps_done: return node return None/code/pre OpenClaw 的 ContextStore 还支持跨节点的数据共享 class ContextStore: def init(self): self._store: dict[str, Any] {} self._locks: dict[str, asyncio.Lock] {} async def set(self, key: str, value: Any, ttl: int 300): async with self._locks.setdefault(key, asyncio.Lock()): self._store[key] { value: value, expires_at: time.time() ttl } async def get(self, key: str) -gt; Any | None: entry self._store.get(key) if entry and entry[expires_at] gt; time.time(): return entry[value] return None/code/pre OpenClaw 的状态管理支持 DAG 依赖追踪、并发安全的数据共享和 TTL 过期机制适合复杂、长时间运行的任务。 6. 错误处理与异常恢复 6.1 Hermes 的错误处理 Hermes 的错误处理相对简单主要在工具执行层面 async def _execute_tool(self, action: Action) - ToolResult: try: result await self.tool_registry.execute( action.tool_name, action.args ) return ToolResult(successTrue, dataresult) except ToolNotFoundError: return ToolResult( successFalse, errorfTool {action.tool_name} not found ) except ValidationError as e: return ToolResult( successFalse, errorfInvalid arguments: {e} ) except Exception as e: return ToolResult( successFalse, errorfExecution failed: {str(e)} ) Hermes 将错误信息返回给 LLM由 LLM 决定下一步行动。这种「交给 LLM 处理」的方式灵活但不可控LLM 可能陷入重复尝试的循环。 6.2 OpenClaw 的错误处理 OpenClaw 实现了更完善的错误恢复策略 class ErrorRecoveryStrategy: RETRY retry FALLBACK fallback SKIP skip ABORT abort class RecoveryManager: def init(self): self.strategies: dict[str, ErrorRecoveryStrategy] { timeout: ErrorRecoveryStrategy.RETRY, rate_limit: ErrorRecoveryStrategy.RETRY, auth_error: ErrorRecoveryStrategy.FALLBACK, not_found: ErrorRecoveryStrategy.SKIP, internal_error: ErrorRecoveryStrategy.ABORT } async def handle_error( self, node: ExecutionNode, error: Exception ) -gt; RecoveryAction: error_type self._classify_error(error) strategy self.strategies.get( error_type, ErrorRecoveryStrategy.RETRY ) if strategy ErrorRecoveryStrategy.RETRY: if node.retry_count amp;lt; self.max_retries: return RecoveryAction( actionretry, delay2 ** node.retry_count # 指数退避 ) return RecoveryAction(actionfallback) elif strategy ErrorRecoveryStrategy.FALLBACK: fallback_tool await self._find_fallback(node.action) return RecoveryAction( actionfallback, fallback_toolfallback_tool ) elif strategy ErrorRecoveryStrategy.SKIP: return RecoveryAction(actionskip) return RecoveryAction(actionabort)lt;/codegt;lt;/pregt; OpenClaw 的错误处理更加工程化按错误类型分类、支持指数退避重试、提供回退工具机制并且可以跳过非关键节点继续执行。 7. 性能与可扩展性对比 维度 Hermes OpenClaw 循环模型 线性步进 DAG 图执行 并行能力 无原生并行 支持节点级并行 上下文窗口 滑动窗口裁剪 结构化上下文存储 工具匹配 名称精确匹配 语义匹配 意图解析 错误恢复 LLM 自主决策 策略驱动恢复 状态持久化 内存存储 支持 TTL 和持久化 扩展性 插件式工具注册 分层架构 中间件 学习曲线 低API 简洁 中高概念较多 8. 适用场景与选型建议 8.1 选择 Hermes 的场景 快速原型开发需要快速搭建 Agent 验证想法时Hermes 的简洁 API 可以大幅降低开发成本。 简单问答 Agent任务流程固定、工具数量少5 个以内的场景。 教育学习作为学习 Agent 框架原理的入门项目代码量小、逻辑清晰。 资源受限环境对内存和计算资源要求较低适合边缘设备或轻量部署。 8.2 选择 OpenClaw 的场景 复杂工作流编排任务包含多个依赖步骤、需要并行执行或条件分支的场景。 高可靠性要求金融、医疗等对错误容忍度低的领域需要完善的错误恢复机制。 大规模工具生态工具数量超过 20 个时OpenClaw 的语义匹配优势明显。 长时间运行任务需要状态持久化、断点续传或任务审计的场景。 9. 总结 Hermes 和 OpenClaw 代表了 Agent Loop 设计的两种不同哲学Hermes 追求简洁和灵活性将决策权交给 LLMOpenClaw 追求确定性和鲁棒性通过工程手段弥补 LLM 的不确定性。从源码层面看Hermes 的代码更易读、适合快速上手而 OpenClaw 的架构更健壮、适合生产环境。 在实际选型时建议根据任务的复杂度、可靠性要求和团队的技术栈偏好来决定。对于大多数中小规模应用Hermes 的轻量方案已经足够而对于企业级、多步骤、高可靠性的 Agent 系统OpenClaw 的工程化设计更具优势。
延伸阅读

更多相关文章

2026/9/13 3:03:17

光学缺陷仿真计算与深度识别技术解析

1. 项目背景与核心价值 在光学检测和精密测量领域,缺陷识别一直是个既基础又关键的课题。传统的光学检测方法往往受限于硬件分辨率和环境干扰,难以实现微米级缺陷的精准识别。而"缺陷仿真计算识别"技术通过计算光学的手段,在算法层…

2026/9/13 16:47:01

Dev C++ 5分钟极速安装与配置指南:C/C++初学者入门首选

1. 项目概述:为什么Dev C依然是C/C初学者的首选如果你刚接触编程,尤其是C或C语言,面对Visual Studio、CLion这些功能强大但略显复杂的IDE(集成开发环境),可能会感到无从下手。这时候,一个轻量、…

2026/9/13 16:47:53

基于STK11的卫星任务调度强化学习数据生成与训练实践

简介:基于STK11场景的卫星任务调度与强化学习训练数据生成系统,面向卫星任务规划与机器学习交叉领域的研究者或工程师,提供从随机观测任务生成、卫星可访问时段计算、数据对齐与批次排序,到数据增强、模型训练及奖励可视化的完整链…

2026/9/13 16:47:53

Skypod货到人机器人技术拆解:从机械设计到调度部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/13 0:01:16

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/13 11:18:28

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码