1.3 五大核心子系统总览

一个完整的Harness系统可以分解为五个核心子系统和两大基础保障。这个分类方案既符合系统工程的模块化原则,也便于在不同的场景中选择和组合。

下图展示了五大核心子系统与两大基础保障之间的整体关系:

图 1-1:Harness 五大核心子系统与两大基础保障

1.3.1 五大核心子系统

本小节逐一介绍运行时引擎、工具层、记忆子系统、输出治理和编排引擎五大子系统的核心职责和设计要点。

1. 运行时引擎

职责:实现智能体的执行循环,协调各个子系统的交互。

运行时引擎是Harness的心脏。它维护智能体执行的主循环,通常遵循以下模式:

在这个循环中,运行时引擎的核心职责包括:

  • 状态机管理:智能体从初始化、执行、暂停、恢复到完成的各个状态转移

  • 消息编排:构造发给LLM的消息(包括上下文、历史记录、工具信息),以及处理来自LLM的响应

  • 异步执行:在I/O等待期间不阻塞,并发处理多个智能体任务

  • 超时和中断:设置合理的执行超时,支持优雅的任务中断和清理

在生产系统中,运行时引擎的实现策略因场景而异。Claude Code 采用 QueryEngine 异步生成器循环(约 50 万行 TypeScript),支持流式工具执行和智能重试。OpenClaw 则采用基于 WebSocket 的长连接心跳机制,Gateway 控制平面通过 30 分钟心跳自主唤醒智能体执行,支持数千个并发智能体。

2. 工具层

职责:抽象和管理各种外部工具的访问,提供统一的调用接口。

工具层是智能体与真实世界的连接点。它的设计直接影响智能体的能力范围和安全性。

核心职责包括:

  • 工具注册:维护一个工具注册表(Tool Registry),记录每个可用工具的定义、参数、返回值类型、权限要求等

  • 工具发现:根据智能体的需求,推荐合适的工具。这可能涉及语义搜索、工具分类、相似度匹配等

  • 参数验证:在调用工具前,验证智能体提供的参数是否符合工具的签名,防止类型错误或格式不当

  • 权限检查:检查智能体是否有权限调用该工具,如果权限不足,启动审批流程

  • 执行隔离:在沙箱或容器中执行工具,防止工具故障对系统的影响

  • 结果标准化:将不同工具返回的结果统一为标准格式,方便智能体处理

在生产系统中,工具层的规模和管理方式差异显著。Claude Code 提供 24+内置工具的类型安全注册,使用 TypeScript interface 定义工具契约,StreamingToolExecutor 支持流式工具执行和中间结果处理。OpenClaw 的 ClawHub 技能注册中心维护了 13000+ 预构建 skills,支持 20+ 消息平台接入,每个 skill 定义了输入输出 schema、权限、触发条件和集成方式。

3. 记忆子系统

职责:管理智能体的各种记忆,支持上下文理解和学习。

一个没有记忆的智能体,每次执行都要从零开始。记忆子系统让智能体能够学习、改进、个性化响应。

记忆的类型通常按生命周期分为三层:

  • 工作记忆 (Working Memory):当前对话的上下文窗口,包含最近的消息、执行结果和即时状态,容量受 LLM 上下文窗口限制

  • 短期记忆 (Session Memory):跨轮次但会话级别的信息,如会话摘要、用户在当前项目中的偏好、最近的执行结果,生命周期从数小时到数周

  • 长期记忆 (Persistent Memory):跨会话的用户档案、学到的模式、系统策略,生命周期可达数月至数年,通常借助向量索引支持语义检索

核心职责包括:

  • 记忆存储:实现支持快速访问和更新的存储结构(如向量数据库、缓存层)

  • 记忆检索:根据当前上下文,检索相关的历史信息

  • 记忆压缩:当记忆累积过多时,总结和压缩,以节省存储和计算成本

  • 遗忘策略:决定哪些信息应该被保留,哪些应该被清除

在生产系统中,记忆子系统的设计反映了不同的运行模式。Claude Code 的 autoDream 记忆整合引擎使用 LLM 对长上下文进行摘要和压缩,将整合后的记忆持久化存储到 CLAUDE.md 文件中,支持跨多个会话的记忆回顾。OpenClaw 采用 MEMORY.md 系统记录每日关键决策和上下文,结合 SOUL.md 约束的双层记忆体系,Lobster 工作流引擎支持确定性重放,存储完整的操作历史。

4. 模型集成与输出治理

职责:管理与LLM的交互,控制和验证模型的输出。

这个子系统解决一个关键问题:LLM的输出不一定总是可靠的。我们需要在充分利用LLM能力的同时,防止其产生幻觉、矛盾或危险的决策。

