Skip to content

Agent Runtime 横向对比:任务执行引擎到底负责什么 ​

这篇文章解决什么问题 ​

很多人理解 Agent Runtime 时有误区:

  • 把 Runtime 当成模型——Runtime 不是 LLM,而是组织 LLM 调用的执行引擎。
  • 把 Runtime 当成 Prompt——Prompt 是输入,Runtime 是执行机制。
  • 把 Runtime 当成简单 while loop——简单 loop 没有权限、Trace、错误恢复和评测。
  • 把 Runtime 和 Workflow 混在一起——Workflow 偏预定义流程,Runtime 偏动态任务执行。
  • 不知道 Runtime 和 Tool / Memory / Trace / Evaluation 的边界——这些是 Runtime 协调的模块,不是 Runtime 本身。

这篇文章要通过横向对比回答:

  • Runtime 在不同 Agent 系统里通常承担什么职责?
  • Runtime 和 Workflow 有什么区别?
  • Runtime 和 Agent Loop 有什么区别?
  • Runtime 应该如何服务个人项目设计?

核心观点:Runtime 的核心职责可以抽象为:接管任务 → 初始化状态 → 调用模型 → 解析动作 → 调用工具 → 更新状态 → 记录执行轨迹 → 判断停止条件 → 生成结果 → 进入评测。 不同系统对 Runtime 的侧重点不同,但 Runtime 都不是模型本身,而是任务执行中心。


对比结论先行 ​

从站内已有拆解内容看,Runtime 在不同系统中的定位可以总结为:

  • 简单 Agent Loop:能跑 Demo,但缺乏工程化能力。
  • Workflow 系统:适合确定性流程,但缺乏动态决策能力。
  • 生产级 Agent Runtime:在 Agent Loop 基础上,增加权限控制、Trace、错误恢复、成本统计、人工审批和 Evaluation。

不同系统对 Runtime 的侧重点不同:Hermes 的 AIAgent 更偏"任务执行循环引擎",OpenClaw 的 Runtime 更偏"系统级任务执行节点",Harness Engineering 的 Runtime 更偏"九层架构中的执行核心"。


对比维度总览 ​

维度简单 Agent LoopWorkflow 系统生产级 Agent Runtime
执行方式while 循环调用模型和工具按预定义节点顺序执行动态任务执行,根据模型输出和状态决定下一步
状态管理无状态或简单 context append状态在流程节点间传递完整的 State 管理,支持暂停、恢复、重试
工具调用直接调用,无校验工具是流程中的固定节点Schema 校验、权限检查、错误处理、Trace 记录
错误处理无或简单重试流程层面定义错误分支错误分类、重试策略、降级方案、人工接管
停止条件无或手动流程结束即停止最大 step 数、最大耗时、成本上限、状态变化检测
Trace无流程执行日志完整执行轨迹:run_id、step_id、model_call、tool_call、state_change
Evaluation无无或简单结果检查任务完成率、工具准确率、成本、安全违规率
安全控制无流程层面的权限控制工具权限、高风险审批、敏感信息脱敏、审计日志
适用场景Demo 验证确定性业务流程需要动态推理和决策的 Agent 任务

Runtime 的最小职责 ​

从站内已有拆解内容看,Runtime 的最小职责可以抽象为:

  • 接收任务:从 API 或 Gateway 接收用户请求。
  • 创建 run_id:为这次任务执行创建唯一标识。
  • 初始化 State:设置初始状态,包括任务目标、已完成步骤、待处理操作。
  • 构建 Context:从 Session、Memory、Workspace 中读取相关信息,组装模型输入。
  • 调用模型:传入 Context,获取模型输出。
  • 解析 Action:把模型输出解析成结构化行动(tool_call、final_answer、invalid)。
  • 调用 Tool:如果 Action 是 tool_call,校验参数、检查权限、执行工具。
  • 更新 State:根据工具结果更新任务状态。
  • 记录 Trace:记录这次调用的完整信息(model_call、tool_call、state_change、latency)。
  • 判断停止:检查停止条件(最大 step 数、最大耗时、成本上限、final_answer)。
  • 返回结果:生成最终结果,记录到 Trace。

这些职责在不同系统中有不同的实现方式,但核心逻辑是一致的。


Runtime 与简单 Agent Loop 的区别 ​

简单 Agent Loop 通常是这样的:

python
while not done:
    output = call_model(context)
    result = call_tool(output)
    context.append(result)

