1. 核心结论

在 Agent 设计中,PlanAgent loopHarness 是三个不同层级的概念:

  • Plan:描述为了完成目标要做什么、按什么顺序做、依赖是什么、何时算完成。
  • Agent loop:负责不断执行“观察 → 决策 → 行动”,直到完成、失败、重规划或请求人工介入。
  • Harness:承载并约束 Agent 的运行时系统,包括 loop、工具路由、状态、上下文、权限、重试、评估、日志和恢复机制。

一句话概括:

Plan 负责路线,Agent loop 负责推进,Harness 负责让整个过程安全、可持续、可恢复、可观测。

用户目标

Plan:任务分解、顺序、依赖、完成条件

Harness:调度模型、工具、评估器和权限

Agent loop:观察 → 决策 → 行动

环境状态 / 工具结果

完成?

更新计划或继续执行

返回结果

2. Plan 与 Harness 的区别

维度 Harness Plan
关注点 Agent 如何运行 Agent 要做什么
类型 系统 / 运行时 策略 / 数据 / 状态
作用范围 可覆盖整个 Agent 生命周期 通常针对一个具体任务
是否必须显式存在 Harness 必须存在 Plan 可以是隐式的
是否负责执行 负责调用模型和工具 通常不直接执行
是否管理权限 通常不是
是否管理上下文 只提供需要保留的任务状态
是否管理异常 可以包含重试或替代路径,但不负责真正调度

最小 Agent loop 可以表示为:

读取当前状态

调用模型

是否产生工具调用?

Harness 执行工具

把工具结果写回状态

返回结果或判断是否完成

3. 常用 Plan 模式总览

模式 核心机制 适合场景 主要代价或风险
直接调用 / 无显式 Plan 模型直接决定下一步 单次查询、简单工具调用、低风险任务 复杂任务容易遗漏步骤
ReAct 思考 → 行动 → 观察 → 再思考 工具结果会改变后续路径的任务 容易循环,调用次数和成本不可控
Plan-and-Execute 先生成完整计划,再执行 目标明确、步骤较多、流程相对稳定 初始计划错误可能传播到后续步骤
动态重规划 执行中根据结果修改计划 浏览器、代码调试、开放式研究 需要可靠的状态和终止控制
Prompt Chaining 固定的多阶段 LLM 流水线 抽取 → 校验 → 生成、提纲 → 写作 灵活性有限
Routing 先分类,再选择专用流程或模型 客服分流、领域路由、模型路由 分类错误会导致整条路径偏离
Parallelization / DAG 独立子任务并行,最后汇总 多来源搜索、多文件分析、多项检查 必须正确识别任务依赖
Orchestrator-Workers 主 Agent 动态拆分并分派子任务 代码库修改、深度研究、复杂分析 编排器可能成为瓶颈
Evaluator-Optimizer 生成 → 评估 → 修改,循环迭代 代码、报告、文案、结构化输出 评审标准不可靠时容易空转
Tree of Thoughts / 搜索式规划 探索多个候选路径并评估、回溯 博弈、复杂推理、方案比较 推理成本很高
Human-in-the-loop 在关键节点暂停并请求人工确认 付款、删除、生产变更、正式发布 自动化程度降低,但风险显著下降
State Machine / Workflow 用代码定义状态和转移 审批、合规、生产流程、高风险业务 可控性高,但开放性较弱

4. 经典 Plan 模式及 Mermaid 流程

4.1 直接调用 / 无显式 Plan

适合简单、低风险、单步或少量工具调用。这里并不是完全没有规划,而是规划通常隐含在模型当前上下文中,没有单独落盘。

用户请求

模型判断下一步

调用工具

返回结果

适用例子:查询订单状态、获取天气、简单数据库查询。

4.2 ReAct

ReAct 将推理和行动交错执行,适合环境反馈会改变后续路径的问题。

用户目标

Reason:判断下一步

Act:调用工具

Observe:读取工具结果

目标是否完成?

生成最终结果

适用例子:网页操作、API 排错、代码调试、信息检索。

优点:灵活、能根据环境反馈调整。

风险:可能反复调用工具、陷入循环、忘记长期目标。因此 Harness 需要设置最大步数、超时、预算和终止条件。

4.3 Plan-and-Execute

先生成一个显式计划,再由执行器逐步完成。

用户目标

Planner:生成计划

结构化任务列表

Executor:执行当前任务

记录结果和状态

所有任务完成?

汇总结果

适用例子:制定研究方案、生成报告、分阶段修改代码、跨多个上下文窗口的长任务。

注意:完整计划不应该包含过多不确定的实现细节。更合理的是规划目标、交付物、依赖和验收条件,把局部路径留给执行阶段决定。

4.4 动态重规划

这是 Plan-and-Execute 的增强版本:计划不是一次性固定,而是随着状态持续更新。

用户目标

生成初始计划

执行一个或多个步骤

观察结果、错误或新信息

当前计划仍然有效?

重规划

完成?

返回结果

适用例子:浏览器自动化、复杂代码修复、开放式研究、外部系统状态不稳定的任务。

4.5 Prompt Chaining

流程由固定步骤组成,每一步的输出进入下一步。

原始输入

步骤 1:抽取或生成

步骤 2:校验或改写

步骤 3:生成最终结果

程序化检查

适用例子:

  • 文档抽取 → 字段校验 → 数据入库
  • 生成提纲 → 检查提纲 → 生成正文
  • 代码生成 → 单元测试 → 修复代码

如果步骤路径明确,优先用这种模式,而不是让 Agent 自主决定全部流程。

4.6 Routing

先判断任务类别,再选择专用模型、Prompt、工具或 Workflow。

常见问题

技术问题

高风险请求

复杂任务

