AI

Harness Delivery:多 Agent 协同交付系统深度解析

从架构设计到协作机制,深入理解 AI 驱动的软件交付基础设施

2025-02-20AI 辅助写的0 次浏览

一、Harness 是什么

Harness Delivery 是一个基于多 Agent 协同的 AI 驱动软件交付系统。它不是简单的 AI 编程助手,而是一套完整的、可扩展的、面向企业级研发场景的智能交付基础设施。

在传统的软件开发流程中,需求分析、技术设计、编码实现、测试验证、项目管理等环节往往依赖人工协调,信息在不同角色之间传递时容易失真或遗漏。Harness 的核心理念是:用一组专业化的 AI Agent 分别承担不同环节的职责,通过共享的记忆总线实现无缝协同,从而让整个交付链路自动化、智能化。

Harness 的本质是一套「数字研发团队」——每个 Agent 扮演一个专业角色,GAIA 充当团队的共享知识库和沟通中枢。

系统由两个层次构成:

  • 子 Agent 层:包含 oracle(知识检索 / 需求分析)、forge(编码实现 / 验证 / 交付)、alfred(项目管理 / 迭代规划)、reveries(Skill 自优化闭环)四个专业化 Agent
  • 基础设施层:由 GAIA 担任组织记忆同步层,作为所有 Agent 共享的记忆总线

二、整体架构:两层五模块

Harness 采用清晰的分层架构,将「业务逻辑」与「记忆管理」彻底解耦。这种设计并非偶然——它是从单体过渡到微服务化过程中提炼出的最佳实践在 AI Agent 系统中的投射。

2.1 为什么选择分层

在早期探索中,Harness 曾尝试将所有能力塞入一个超大的 Agent 中。但很快发现,单一 Agent 承担过多职责会导致以下问题:

  • 上下文窗口爆炸:需求分析 + 编码 + 项目管理的上下文混合在一起,很快耗尽 Token 预算
  • 职责边界模糊:同一个 Agent 既要做技术决策又要写代码,决策质量下降
  • 难以独立迭代:修改编码逻辑可能意外影响需求分析行为

分层架构的核心价值在于关注点分离(Separation of Concerns):子 Agent 专注业务逻辑,GAIA 专注记忆基础设施,各司其职,互不干扰。

2.2 三区数据划分

GAIA 将项目数据按性质划分为三个区域,每个区域使用最合适的存储后端:

区域数据类型存储后端适用场景
文档区稳定的结构化知识:架构文档、API 规格、运维手册iWiki长期沉淀、团队共享
代码区持续演进的代码资产:仓库结构、模块、接口、变更历史Git(工蜂)版本追踪、演进记录
项目管理动态过程数据:需求状态、规格变更、迭代记录、验证结果TAPD项目流转、进度管理

💡 设计原理:不同类型的数据使用最适合的存储系统。文档需要稳定版本控制 → iWiki;代码需要分支和 MR 能力 → Git;项目过程需要状态机和流转 → TAPD。

2.3 外部依赖体系

Harness 通过 MCP(Model Context Protocol)服务桥接外部系统,形成完整的工具链:

MCP 服务类型用途
TAPD MCP (tapd_mcp_http_sys)系统级必需字段字典拉取、需求/任务/评论读写
工蜂 MCP (gongfeng_sys)系统级必需代码仓库检索、分支/MR/Issue 管理
iWiki MCP必需(需配置鉴权)空间目录结构拉取、文档内容获取

三、四大子 Agent 深度解析

每个子 Agent 都是高度专业化的「数字角色」,拥有独立的 Skill 定义文件(SKILL.md)、执行协议和职责边界。下面逐一剖析其设计哲学和工作方式。

3.1 Oracle —— 知识检索与需求分析师

Oracle 是 Harness 的「大脑前额叶」,负责最耗费认知资源的需求理解和分析工作

核心职责

  • 需求发现与分类:接收用户输入的需求描述(TAPD Story URL 或自然语言),识别任务类型([DEV]、[SKILL-OPT]、[RESEARCH] 等),判断子类型(NEW / ENHANCE / FIX)
  • 信息采集:从 iWiki 获取架构文档,从 Git 获取代码上下文,从 TAPD 获取需求详情和相关评论
  • 需求充分性评估:按照标准化维度(目标清晰度、AC 覆盖度、边界定义、依赖可达性、技术可行性等)对需求进行打分
  • SPEC 确认:输出结构化的规格确认列表(SPEC-1、SPEC-2 ...),作为后续开发的权威依据
  • 仓库范围评估:分析涉及哪些代码仓库,评估接口兼容性和拆分建议