这个循环能跑 Demo,但缺乏工程化能力:

  • 没有清晰 run_id / step_id:无法追踪每次执行。
  • 没有权限控制:任何工具都能调用。
  • 没有错误分类:所有错误都一样处理。
  • 没有成本统计:不知道消耗了多少 token。
  • 没有恢复机制:任务中断后无法继续。
  • 没有 Evaluation:不知道任务完成质量。
  • 很难做生产调试:出问题后无法定位原因。

从站内已有拆解内容看,Hermes 的 AIAgent 在简单 loop 基础上增加了:iteration budget 硬控、错误分类和恢复、messages 和 api_messages 分离、上下文压缩、Tool Registry 自注册、Tool Executor 支持顺序和并发执行。这些都是从"简单 loop"到"生产级 Runtime"的关键工程化能力。


Runtime 与 Workflow 的区别 ​

对比项WorkflowRuntime
是否预定义流程在设计时确定执行逻辑在运行时动态决定
是否动态决策节点逻辑固定根据模型输出和状态动态决策
状态管理状态在流程节点间传递完整的 State 管理,支持暂停、恢复、重试
错误处理流程层面定义错误分支根据错误类型动态决定重试、降级或终止
工具调度工具是流程中的固定节点工具调用由模型动态决定,Runtime 负责校验和执行
适用任务确定性高的业务流程需要动态推理和决策的 Agent 任务
评测方式流程正确性检查任务完成率、工具准确率、成本、安全违规率

从站内已有拆解内容看,Hermes 的 Kanban 编排更接近 Workflow 思想——Orchestrator 分解任务、Worker 按计划执行、关键节点人工审查。但 Hermes 的单个 Worker 内部仍然是 Runtime 驱动的动态执行。

生产系统里二者可以结合:用 Workflow 定义大框架,用 Runtime 处理每个节点内的动态 Agent 逻辑。


Runtime 与 Trace 的关系 ​

Runtime 执行任务,Trace 记录任务。Runtime 每推进一步,都应该记录:

  • run_id:任务执行唯一标识。
  • step_id:当前步骤标识。
  • model_call:模型调用的输入、输出和耗时。
  • tool_call:工具调用的名称、参数、结果和状态。
  • state_change:任务状态的变化。
  • error_event:错误信息和处理方式。
  • latency:执行耗时。
  • token_usage:token 消耗。
  • cost:成本。
  • final_result:最终结果。

从站内已有拆解内容看,Hermes 通过 session DB 持久化 messages 和执行元数据,OpenClaw 通过 Session transcript jsonl 记录执行过程,Harness Engineering 强调"执行结果和评估结果分离"——同一个执行结果可以被多次评估。


Runtime 与 Tool System 的关系 ​

Runtime 不应该直接相信模型生成的工具调用参数。它要负责:

  • 选择工具或接收模型提出的工具调用。
  • 校验参数是否符合 Schema。
  • 检查权限——当前用户是否有权限调用该工具。
  • 调用工具并获取结果。
  • 处理工具失败——重试、换工具、降级、人工接管。
  • 写入工具调用记录到 Trace。

从站内已有拆解内容看,Hermes 的 Tool Executor 支持顺序和并发两种执行模式,执行可以并发但写回消息历史必须有序。OpenClaw 的 Tool Policy 通过 allow/deny 列表控制每个 Agent 的工具权限。Harness Engineering 的 Permission & Governance 层区分只读工具和变更工具,查询类自动允许、变更类需要确认、高风险强制审批。


Runtime 与 Memory / State 的关系 ​

  • State 是当前任务如何推进——记录当前步骤、已完成步骤、待处理操作和关键状态摘要。
  • Memory 是跨任务复用的信息——保存用户偏好、项目背景和历史经验。
  • Context 是当前模型调用看到的信息——从 Session、Memory、Workspace 中构建。

Runtime 负责决定:

  • 读取哪些 Memory。
  • 当前 State 如何更新。
  • 哪些 State 进入下一轮 Context。
  • 哪些信息沉淀为长期记忆。

从站内已有拆解内容看,Hermes 的 Memory Manager 在调用模型前 preflight 发现上下文太大时触发压缩,压缩时先 flush memory,再把中间对话摘要化,保持 tool call/result 成对不拆。OpenClaw 的 Compaction 机制在长对话中保留目标、关键证据、已完成步骤和下一步计划。


Runtime 与 Evaluation 的关系 ​