用户请求

Router:分类

请求类型

小模型 / FAQ 流程

技术 Agent / 技术工具

人工确认流程

强模型 / Planner

统一结果出口

适用例子:客服分流、模型分级、不同业务线使用不同工具。

4.7 Parallelization / DAG

把没有依赖关系的子任务并行执行,再统一汇总。

总任务

拆分任务

子任务 A

子任务 B

子任务 C

汇总器

最终结果

适用例子:多个来源搜索、多个文件分析、不同维度的代码审查。

如果存在依赖关系,应使用 DAG,而不是简单的完全并行:

采集数据

清洗数据

分析数据

生成图表

汇总报告

4.8 Orchestrator-Workers

主 Agent 根据任务动态决定需要哪些 Worker 以及每个 Worker 的工作内容。

用户目标

Orchestrator:拆分任务

Worker A

Worker B

Worker C

Orchestrator:检查和整合

是否有缺口?

最终结果

适用例子:代码库级修改、深度研究、复杂多领域分析。

它和 Parallelization 的区别是:Parallelization 的子任务通常预先定义;Orchestrator-Workers 的子任务由主 Agent 根据输入动态决定。

4.9 Evaluator-Optimizer

生成器先产出结果,评估器根据明确标准检查,并将反馈交给生成器继续修改。

任务目标

Generator:生成初稿

Evaluator:检查结果

是否通过验收?

反馈问题

输出结果

适用例子:代码测试、报告质量控制、格式校验、文案润色。

关键前提是评估标准必须可操作,例如测试是否通过、字段是否齐全、引用是否存在,而不是只有“看起来不错”。

4.10 Tree of Thoughts / 搜索式规划

生成多个候选路径,分别评估,在必要时回溯。

问题

生成候选方案

方案 A

方案 B

方案 C

评估候选路径

是否需要继续搜索?

展开或回溯

选择最佳方案

适用例子:复杂规划、博弈、方案比较、存在明显错误回溯需求的问题。

不建议把它作为普通业务 Agent 的默认模式,因为它会显著增加模型调用次数和推理成本。

4.11 Human-in-the-loop

在高风险动作前设置人工确认点。

生成计划

执行低风险步骤

准备高风险动作

人工审核

是否批准?

执行高风险动作

修改计划或终止

记录审计结果

适用例子:付款、删除数据、生产环境变更、正式发布、法律或医疗相关决策。

4.12 State Machine / Workflow

由程序定义状态和转移,模型只在需要判断或生成内容的节点参与。

高风险或不确定

校验通过

人工批准

人工拒绝

验证通过

验证失败

Received

Validating

NeedsHumanApproval

Executing

Rejected

Verifying

Completed

Replanning

适用例子:审批、合规、生产流程、需要稳定性和可审计性的业务。

5. 如何选择 Plan 模式

可以先回答四个问题:

5.1 任务步骤是否固定?

  • 固定:Prompt Chaining、Workflow、State Machine
  • 不固定:ReAct、Plan-and-Execute、Orchestrator-Workers

5.2 工具结果是否会改变路径?

  • 不会:先规划再执行
  • 会:ReAct 或动态重规划

5.3 子任务是否可以并行?

  • 可以:Parallelization / DAG
  • 不可以:串行计划或 ReAct

5.4 错一步的代价是否很高?

  • 低风险:允许 Agent 自主循环
  • 高风险:State Machine + Validator + Human Approval

6. 场景到架构的推荐映射

场景 推荐架构
简单查询或单次工具调用 直接调用或轻量 ReAct
固定业务流程 Workflow / State Machine
多步骤但目标明确 Plan-and-Execute + Evaluator
浏览器操作、代码调试 ReAct + 动态重规划
多来源研究 Orchestrator-Workers + Parallelization + Evaluator
复杂方案搜索 Tree of Thoughts 或候选方案 + Evaluator
付款、删除、生产变更 State Machine + 人工确认
跨多个上下文窗口的长期任务 显式 Plan + 外部状态 + Harness 恢复机制

7. 模型角色如何分配

不建议把 Planner、Executor、Evaluator 默认绑定到同一个最大模型。可以按能力拆分:

用户请求

Router:小模型或规则

Planner:强推理模型

Executor:快速、工具调用稳定的模型

工具和环境

Evaluator:规则、测试或独立模型

通过?

最终结果

建议:

  • Planner:负责任务拆解、依赖判断和重规划。
  • Executor:负责工具调用、参数填充和局部动作。
  • Router:负责分类和模型选择,可以使用小模型或传统分类器。
  • Evaluator:优先使用确定性规则、测试和独立评审;不要只依赖生成模型自评。
  • Loop Controller:尽量由代码控制步数、权限、超时和终止条件。

一个常见的生产策略是:

复杂规划 → 强模型
简单执行 → 快速模型
高频分类 → 小模型或规则
关键验证 → 测试、规则或独立评审

8. 推荐的落地顺序

  1. 先实现最小 Harness:模型调用、工具执行、状态记录、最大步数和超时。
  2. 先用隐式规划或轻量 ReAct 验证任务是否可行。
  3. 当出现“忘记步骤、无法跨上下文继续、进度不可见”时,引入显式 Plan。
  4. 当出现“计划经常过时”时,引入动态重规划。
  5. 当出现“子任务独立且耗时高”时,引入并行或 DAG。
  6. 当出现“结果质量不稳定”时,引入 Evaluator、测试或规则校验。
  7. 当出现“错误副作用风险高”时,把关键路径收回 Workflow / State Machine,并加入人工确认。

核心原则:

把模型自由度限制在真正需要自由度的地方;把流程、权限、校验、恢复和副作用控制交给 Harness 与程序。

9. 参考资料

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