工作流程示例

当 Oracle 接收到一个 [SKILL-OPT] 类型的增强需求时,它会依次执行:

任务类型识别 → AC 提取 → 通用维度评估 → 项目特定维度评估 → 仓库范围评估 → 接口兼容性检查 → 输出 SPEC 列表 + 综合判定
## Oracle 输出示例:SPEC 确认

SPEC-1: harness.md 包含系统总览 ASCII 架构图(7 个子模块)
SPEC-2: harness.md 包含核心仓库索引表(7 行 x 6 字段)
SPEC-3: harness.md 包含 Mermaid 模块协同关系图(6 层 subgraph)
SPEC-4: harness.md 包含 7 个模块的详细职责定义
SPEC-5: harness.md 包含仓库定位决策树(含过渡期注意事项)
SPEC-6: harness.md 顶部包含单体过渡期架构状态章节
SPEC-7: SKILL.md workspace_id=70206324 且含过渡架构提示
SPEC-8: 项目地图含维护说明

综合判定: 通过(无 HIGH 风险维度)
回顾: 2 条 P2 改进意见待后续迭代排入

✅ 核心价值:Oracle 的分析结果是整个系统的「真理源头」。Forge 基于 Oracle 的 SPEC 决策进行编码,Alfred 根据 Oracle 的规模估算规划 Sprint,避免了重复劳动和决策偏差。

3.2 Forge —— 编码工程师与交付引擎

Forge 是 Harness 的「双手」,负责将需求转化为可运行的代码,并完成验证和交付全流程。

核心职责

  • 编码实现:基于 Oracle 提供的 SPEC 决策生成高质量代码
  • 三层 Forger 匹配:通过 forge-creator 生成 specific-forger(特定领域编码器),匹配不到时逐级降级到通用 forger
  • 代码验证:自测 + 审查,确保代码符合规范
  • 双写交付:同时向 Git 提交代码、向 TAPD 更新进度
  • 调研执行(forge-researcher 子模块):Phase R 调研协议,覆盖三类信息源,两级审查机制

Forger 三层匹配架构

Forge 内部采用精巧的三层 Forger 架构来应对不同类型的编码任务:

数据流约束

Forge 有一个关键的设计约束:orchestrator 只传递 ForgeTrigger,forge 所有业务数据读写均通过 GAIA,无隐式直传。这意味着 Forge 不依赖任何来自调用方的隐式上下文,所有需要的信息都从 GAIA 记忆总线中显式获取。

⚠️ 这个约束看似增加了复杂度,但它保证了系统的可观测性和可调试性。Forge 的每次操作都可以在 GAIA 中追溯完整的数据来源链路。

3.3 Alfred —— 项目经理与迭代规划师

Alfred 是 Harness 的「项目经理」,负责将宏观目标拆解为可执行的 Sprint 和 Task。

核心职责

  • Sprint 规划:根据 Oracle 的规模评估和 SPEC 列表,制定合理的迭代计划
  • 任务拆解:将大型需求拆分为可独立验收的小任务
  • 进度追踪:监控各 Phase 的完成情况,识别阻塞风险
  • 资源协调:协调 Oracle、Forge 的工作优先级和依赖关系
  • Phase 评论落盘:在每个 Phase 完成时,将里程碑信息写入 Flow Zone 评论

写入权限与最小权限原则

Alfred 对 GAIA 拥有写入权限,但其写入的内容严格限定在迭代规划和项目管理领域。这种设计遵循最小权限原则——防止非相关领域的 Agent 污染记忆数据。

3.4 Reveries —— 自优化学习引擎

Reveries 是 Harness 的「元认知层」,负责让整个系统越用越聪明。

核心职责

  • Skill 自优化:分析各 Agent 的历史表现数据,自动调整 Skill 配置和执行策略
  • 模式学习:从成功和失败的案例中提取模式,更新最佳实践库
  • 反馈闭环:收集用户反馈和系统指标,驱动持续改进

独特的只读定位

与其他三个 Agent 不同,Reveries 对 GAIA 只有读取权限。它从所有历史数据中学习优化模式,但不直接参与业务数据的写入。这个设计是有意为之——避免自优化逻辑意外污染业务数据。

AgentGAIA 权限写入内容读取目的
Oracle读 + 写需求分析决策、SPEC 确认结果获取历史类似需求的决策参考
Forge读 + 写代码变更记录、验证结果获取 Oracle 的 SPEC 决策
Alfred读 + 写迭代计划、Phase 里程碑获取整体进度和风险信息
Reveries仅读从全部历史数据中学习模式

