第18章 Agent-Harness 协作模式 —— 推理与执行的完美配合

上一篇我们用类比深化理解。本章我们看 Agent 与 Harness 如何协作——推理与执行的完美配合。

Agent-Harness 协作是什么

一句话定义:Agent 推理决策,Harness 执行落地——两者配合完成任务。

Agent-Harness Collaboration = 推理 + 执行 定位:理解 Agent 与 Harness 的协作关系

图表 代码
graph LR
    Agent[Agent
推理决策] -->|tool_use| Harness[Harness
执行落地] Harness -->|结果反馈| Agent Agent -->|调整策略| Harness Agent[思考者] Harness[执行者]
graph LR
    Agent[Agent
推理决策] -->|tool_use| Harness[Harness
执行落地] Harness -->|结果反馈| Agent Agent -->|调整策略| Harness Agent[思考者] Harness[执行者]
graph LR
    Agent[Agent
推理决策] -->|tool_use| Harness[Harness
执行落地] Harness -->|结果反馈| Agent Agent -->|调整策略| Harness Agent[思考者] Harness[执行者]
graph LR
    Agent[Agent<br/>推理决策] -->|tool_use| Harness[Harness<br/>执行落地]
    Harness -->|结果反馈| Agent
    Agent -->|调整策略| Harness
    
    Agent[思考者]
    Harness[执行者]

协作本质:

  • Agent 是思考者:推理、决策、规划
  • Harness 是执行者:调用工具、管理状态、执行操作
  • 双向反馈:结果反馈、策略调整、状态同步

协作模式的核心流程

Agent → Harness → Agent 循环

图表 代码
sequenceDiagram
    participant User as 用户
    participant Agent as Agent
推理层 participant Harness as Harness
执行层 participant Tool as 工具系统 User->>Agent: 发送任务 prompt Agent->>Agent: 推理分析任务 Agent->>Harness: 发送 tool_use 请求 Harness->>Harness: 权限检查 Harness->>Tool: 执行工具 Tool-->>Harness: 返回工具输出 Harness-->>Agent: 返回执行结果 Agent->>Agent: 分析结果,调整策略 Agent->>Harness: 发送下一个 tool_use Harness->>Tool: 执行工具 Tool-->>Harness: 返回输出 Harness-->>Agent: 返回结果 Agent-->>User: 返回最终结果
sequenceDiagram
    participant User as 用户
    participant Agent as Agent
推理层 participant Harness as Harness
执行层 participant Tool as 工具系统 User->>Agent: 发送任务 prompt Agent->>Agent: 推理分析任务 Agent->>Harness: 发送 tool_use 请求 Harness->>Harness: 权限检查 Harness->>Tool: 执行工具 Tool-->>Harness: 返回工具输出 Harness-->>Agent: 返回执行结果 Agent->>Agent: 分析结果,调整策略 Agent->>Harness: 发送下一个 tool_use Harness->>Tool: 执行工具 Tool-->>Harness: 返回输出 Harness-->>Agent: 返回结果 Agent-->>User: 返回最终结果
sequenceDiagram
    participant User as 用户
    participant Agent as Agent
推理层 participant Harness as Harness
执行层 participant Tool as 工具系统 User->>Agent: 发送任务 prompt Agent->>Agent: 推理分析任务 Agent->>Harness: 发送 tool_use 请求 Harness->>Harness: 权限检查 Harness->>Tool: 执行工具 Tool-->>Harness: 返回工具输出 Harness-->>Agent: 返回执行结果 Agent->>Agent: 分析结果,调整策略 Agent->>Harness: 发送下一个 tool_use Harness->>Tool: 执行工具 Tool-->>Harness: 返回输出 Harness-->>Agent: 返回结果 Agent-->>User: 返回最终结果
sequenceDiagram
    participant User as 用户
    participant Agent as Agent<br/>推理层
    participant Harness as Harness<br/>执行层
    participant Tool as 工具系统
    
    User->>Agent: 发送任务 prompt
    
    Agent->>Agent: 推理分析任务
    
    Agent->>Harness: 发送 tool_use 请求
    
    Harness->>Harness: 权限检查
    
    Harness->>Tool: 执行工具
    
    Tool-->>Harness: 返回工具输出
    
    Harness-->>Agent: 返回执行结果
    
    Agent->>Agent: 分析结果,调整策略
    
    Agent->>Harness: 发送下一个 tool_use
    
    Harness->>Tool: 执行工具
    
    Tool-->>Harness: 返回输出
    Harness-->>Agent: 返回结果
    
    Agent-->>User: 返回最终结果

循环步骤详解