核心职责包括:

  • 模型选择:根据任务的复杂度、成本预算、延迟要求,选择合适的模型(可能是GPT、Claude、开源模型等)

  • 提示词管理:维护高质量的系统提示(system prompt)、任务描述、工具信息、示例等

  • 输出解析:从LLM的文本输出中,结构化地提取工具调用、参数、推理步骤等

  • 输出验证:检查输出是否符合预期的格式、是否包含自相矛盾、是否超出安全边界

  • 降级策略:当输出质量不满足要求时,进行重试、提示词调整、或切换到更强大的模型

在生产系统中,输出治理的侧重点各有不同。Claude Code 采用系统提示词缓存架构减少重复计算,SDKMessage 类型确保输出结构一致,40+ 编译时特性门控提供精细的行为控制。OpenClaw 支持多模型策略,通过 SOUL.md 约束来检查输出的安全性,并支持工具调用的语义验证,确保 Agent 提议的操作合理。

5. 编排引擎

职责:支持复杂的多步任务和多智能体协作。

单个智能体往往无法解决复杂的业务问题。编排引擎提供了一套机制,让多个智能体能够协作完成任务。

核心职责包括:

  • 工作流定义:支持定义复杂的任务流程,包括顺序执行、条件分支、并行执行、循环等

  • 依赖管理:跟踪任务之间的依赖关系,确保按照正确的顺序执行

  • 智能体分配:根据任务特点,将子任务分配给合适的智能体专家

  • 结果聚合:收集各个智能体的执行结果,进行验证和合并

  • 故障恢复:当某个智能体失败时,启动恢复策略(如重试、切换智能体、降级等)

在生产系统中,编排引擎的设计体现了确定性与灵活性之间的权衡。Claude Code 的 Coordinator 多智能体编排模块支持动态智能体生成、任务分解和结果合并。OpenClaw 的 Lobster 确定性工作流引擎支持 YAML 定义的流程,可以精确重放和审计每一步。

1.3.2 两大基础保障

除了五大核心子系统,还有两大基础保障贯穿整个Harness系统——它们不是独立的模块,而是渗透在每个子系统中的能力。

6. 安全层

职责:在整个智能体生命周期中,防止安全威胁和风险。

安全层不是一个独立的模块,而是渗透在其他各个子系统中的一组原则和机制:

  • 权限管理:实现梯度化的权限模型(Free/Ask-first/Approve-once)

  • 沙箱隔离:在隔离环境中执行高危操作,限制其对系统的影响范围

  • 输入验证:对所有来自外部的输入进行严格验证,防止注入攻击

  • 输出过滤:在将智能体的决策转化为实际操作前,进行安全检查

  • 审计日志:记录所有安全相关的事件,支持事后审计和合规性验证

7. 可观测性层

职责:提供对Harness系统运行的完整可见性。

一个无法观测的系统,一旦出现问题,就很难诊断和修复。可观测性层提供了三个维度的视图:

  • 日志(Logs):记录详细的事件序列,支持文本搜索和过滤

  • 追踪(Traces):跟踪单个请求或任务的完整执行路径,显示各个组件的耗时

  • 指标(Metrics):收集系统级别的性能指标(如吞吐量、延迟、错误率),支持告警和趋势分析

1.3.3 架构总体图

Harness系统的整体架构可以概括为核心子系统与基础保障的有机结合,如下所示:

图 1-2:Harness 系统的五大核心子系统和两大基础保障

1.3.4 子系统间的交互流程

为了更清晰地理解这些子系统如何协作,让我们跟踪一个典型的Agent执行流程:

1.3.5 Claude Code vs OpenClaw的子系统对比

两个参考系统在子系统实现上有各自的特点:

子系统
Claude Code
OpenClaw

运行时引擎

QueryEngine异步循环 + 流式执行

WebSocket长连接 + 30分钟心跳

工具层

24+内置工具 + 类型安全注册

ClawHub (13000+ skills) + 多平台接入

记忆系统

autoDream摘要 + CLAUDE.md持久化

MEMORY.md + SOUL.md双层

模型集成

系统提示词缓存 + 40+特性门控

多模型策略 + SOUL约束检查

编排引擎

Coordinator动态多Agent

Lobster确定性工作流

安全层

风险分级自动审批机制 + protected files检查

三级权限(Free/Ask/Approve)

可观测性

分层追踪 + 实时指标

Heartbeat监控 + 审计日志

这两个系统分别针对不同的应用场景进行了优化——Claude Code强调任务型和即时性,OpenClaw强调自驱型和持久性。

在后续章节,我们将对每个子系统进行深入的讨论,包括其设计原则、接口定义、实现方案和具体代码示例。

最后更新于