四、GAIA:记忆总线的艺术

如果说四个子 Agent 是 Harness 的四肢和大脑,那么 GAIA 就是它的神经系统和长期记忆。GAIA 的设计是整个系统最精妙的部分之一。

4.1 解决的核心问题

在引入 GAIA 之前,多 Agent 系统面临三大痛点:

  1. Agent 间缺乏共享记忆:Oracle 分析需求做出的决策,Forge 无法直接获取,导致重复分析和潜在的决策偏差
  2. 上下文无法跨会话保持:会话中断后,新会话需从头开始,之前的进度和上下文全部丢失
  3. 知识分散在不同存储后端:项目信息散落在 TAPD、iWiki、Git 等多个系统,缺乏统一的访问入口

4.2 六大核心特性

特性一:统一接口

所有 Agent 通过统一的语义接口访问记忆读写。gaia 对调用方和后端存储均透明——Oracle 写入「评论」和 Forge 读取「上下文」使用的是同一套语义接口,底层如何路由、如何序列化完全封装在 GAIA 内部。

特性二:后端透明

支持多种存储后端(TAPD、iWiki、Git Issue、本地文件)按需切换。存储后端的具体实现细节对 Agent 不可见,适配器模式封装了不同后端的差异。今天用 TAPD,明天切到 Git Issue,Agent 代码无需任何改动。

特性三:双层持久化

这是 GAIA 最具创新性的设计之一:

持久化级别位置粒度触发时机使用场景
Phase 级Flow Zone 评论Phase 边界里程碑Phase 完成时跨会话恢复、权威决策记录
Sub-Phase 级本地 Memory 文件细粒度状态人工介入断点快速恢复中断点、临时状态保存

Phase 级持久化像「正式出版的书籍」,记录经过深思熟虑的结论;Sub-Phase 级持久化像「草稿纸」,保存临时的思考碎片。两者配合使用,兼顾权威性和便利性。

特性四:权威层级

当多个数据源存在冲突时,GAIA 依据严格的权威层级进行裁决:

Flow Zone 评论(Phase 级权威) > 远端索引表(Hot Context 层) > 本地 Memory 文件(便利快照)

特性五:生命周期管理

Memory 文件有明确的创建、更新、归档、清理规则,避免存储无限膨胀:

  • 创建:首次 flush 触发时创建
  • 更新:后续 flush 覆盖文件内容
  • 删除:Task 完成时删除([DEV] Phase 7 发布完成,[SKILL-OPT] Phase 6 MR 创建完成)
  • 过期清理:30 天内保留活跃文件,30-90 天归档,超过 90 天删除

特性六:格式契约

所有数据遵循标准化的格式契约,确保跨后端的一致性。例如索引表统一使用 5 区块 Schema(Checkpoint、Decisions、Open TODOs、Constraints、Identifiers),Memory 文件统一使用 6 段式 Markdown 结构。

✅ GAIA 的四大核心能力:① 记忆读写 — 任意 Agent 通过统一接口访问 ② 后端切换 — 支持 TAPD/iWiki/Git Issue/本地文件四种后端 ③ 跨 Agent 同步 — 打通所有知识孤岛 ④ 双层持久化 — Phase 级评论 + Sub-Phase 级文件

五、核心设计原则

Harness 的架构设计遵循四条核心原则,每一条都在灵活性与约束之间做出了深思熟虑的权衡。

原则定义在 Harness 中的体现权衡考虑
接口稳定性接口变更最小化,向后兼容统一语义接口,后端切换不影响调用方抽象层设计增加了初始复杂度
职责单一性每个模块只负责一件事GAIA 专注记忆同步,不负责业务逻辑(如分类推断)需要明确的模块边界定义和维护文档
可扩展性支持新功能扩展,无需修改核心架构通过协议分层支持新增存储后端和新 Agent协议定义需要较高的抽象能力和前瞻性
数据一致性多源数据必须保持一致通过权威层级和合并规则确保跨源一致性权威层级设计需要合理的数据来源评估

这四条原则并非相互独立,而是相互制约的。追求极致的可扩展性可能会损害接口稳定性,强调数据一致性可能降低灵活性。优秀的架构设计正是在这些张力之间找到平衡点。

六、协议分层:抽象与实现的博弈

GAIA 最具工程深度的设计是其协议分层架构,实现了「业务逻辑与存储实现分离」的目标。

6.1 分层模型

6.2 抽象层协议