步骤Agent 动作Harness 动作说明
1. 接收任务接收用户 prompt注入 System Prompt + CLAUDE.md初始化阶段
2. 推理分析分析任务,规划步骤等待 Agent 决策Agent 推理
3. 发送 tool_use决定调用工具,发送请求接收 tool_useAgent 决策
4. 权限检查等待执行结果检查权限(deny/ask/allow)Harness 管理
5. 执行工具等待工具输出调用工具,执行操作Harness 执行
6. 返回结果接收工具输出返回执行结果Harness 反馈
7. 分析调整分析结果,调整策略等待下一个 tool_useAgent 调整
8. 循环继续继续推理或结束继续执行或结束循环阶段

Agent 的角色:思考者

Agent 的核心职责

图表 代码
graph TB
    subgraph AgentRole["Agent 角色"]
        A1[任务理解
解析用户意图] A2[规划分解
拆解任务步骤] A3[工具选择
决定调用哪个工具] A4[参数设计
设计工具参数] A5[结果分析
分析执行结果] A6[策略调整
调整下一步动作] A7[错误处理
处理执行错误] A8[状态判断
判断任务完成] end A1 --> A2 --> A3 --> A4 --> A5 --> A6 --> A7 --> A8
graph TB
    subgraph AgentRole["Agent 角色"]
        A1[任务理解
解析用户意图] A2[规划分解
拆解任务步骤] A3[工具选择
决定调用哪个工具] A4[参数设计
设计工具参数] A5[结果分析
分析执行结果] A6[策略调整
调整下一步动作] A7[错误处理
处理执行错误] A8[状态判断
判断任务完成] end A1 --> A2 --> A3 --> A4 --> A5 --> A6 --> A7 --> A8
graph TB
    subgraph AgentRole["Agent 角色"]
        A1[任务理解
解析用户意图] A2[规划分解
拆解任务步骤] A3[工具选择
决定调用哪个工具] A4[参数设计
设计工具参数] A5[结果分析
分析执行结果] A6[策略调整
调整下一步动作] A7[错误处理
处理执行错误] A8[状态判断
判断任务完成] end A1 --> A2 --> A3 --> A4 --> A5 --> A6 --> A7 --> A8
graph TB
    subgraph AgentRole["Agent 角色"]
        A1[任务理解<br/>解析用户意图]
        A2[规划分解<br/>拆解任务步骤]
        A3[工具选择<br/>决定调用哪个工具]
        A4[参数设计<br/>设计工具参数]
        A5[结果分析<br/>分析执行结果]
        A6[策略调整<br/>调整下一步动作]
        A7[错误处理<br/>处理执行错误]
        A8[状态判断<br/>判断任务完成]
    end
    
    A1 --> A2 --> A3 --> A4 --> A5 --> A6 --> A7 --> A8

职责详解:

职责说明示例
任务理解解析用户意图,理解任务目标“重构这个模块” → 理解重构目标
规划分解拆解任务为多个步骤重构 → 1.读取代码 2.分析结构 3.修改文件
工具选择决定调用哪个工具需要读取文件 → 选择 Read 工具
参数设计设计工具调用参数Read → 参数:file_path="/src/app.ts"
结果分析分析工具执行结果Read 返回 → 分析代码结构
策略调整调整下一步动作发现需要修改 → 调用 Edit 工具
错误处理处理执行错误Edit 失败 → 重试或换工具
状态判断判断任务是否完成修改完成 → 返回 end_turn

Agent 的决策过程

图表 代码
graph LR
    Observe[observe
接收 messages] --> Think[think
Model 推理] Think --> Decide{决策} Decide -->|需要工具| PlanTool[规划 tool_use] Decide -->|任务完成| EndTurn[end_turn] PlanTool --> SelectTool[选择工具] SelectTool --> DesignParams[设计参数] DesignParams --> SendTool[发送请求] SendTool --> Harness[发送给 Harness]
graph LR
    Observe[observe
接收 messages] --> Think[think
Model 推理] Think --> Decide{决策} Decide -->|需要工具| PlanTool[规划 tool_use] Decide -->|任务完成| EndTurn[end_turn] PlanTool --> SelectTool[选择工具] SelectTool --> DesignParams[设计参数] DesignParams --> SendTool[发送请求] SendTool --> Harness[发送给 Harness]
graph LR
    Observe[observe
接收 messages] --> Think[think
Model 推理] Think --> Decide{决策} Decide -->|需要工具| PlanTool[规划 tool_use] Decide -->|任务完成| EndTurn[end_turn] PlanTool --> SelectTool[选择工具] SelectTool --> DesignParams[设计参数] DesignParams --> SendTool[发送请求] SendTool --> Harness[发送给 Harness]
graph LR
    Observe[observe<br/>接收 messages] --> Think[think<br/>Model 推理]
    Think --> Decide{决策}
    Decide -->|需要工具| PlanTool[规划 tool_use]
    Decide -->|任务完成| EndTurn[end_turn]
    
    PlanTool --> SelectTool[选择工具]
    SelectTool --> DesignParams[设计参数]
    DesignParams --> SendTool[发送请求]
    
    SendTool --> Harness[发送给 Harness]