Evaluation 不是 Runtime 的一部分,但 Runtime 的输出要能被 Evaluation 使用。Evaluation 需要:

  • run_id:关联执行记录。
  • final_result:最终输出。
  • tool_call_record:工具调用记录。
  • trace:完整执行轨迹。
  • latency:执行延迟。
  • cost:token 消耗。
  • error_type:错误类型。
  • human_feedback:人工反馈。

从站内已有拆解内容看,Harness Engineering 强调"执行结果和评估结果分离"——同一个执行结果可以被多次评估,评估标准可以随时间变化而不需要重新执行任务。失败样本沉淀为评测集,用失败样本做回归测试。


Runtime 设计清单 ​

如果你要设计一个生产级 Runtime,可以检查以下清单:

  • [ ] 是否有 run_id——唯一标识一次任务执行。
  • [ ] 是否有 step_id——标识每个执行步骤。
  • [ ] 是否有明确 State——记录任务当前状态。
  • [ ] 是否有停止条件——最大 step 数、最大耗时、成本上限。
  • [ ] 是否有工具权限检查——不能让 Agent 随意调用高风险工具。
  • [ ] 是否有错误分类——区分可重试错误和不可重试错误。
  • [ ] 是否有 Trace——记录完整执行轨迹。
  • [ ] 是否有成本统计——记录 token 消耗和工具调用成本。
  • [ ] 是否能关联 Evaluation——执行结果能被评估系统使用。
  • [ ] 是否支持人工接管——高风险操作需要人工确认。

对个人项目的启发 ​

项目 A(RAG 工单系统):

  • 一次 RAG 查询可以看作一次 run。
  • 文档检索、Rerank、生成、引用可以看作 step。
  • 后续可以把 RAG 链路改造成可追踪 Runtime:每次查询有 run_id,每个阶段有 step_id,检索结果、排序分数、引用来源都记录到 Trace。
  • 当答案质量不好时,可以通过 Trace 定位是哪个环节出了问题。

项目 B(多 Agent 运营中台 Copilot):

  • 多 Agent Copilot 需要更明确的 Runtime。
  • Runtime 应该管理任务分派、Agent step、工具调用、状态共享和最终聚合。
  • 每个 Agent 的执行都应该有 run_id 和 step_id,通过 Trace 记录完整过程。
  • Project B 已有作品集入口,本文只保留 Runtime 迁移方向,不展开具体项目页面。

面试表达 ​

我理解 Runtime 是 Agent 的任务执行引擎,不是模型。Runtime 负责把 LLM、Tool、State、Trace、Evaluation 连接起来:接管任务 → 初始化状态 → 调用模型 → 解析动作 → 调用工具 → 更新状态 → 记录执行轨迹 → 判断停止条件 → 生成结果 → 进入评测。

简单 Agent Loop 能跑 Demo,但生产级 Runtime 还要处理权限控制、错误恢复、停止条件、成本统计、Trace 记录和 Evaluation 关联。从站内已有拆解内容看,Hermes 的 AIAgent 增加了 iteration budget 硬控、错误分类和恢复、上下文压缩;OpenClaw 的 Runtime 嵌入在 Gateway → Routing → Session → Runtime 的完整链路中;Harness Engineering 把 Runtime 拆成九层架构。

如果让我设计 Agent 系统,我会先定义 Runtime 的 run / step / tool_call 数据结构,然后围绕这些数据结构构建 Trace、Evaluation 和安全控制。


常见误区 ​

  • 把 Runtime 当成 LLM——Runtime 是执行引擎,LLM 是推理组件。
  • 只写 while loop——没有权限、Trace、错误恢复和评测的 loop 不是 Runtime。
  • 不记录 run_id——无法追踪任务执行过程。
  • 没有停止条件——Agent 可能陷入无限循环。
  • 工具失败只让模型重新回答——模型不知道工具为什么失败,需要 Runtime 做工程决策。
  • 不做权限控制——Agent 能调用工具后,安全风险成倍增加。
  • 没有 Trace——出问题后无法定位原因。
  • 没有 Evaluation——不知道任务完成质量。
  • 不统计成本——不知道消耗了多少 token 和工具调用成本。

后续 TODO ​

  • 补充 Runtime 状态机图。
  • 补充 Runtime 数据库表设计。
  • 补充 Runtime 与 LangGraph 的关系。
  • 补充多 Agent Runtime 调度示例。