定义存储后端无关的通用规则,代表性协议包括:

  • context.md(Context 恢复与写入协议):定义 AUTHORITY(权威层级)、INDEX-SCHEMA(索引表抽象格式)、MERGE(区块合并规则)、RESTORE(恢复协议优先级)
  • context-lifecycle.md(Context 生命周期管理):定义裁剪规则、按需检索策略、Phase 边界快照

6.3 实现层协议

定义具体后端的数据格式、解析规则和更新逻辑:

  • tapd-description-schema.md:TAPD description 字段的 HTML schema、索引表/非索引表的划分规则、解析和回写逻辑
  • memory-protocol.md:本地 6 段式 Markdown 存储规范、Flush 触发条件、生命周期管理

💡 分层的价值:从 TAPD 迁移到 Git Issue,只需新增一个 git-issue-schema.md 实现层协议,复用 context.md 的抽象规则。调用方代码零改动。

6.4 设计模式

协议分层综合运用了两种经典设计模式:

  • 策略模式(Strategy Pattern):抽象层定义统一接口,不同的实现层提供具体的存储策略
  • 适配器模式(Adapter Pattern):实现层封装了不同后端的 API 差异,向上提供一致的语义接口

七、双层持久化与上下文恢复

跨会话上下文恢复是 GAIA 最实用的能力之一,也是用户感知最强的功能。它的实现依赖于精心设计的四步恢复流程

7.1 四步恢复流程详解

7.2 Memory 文件的 6 段式结构

# Memory: 1070206324133267421
> Last flushed: 2026-04-06 14:30:00
> Phase: 3 - Sprint Planning

## Context Snapshot    # 当前状态摘要
当前处于 Phase 3 Sprint Planning 阶段...

## Decisions           # 本 Phase 决策
- SPEC-1~8 全部确认通过
- 仓库范围锁定为单仓 harness-delivery-oracle

## Open TODOs          # 待办事项
- [ ] 用户确认 Sprint 计划
- [ ] 开始 Phase 4 实现

## Constraints         # 活跃约束
- 维持单体过渡期架构
- 所有 TAPD 写入必须使用 HTML 格式

## Pending User Asks   # 待回答问题
- 是否需要增加性能基准测试?

## Identifiers         # 关键 ID
- story_id: 1070206324133267421
- workspace_id: 70206324
- branch: feature/harness-map-enhance

7.3 索引表的 5 区块 Schema

远端索引表是跨会话恢复的 Hot Context,包含五个标准区块:

区块内容用途
CheckpointPhase 编号、状态、更新日期快速定位当前进度
DecisionsSPEC 编号 + 摘要列表了解已确认的关键决策
Open TODOs未完成项列表知道下一步做什么
Constraints活跃约束声明避免违反已知限制
Identifiersstory_id、workspace_id、branch 等关联到具体资源和记录

7.4 Flush 触发条件

Memory 文件的写入(Flush)不是随意的,只在以下关键时刻触发:

  • Sprint 计划等待审批
  • Sprint 边界确认
  • 验证失败需要决策
  • 用户显式暂停或对话结束
  • 上下文接近耗尽(Token 预警)

⚠️ Flush 不是自动的定时保存,而是基于「有意义的断点」触发。这保证了每次写入的都是有价值的状态快照,而非中间过程的噪音。

八、端到端协作流程

理解单个组件之后,让我们看看它们如何在真实场景中协同工作。以一个典型的 [DEV] 类型需求交付为例。

8.1 完整交付流水线

8.2 关键交互细节

Oracle → Forge 的知识传递

这是最常见的跨 Agent 协作场景。Oracle 分析需求后做出 N 个 SPEC 确认决策,Forge 需要根据这些决策进行编码实现。

Oracle 分析需求 → 写入 Phase 评论(11 个 SPEC 决策) → GAIA 更新索引表 → Forge 获取上下文 → 基于 SPEC 决策生成代码

没有 GAIA 时,Forge 需要「重新阅读」需求文档并自己做出技术判断,这不仅浪费时间,还可能导致与 Oracle 的决策不一致。有了 GAIA,Forge 直接消费 Oracle 已经验证过的决策结论。

项目路由机制

GAIA 通过三条路径定位目标项目,按优先级依次尝试:

  1. URL 解析路径(最高优先级):扫描输入中的 TAPD URL,提取 workspace_id 匹配项目
  2. 关键词激活路径:将输入与 project-map.md 中的激活词匹配
  3. 默认项目路径(最低优先级):URL 和关键词均未命中时使用全局默认配置