决策流程:

  1. observe:接收 messages 数组(包含历史 + 工具输出)
  2. think:Model 推理下一步动作
  3. decide:决定调用工具或结束任务
  4. plan tool_use:如果需要工具,规划调用
  5. select tool:选择合适的工具
  6. design params:设计工具参数
  7. send request:发送 tool_use 请求

Agent 的推理能力

Model 推理能力:

能力说明示例
语言理解理解自然语言任务“重构这个模块”
代码理解理解代码结构和逻辑分析 TypeScript 代码
工具理解理解工具 Schema 和功能知道 Read 工具的功能
推理规划推理任务步骤和策略规划重构步骤
错误诊断诊断执行错误原因分析 Edit 失败原因
策略调整根据结果调整策略调整工具选择

Harness 的角色:执行者

Harness 的核心职责

图表 代码
graph TB
    subgraph HarnessRole["Harness 角色"]
        H1[接收请求
接收 tool_use] H2[权限检查
检查操作权限] H3[工具调用
调用具体工具] H4[执行操作
执行实际操作] H5[状态管理
管理 messages/tasks] H6[结果处理
处理工具输出] H7[错误处理
处理执行错误] H8[资源管理
管理上下文/MCP] end H1 --> H2 --> H3 --> H4 --> H5 --> H6 --> H7 --> H8
graph TB
    subgraph HarnessRole["Harness 角色"]
        H1[接收请求
接收 tool_use] H2[权限检查
检查操作权限] H3[工具调用
调用具体工具] H4[执行操作
执行实际操作] H5[状态管理
管理 messages/tasks] H6[结果处理
处理工具输出] H7[错误处理
处理执行错误] H8[资源管理
管理上下文/MCP] end H1 --> H2 --> H3 --> H4 --> H5 --> H6 --> H7 --> H8
graph TB
    subgraph HarnessRole["Harness 角色"]
        H1[接收请求
接收 tool_use] H2[权限检查
检查操作权限] H3[工具调用
调用具体工具] H4[执行操作
执行实际操作] H5[状态管理
管理 messages/tasks] H6[结果处理
处理工具输出] H7[错误处理
处理执行错误] H8[资源管理
管理上下文/MCP] end H1 --> H2 --> H3 --> H4 --> H5 --> H6 --> H7 --> H8
graph TB
    subgraph HarnessRole["Harness 角色"]
        H1[接收请求<br/>接收 tool_use]
        H2[权限检查<br/>检查操作权限]
        H3[工具调用<br/>调用具体工具]
        H4[执行操作<br/>执行实际操作]
        H5[状态管理<br/>管理 messages/tasks]
        H6[结果处理<br/>处理工具输出]
        H7[错误处理<br/>处理执行错误]
        H8[资源管理<br/>管理上下文/MCP]
    end
    
    H1 --> H2 --> H3 --> H4 --> H5 --> H6 --> H7 --> H8

职责详解:

职责说明示例
接收请求接收 Agent 的 tool_use 请求接收 Read 工具调用
权限检查检查操作权限(deny/ask/allow)检查 Read 是否允许
工具调用调用具体工具执行调用 Read 工具读取文件
执行操作执行实际操作(文件读写、命令执行)读取 /src/app.ts 文件
状态管理管理 messages 数组和任务系统追加工具输出到 messages
结果处理处理工具输出,格式化返回返回文件内容
错误处理处理执行错误,返回错误信息返回文件不存在错误
资源管理管理上下文窗口、MCP 连接上下文压缩、MCP 连接管理

Harness 的执行流程

图表 代码
graph LR
    Receive[接收 tool_use] --> PermCheck{权限检查}
    PermCheck -->|deny| Deny[返回错误
禁止执行] PermCheck -->|ask| Ask[请求审批
等待用户] PermCheck -->|allow| Exec[执行工具] Ask -->|批准| Exec Ask -->|拒绝| Deny Exec --> Success{执行成功?} Success -->|成功| Return[返回结果] Success -->|失败| Error[返回错误] Return --> AppendMsg[追加 messages] Error --> AppendMsg
graph LR
    Receive[接收 tool_use] --> PermCheck{权限检查}
    PermCheck -->|deny| Deny[返回错误
禁止执行] PermCheck -->|ask| Ask[请求审批
等待用户] PermCheck -->|allow| Exec[执行工具] Ask -->|批准| Exec Ask -->|拒绝| Deny Exec --> Success{执行成功?} Success -->|成功| Return[返回结果] Success -->|失败| Error[返回错误] Return --> AppendMsg[追加 messages] Error --> AppendMsg
graph LR
    Receive[接收 tool_use] --> PermCheck{权限检查}
    PermCheck -->|deny| Deny[返回错误
禁止执行] PermCheck -->|ask| Ask[请求审批
等待用户] PermCheck -->|allow| Exec[执行工具] Ask -->|批准| Exec Ask -->|拒绝| Deny Exec --> Success{执行成功?} Success -->|成功| Return[返回结果] Success -->|失败| Error[返回错误] Return --> AppendMsg[追加 messages] Error --> AppendMsg
graph LR
    Receive[接收 tool_use] --> PermCheck{权限检查}
    PermCheck -->|deny| Deny[返回错误<br/>禁止执行]
    PermCheck -->|ask| Ask[请求审批<br/>等待用户]
    PermCheck -->|allow| Exec[执行工具]
    
    Ask -->|批准| Exec
    Ask -->|拒绝| Deny
    
    Exec --> Success{执行成功?}
    Success -->|成功| Return[返回结果]
    Success -->|失败| Error[返回错误]
    
    Return --> AppendMsg[追加 messages]
    Error --> AppendMsg

执行流程:

  1. 接收 tool_use:接收 Agent 的工具调用请求
  2. 权限检查:检查 deny/ask/allow 规则
  3. 审批处理:如果是 ask,请求用户审批
  4. 执行工具:调用具体工具执行
  5. 结果处理:返回执行结果或错误
  6. 追加 messages:将结果追加到 messages 数组

Harness 的管理能力

Harness 管理能力:

能力说明示例
工具调度调度工具执行调用 Read、Write、Edit 工具
权限控制控制操作权限deny 删除操作,ask 写入操作
状态维护维护 messages 数组追加工具输出,压缩上下文
资源管理管理上下文窗口四层压缩策略
外部连接连接外部系统MCP 服务器连接
错误恢复处理执行错误工具重试,错误返回

双向反馈机制

结果反馈:Harness → Agent

图表 代码
graph LR
    ToolExec[工具执行] --> ToolResult[工具输出]
    ToolResult --> HarnessProcess[Harness 处理]
    HarnessProcess --> AppendMsg[追加 messages]
    AppendMsg --> AgentReceive[Agent 接收]
    
    AgentReceive --> AgentAnalyze[Agent 分析]
graph LR
    ToolExec[工具执行] --> ToolResult[工具输出]
    ToolResult --> HarnessProcess[Harness 处理]
    HarnessProcess --> AppendMsg[追加 messages]
    AppendMsg --> AgentReceive[Agent 接收]
    
    AgentReceive --> AgentAnalyze[Agent 分析]
graph LR
    ToolExec[工具执行] --> ToolResult[工具输出]
    ToolResult --> HarnessProcess[Harness 处理]
    HarnessProcess --> AppendMsg[追加 messages]
    AppendMsg --> AgentReceive[Agent 接收]
    
    AgentReceive --> AgentAnalyze[Agent 分析]
graph LR
    ToolExec[工具执行] --> ToolResult[工具输出]
    ToolResult --> HarnessProcess[Harness 处理]
    HarnessProcess --> AppendMsg[追加 messages]
    AppendMsg --> AgentReceive[Agent 接收]
    
    AgentReceive --> AgentAnalyze[Agent 分析]

反馈内容:

反馈类型说明示例
成功结果工具执行成功的输出Read 返回文件内容
错误信息工具执行失败的错误文件不存在错误
权限拒绝用户拒绝操作的信息用户拒绝 git push
状态变化Harness 状态变化任务系统更新

策略调整:Agent → Harness

图表 代码
graph LR
    AgentAnalyze[Agent 分析结果] --> StrategyDecide{策略决策}
    StrategyDecide -->|继续工具| NewToolUse[新的 tool_use]
    StrategyDecide -->|调整工具| AdjustTool[调整工具/参数]
    StrategyDecide -->|结束任务| EndTurn[end_turn]
    
    NewToolUse --> HarnessReceive[Harness 接收]
    AdjustTool --> HarnessReceive