💡 约束:禁止硬编码项目名称或路径,禁止引入内存或文件缓存,URL 解析结果始终优先于激活词匹配。

九、典型应用场景

9.1 场景一:跨 Agent 知识共享

背景:Oracle 分析一个 [SKILL-OPT] 需求后做出 8 个 SPEC 确认决策,Forge 需要根据这些决策进行编码实现。

执行路径

  1. Oracle 完成需求分析,将 8 个 SPEC 决策写入 GAIA 的 Flow Zone 评论
  2. GAIA 同时更新远端索引表,提取决策摘要用于快速查看
  3. Orchestrator 触发 Forge 执行编码任务
  4. Forge 从 GAIA 获取上下文,直接拿到 Oracle 已确认的 SPEC 列表
  5. Forge 基于 SPEC 决策生成实现代码,无需重复分析需求

价值:消除重复劳动,保证决策一致性,将 Oracle→Forge 的交接时间从分钟级降至秒级。

9.2 场景二:跨会话上下文恢复

背景:Phase 2 Sprint 计划完成后用户暂停工作,三天后恢复会话继续 Phase 3。

恢复过程

  1. 检查本地 Memory 文件 → 发现存在且 3 天内修改过 → 加载热上下文
  2. Memory 文件包含:Phase 2 已完成的 Checkpoint、已确认的 Decisions、待办的 TODOs
  3. 交叉验证:对比 Memory 文件的 current_phase 与远端索引表 → 一致
  4. 输出恢复状态:「Recovered from local Memory file (last flushed: 2026-04-06), Phase: 2 - Sprint Planning, Pending: Sprint 计划需用户确认」

价值:用户无需回忆之前讨论了什么、做到哪里了,系统能够自动恢复到正确的上下文状态。

9.3 场景三:存储后端平滑迁移

背景:某团队决定从 TAPD 迁移到 Git Issue 作为项目管理系统。

迁移步骤

  1. 新增实现层协议:创建 git-issue-schema.md,定义 Git Issue 的数据格式、解析规则、更新逻辑
  2. 保持抽象层协议不变:context.md 的权威层级、合并规则、恢复优先级完全复用
  3. 配置切换:修改 setting.md 的项目管理信息章节,指向 Git Issue 后端
  4. 零代码改动:Oracle、Forge、Alfred 的所有记忆操作接口保持不变

价值:迁移成本极低,团队可以根据实际需求灵活选择项目管理工具,不被任何单一平台绑定。

十、总结与展望

10.1 架构精髓

Harness Delivery 的架构设计可以凝练为几个关键词:分层、协议化、可恢复

  • 分层:子 Agent 层专注业务逻辑,基础设施层专注记忆管理,清晰的两层架构让系统易于理解和演化
  • 协议化:通过抽象层/实现层的协议分层,将「做什么」和「怎么做」彻底解耦,后端切换成本极低
  • 可恢复:双层持久化 + 四步恢复流程 + 权威层级,保证了在任何中断场景下都能快速回到工作状态

10.2 与传统方案对比

维度传统 AI 编程助手Harness Delivery
架构模式单体 Agent多 Agent 协同 + 记忆总线
角色分工一个 Agent 做所有事Oracle 分析 / Forge 编码 / Alfred 管理
上下文传递隐式依赖 promptGAIA 显式记忆总线
跨会话能力每次从头开始四步恢复流程
后端集成硬编码或插件协议分层,可插拔
可观测性黑盒所有操作可在 GAIA 中追溯

10.3 未来方向

Harness 仍在快速演进中,以下几个方向值得关注:

  1. GAIA 拆分:当前 GAIA 以单体形式运行,未来可能根据用户指令拆分为独立服务
  2. 更多 Agent 类型:测试专员(tester)、运维专家(ops)、安全审计员(auditor)等专业角色的加入
  3. 更丰富的后端:Jira、Asana、Linear 等更多项目管理平台的实现层协议
  4. Reveries 增强:从被动学习进化为主动建议,实现真正的自愈和自适应

✅ 核心结论:Harness Delivery 不仅是一个工具,更是一种「AI 驯服方法论」。它证明了通过合理的架构设计——分层、协议化、记忆总线——可以让 AI Agent 系统变得可靠、可维护、可扩展。这套方法论的价值远超工具本身。

在 AI Agent 系统的设计中,最重要的不是让单个 Agent 变得更聪明,而是让多个 Agent 之间的协作变得更顺畅。GAIA 记忆总线正是这一理念的最好诠释。

Last updated on

On this page