graph LR
    AgentAnalyze[Agent 分析结果] --> StrategyDecide{策略决策}
    StrategyDecide -->|继续工具| NewToolUse[新的 tool_use]
    StrategyDecide -->|调整工具| AdjustTool[调整工具/参数]
    StrategyDecide -->|结束任务| EndTurn[end_turn]
    
    NewToolUse --> HarnessReceive[Harness 接收]
    AdjustTool --> HarnessReceive
graph LR
    AgentAnalyze[Agent 分析结果] --> StrategyDecide{策略决策}
    StrategyDecide -->|继续工具| NewToolUse[新的 tool_use]
    StrategyDecide -->|调整工具| AdjustTool[调整工具/参数]
    StrategyDecide -->|结束任务| EndTurn[end_turn]
    
    NewToolUse --> HarnessReceive[Harness 接收]
    AdjustTool --> HarnessReceive
graph LR
    AgentAnalyze[Agent 分析结果] --> StrategyDecide{策略决策}
    StrategyDecide -->|继续工具| NewToolUse[新的 tool_use]
    StrategyDecide -->|调整工具| AdjustTool[调整工具/参数]
    StrategyDecide -->|结束任务| EndTurn[end_turn]
    
    NewToolUse --> HarnessReceive[Harness 接收]
    AdjustTool --> HarnessReceive

调整策略:

策略说明示例
继续工具继续调用下一个工具Read 完成 → 调用 Edit
调整工具调整工具选择或参数Edit 失败 → 重试或换工具
结束任务判断任务完成,结束对话修改完成 → end_turn
错误恢复根据错误调整策略文件不存在 → 创建文件

协作模式的关键特性

1. 分工明确

图表 代码
graph TB
    subgraph Division["分工明确"]
        Agent[Agent
推理决策
思考者] Harness[Harness
执行落地
执行者] end Agent -->|决策| Harness -->|执行| Result Agent[只推理,不执行] Harness[只执行,不推理]
graph TB
    subgraph Division["分工明确"]
        Agent[Agent
推理决策
思考者] Harness[Harness
执行落地
执行者] end Agent -->|决策| Harness -->|执行| Result Agent[只推理,不执行] Harness[只执行,不推理]
graph TB
    subgraph Division["分工明确"]
        Agent[Agent
推理决策
思考者] Harness[Harness
执行落地
执行者] end Agent -->|决策| Harness -->|执行| Result Agent[只推理,不执行] Harness[只执行,不推理]
graph TB
    subgraph Division["分工明确"]
        Agent[Agent<br/>推理决策<br/>思考者]
        Harness[Harness<br/>执行落地<br/>执行者]
    end
    
    Agent -->|决策| Harness -->|执行| Result
    
    Agent[只推理,不执行]
    Harness[只执行,不推理]

分工原则:

原则说明理由
Agent 不执行Agent 只推理,不直接执行Agent 无执行能力
Harness 不推理Harness 只执行,不推理决策Harness 无推理能力
单向依赖Harness 依赖 Agent 的决策Agent 决策驱动 Harness
双向反馈Agent 和 Harness 双向反馈反馈驱动调整

2. 循环驱动

图表 代码
graph LR
    AgentThink[Agent 推理] --> HarnessExec[Harness 执行]
    HarnessExec --> ResultFeedback[结果反馈]
    ResultFeedback --> AgentThink
    
    AgentThink[驱动循环]
    HarnessExec[响应执行]
    ResultFeedback[反馈驱动]
graph LR
    AgentThink[Agent 推理] --> HarnessExec[Harness 执行]
    HarnessExec --> ResultFeedback[结果反馈]
    ResultFeedback --> AgentThink
    
    AgentThink[驱动循环]
    HarnessExec[响应执行]
    ResultFeedback[反馈驱动]
graph LR
    AgentThink[Agent 推理] --> HarnessExec[Harness 执行]
    HarnessExec --> ResultFeedback[结果反馈]
    ResultFeedback --> AgentThink
    
    AgentThink[驱动循环]
    HarnessExec[响应执行]
    ResultFeedback[反馈驱动]
graph LR
    AgentThink[Agent 推理] --> HarnessExec[Harness 执行]
    HarnessExec --> ResultFeedback[结果反馈]
    ResultFeedback --> AgentThink
    
    AgentThink[驱动循环]
    HarnessExec[响应执行]
    ResultFeedback[反馈驱动]

循环特性:

特性说明价值
推理驱动Agent 推理驱动循环Agent 是主动方
执行响应Harness 响应执行Harness 是被动方
反馈闭环结果反馈形成闭环闭环驱动调整
持续迭代循环持续直到完成迭代完成任务

3. 状态同步

图表 代码
graph LR
    AgentState[Agent 状态
messages/tasks] <-->|同步| HarnessState[Harness 状态
messages/tasks] AgentState -->|更新| HarnessState HarnessState -->|反馈| AgentState
graph LR
    AgentState[Agent 状态
messages/tasks] <-->|同步| HarnessState[Harness 状态
messages/tasks] AgentState -->|更新| HarnessState HarnessState -->|反馈| AgentState
graph LR
    AgentState[Agent 状态
messages/tasks] <-->|同步| HarnessState[Harness 状态
messages/tasks] AgentState -->|更新| HarnessState HarnessState -->|反馈| AgentState
graph LR
    AgentState[Agent 状态<br/>messages/tasks] <-->|同步| HarnessState[Harness 状态<br/>messages/tasks]
    
    AgentState -->|更新| HarnessState
    HarnessState -->|反馈| AgentState

同步内容:

状态Agent 管理Harness 管理
messagesAgent 接收 messagesHarness 追加 messages
tasksAgent 使用 tasksHarness 持久化 tasks
权限状态Agent 知道权限结果Harness 检查权限
执行状态Agent 知道执行结果Harness 执行工具

4. 错误恢复

图表 代码
graph LR
    Error[错误发生] --> AgentDiagnose[Agent 诊断]
    AgentDiagnose --> StrategyAdjust[策略调整]
    StrategyAdjust --> HarnessRetry[Harness 重试]
    HarnessRetry --> Success{成功?}
    
    Success -->|成功| Continue[继续循环]
    Success -->|失败| Abort[终止或换策略]
graph LR
    Error[错误发生] --> AgentDiagnose[Agent 诊断]
    AgentDiagnose --> StrategyAdjust[策略调整]
    StrategyAdjust --> HarnessRetry[Harness 重试]
    HarnessRetry --> Success{成功?}
    
    Success -->|成功| Continue[继续循环]
    Success -->|失败| Abort[终止或换策略]
graph LR
    Error[错误发生] --> AgentDiagnose[Agent 诊断]
    AgentDiagnose --> StrategyAdjust[策略调整]
    StrategyAdjust --> HarnessRetry[Harness 重试]
    HarnessRetry --> Success{成功?}
    
    Success -->|成功| Continue[继续循环]
    Success -->|失败| Abort[终止或换策略]
graph LR
    Error[错误发生] --> AgentDiagnose[Agent 诊断]
    AgentDiagnose --> StrategyAdjust[策略调整]
    StrategyAdjust --> HarnessRetry[Harness 重试]
    HarnessRetry --> Success{成功?}
    
    Success -->|成功| Continue[继续循环]
    Success -->|失败| Abort[终止或换策略]

恢复机制:

错误类型Agent 处理Harness 处理
工具执行错误Agent 调整策略Harness 重试执行
权限拒绝Agent 调整策略Harness 返回拒绝信息
上下文溢出Agent 继续(自动压缩)Harness 压缩上下文
Model API 错误Agent 自动重试Harness 等待重试

协作模式的典型场景

场景 1:文件重构

图表 代码
sequenceDiagram
    participant User as 用户
    participant Agent as Agent
    participant Harness as Harness
    
    User->>Agent: 重构 app.ts
    Agent->>Harness: Read app.ts
    Harness-->>Agent: 返回文件内容
    Agent->>Agent: 分析结构
    Agent->>Harness: Edit app.ts
    Harness->>Harness: 权限检查(ask)
    Harness->>User: 请求审批
    User-->>Harness: 批准
    Harness-->>Agent: 返回修改结果
    Agent->>Harness: Read app.ts
    Harness-->>Agent: 返回新内容
    Agent->>Agent: 验证修改
    Agent-->>User: 返回完成
sequenceDiagram
    participant User as 用户
    participant Agent as Agent
    participant Harness as Harness
    
    User->>Agent: 重构 app.ts
    Agent->>Harness: Read app.ts
    Harness-->>Agent: 返回文件内容
    Agent->>Agent: 分析结构
    Agent->>Harness: Edit app.ts
    Harness->>Harness: 权限检查(ask)
    Harness->>User: 请求审批
    User-->>Harness: 批准
    Harness-->>Agent: 返回修改结果
    Agent->>Harness: Read app.ts
    Harness-->>Agent: 返回新内容
    Agent->>Agent: 验证修改
    Agent-->>User: 返回完成
sequenceDiagram
    participant User as 用户
    participant Agent as Agent
    participant Harness as Harness
    
    User->>Agent: 重构 app.ts
    Agent->>Harness: Read app.ts
    Harness-->>Agent: 返回文件内容
    Agent->>Agent: 分析结构
    Agent->>Harness: Edit app.ts
    Harness->>Harness: 权限检查(ask)
    Harness->>User: 请求审批
    User-->>Harness: 批准
    Harness-->>Agent: 返回修改结果
    Agent->>Harness: Read app.ts
    Harness-->>Agent: 返回新内容
    Agent->>Agent: 验证修改
    Agent-->>User: 返回完成
sequenceDiagram
    participant User as 用户
    participant Agent as Agent
    participant Harness as Harness
    
    User->>Agent: 重构 app.ts
    Agent->>Harness: Read app.ts
    Harness-->>Agent: 返回文件内容
    Agent->>Agent: 分析结构
    Agent->>Harness: Edit app.ts
    Harness->>Harness: 权限检查(ask)
    Harness->>User: 请求审批
    User-->>Harness: 批准
    Harness-->>Agent: 返回修改结果
    Agent->>Harness: Read app.ts
    Harness-->>Agent: 返回新内容
    Agent->>Agent: 验证修改
    Agent-->>User: 返回完成

协作步骤:

步骤AgentHarness
1接收任务注入 CLAUDE.md
2决定读取文件执行 Read
3分析文件结构返回内容
4决定修改文件执行 Edit(需审批)
5等待审批请求用户审批
6接收结果返回修改结果
7验证修改执行 Read
8判断完成返回新内容

场景 2:错误恢复

图表 代码
sequenceDiagram
    participant Agent as Agent
    participant Harness as Harness
    
    Agent->>Harness: Edit app.ts
    Harness->>Harness: 执行 Edit
    Harness-->>Agent: 错误:old_string 不唯一
    Agent->>Agent: 分析错误
    Agent->>Harness: Edit app.ts(调整参数)
    Harness->>Harness: 执行 Edit
    Harness-->>Agent: 成功修改
    Agent->>Harness: Read app.ts
    Harness-->>Agent: 返回新内容
    Agent->>Agent: 验证成功
sequenceDiagram
    participant Agent as Agent
    participant Harness as Harness
    
    Agent->>Harness: Edit app.ts
    Harness->>Harness: 执行 Edit
    Harness-->>Agent: 错误:old_string 不唯一
    Agent->>Agent: 分析错误
    Agent->>Harness: Edit app.ts(调整参数)
    Harness->>Harness: 执行 Edit
    Harness-->>Agent: 成功修改
    Agent->>Harness: Read app.ts
    Harness-->>Agent: 返回新内容
    Agent->>Agent: 验证成功
sequenceDiagram
    participant Agent as Agent
    participant Harness as Harness
    
    Agent->>Harness: Edit app.ts
    Harness->>Harness: 执行 Edit
    Harness-->>Agent: 错误:old_string 不唯一
    Agent->>Agent: 分析错误
    Agent->>Harness: Edit app.ts(调整参数)
    Harness->>Harness: 执行 Edit
    Harness-->>Agent: 成功修改
    Agent->>Harness: Read app.ts
    Harness-->>Agent: 返回新内容
    Agent->>Agent: 验证成功
sequenceDiagram
    participant Agent as Agent
    participant Harness as Harness
    
    Agent->>Harness: Edit app.ts
    Harness->>Harness: 执行 Edit
    Harness-->>Agent: 错误:old_string 不唯一
    Agent->>Agent: 分析错误
    Agent->>Harness: Edit app.ts(调整参数)
    Harness->>Harness: 执行 Edit
    Harness-->>Agent: 成功修改
    Agent->>Harness: Read app.ts
    Harness-->>Agent: 返回新内容
    Agent->>Agent: 验证成功

错误恢复步骤:

步骤AgentHarness
1调用 Edit执行 Edit
2接收错误返回错误信息
3分析错误原因等待调整
4调整参数执行新的 Edit
5接收成功结果返回成功
6验证修改执行 Read
7判断成功返回新内容

场景 3:多工具协作

图表 代码
sequenceDiagram
    participant Agent as Agent
    participant Harness as Harness
    
    Agent->>Harness: Glob *.ts
    Harness-->>Agent: 返回文件列表
    Agent->>Harness: Grep "function"
    Harness-->>Agent: 返回搜索结果
    Agent->>Harness: Read app.ts
    Harness-->>Agent: 返回文件内容
    Agent->>Harness: Edit app.ts
    Harness-->>Agent: 返回修改结果
    Agent->>Harness: Bash npm test
    Harness-->>Agent: 返回测试结果
    Agent->>Agent: 判断完成
sequenceDiagram
    participant Agent as Agent
    participant Harness as Harness
    
    Agent->>Harness: Glob *.ts
    Harness-->>Agent: 返回文件列表
    Agent->>Harness: Grep "function"
    Harness-->>Agent: 返回搜索结果
    Agent->>Harness: Read app.ts
    Harness-->>Agent: 返回文件内容
    Agent->>Harness: Edit app.ts
    Harness-->>Agent: 返回修改结果
    Agent->>Harness: Bash npm test
    Harness-->>Agent: 返回测试结果
    Agent->>Agent: 判断完成
sequenceDiagram
    participant Agent as Agent
    participant Harness as Harness
    
    Agent->>Harness: Glob *.ts
    Harness-->>Agent: 返回文件列表
    Agent->>Harness: Grep "function"
    Harness-->>Agent: 返回搜索结果
    Agent->>Harness: Read app.ts
    Harness-->>Agent: 返回文件内容
    Agent->>Harness: Edit app.ts
    Harness-->>Agent: 返回修改结果
    Agent->>Harness: Bash npm test
    Harness-->>Agent: 返回测试结果
    Agent->>Agent: 判断完成
sequenceDiagram
    participant Agent as Agent
    participant Harness as Harness
    
    Agent->>Harness: Glob *.ts
    Harness-->>Agent: 返回文件列表
    Agent->>Harness: Grep "function"
    Harness-->>Agent: 返回搜索结果
    Agent->>Harness: Read app.ts
    Harness-->>Agent: 返回文件内容
    Agent->>Harness: Edit app.ts
    Harness-->>Agent: 返回修改结果
    Agent->>Harness: Bash npm test
    Harness-->>Agent: 返回测试结果
    Agent->>Agent: 判断完成

多工具协作步骤:

步骤AgentHarness
1搜索文件(Glob)执行 Glob
2搜索内容(Grep)执行 Grep
3读取文件(Read)执行 Read
4修改文件(Edit)执行 Edit
5运行测试(Bash)执行 Bash
6判断完成返回结果

协作模式的设计原则

原则总结

图表 代码
graph TB
    subgraph Principles["协作原则"]
        P1[分工明确
Agent推理/Harness执行] P2[循环驱动
推理→执行→反馈] P3[状态同步
messages/tasks同步] P4[错误恢复
自动调整重试] P5[双向反馈
结果反馈策略调整] end
graph TB
    subgraph Principles["协作原则"]
        P1[分工明确
Agent推理/Harness执行] P2[循环驱动
推理→执行→反馈] P3[状态同步
messages/tasks同步] P4[错误恢复
自动调整重试] P5[双向反馈
结果反馈策略调整] end
graph TB
    subgraph Principles["协作原则"]
        P1[分工明确
Agent推理/Harness执行] P2[循环驱动
推理→执行→反馈] P3[状态同步
messages/tasks同步] P4[错误恢复
自动调整重试] P5[双向反馈
结果反馈策略调整] end
graph TB
    subgraph Principles["协作原则"]
        P1[分工明确<br/>Agent推理/Harness执行]
        P2[循环驱动<br/>推理→执行→反馈]
        P3[状态同步<br/>messages/tasks同步]
        P4[错误恢复<br/>自动调整重试]
        P5[双向反馈<br/>结果反馈策略调整]
    end
原则说明实现方式
分工明确Agent 推理,Harness 执行Agent 不执行,Harness 不推理
循环驱动推理驱动执行,反馈驱动调整Agent Loop 持续循环
状态同步messages/tasks 双向同步共享 messages 数组
错误恢复自动调整策略重试Agent 调整,Harness 重试
双向反馈结果反馈,策略调整Harness 返回,Agent 分析

本章小结

  • 协作定义:Agent 推理决策,Harness 执行落地
  • Agent 角色:思考者——任务理解、规划分解、工具选择、参数设计、结果分析、策略调整、错误处理、状态判断
  • Harness 角色:执行者——接收请求、权限检查、工具调用、执行操作、状态管理、结果处理、错误处理、资源管理
  • 双向反馈:结果反馈(Harness→Agent)、策略调整(Agent→Harness)
  • 关键特性:分工明确、循环驱动、状态同步、错误恢复
  • 典型场景:文件重构、错误恢复、多工具协作
  • 设计原则:分工明确、循环驱动、状态同步、错误恢复、双向反馈

预告:下一篇我们进入第六部分——多智能体架构模式。



相关内容

如果这篇文章对你有帮助,欢迎请我喝杯咖啡 ☕
Cygnus Yang 支付宝支付宝
Cygnus Yang 微信微信