PEV:计划、执行、验证
计划、执行、验证、诊断、派发的闭环:失败时先用确定性信号判断根因,再决定重做、重规划还是诚实降级。
依据 agent-solution 0.1.3 · main@bf702bc9(2026-11-03)核实
不是"失败就重试"
很多智能体出错后的处理是"再来一次"。可如果错因是接口挂了,再来一次还是错;如果是验证器自己坏了,它说的"失败"本身就不可信。
PEV(Plan → Execute → Verify → Diagnose → Dispatch)把"为什么失败"放在"接下来做什么"之前。它建在 agent-core-java 的 BaseAgent 上,你只需实现三个接口:
| 接口 | 输入 → 输出 |
|---|---|
Planner | 用户任务 → 计划(若干节点) |
Executor | 节点 → 每个节点的结果 |
Verifier | 任务 + 结果 → 是否通过、哪些节点失败、反馈 |
节点结果只有三种:Success、DeviceFailure(工具或基础设施故障)、VerifierFailure。
诊断:三种根因
验证不通过时,diagnoseRootCause 按优先级判断:
- 验证器不可信(
PerceptionUnreliable):验证器抛了异常,或返回内容解析失败 - 设备故障(
DeviceFailure):失败节点里有工具或基础设施故障 - 计划或答案错误(
PlanOrAnswerError):以上都不是,那就是内容本身错了
关键在于依据:源码注释明确写着诊断来自确定性信号,而不是模型的自我报告。
派发:根因决定动作
| 根因 | 动作 |
|---|---|
| 设备故障 | AcceptPartial:诚实降级,永不重试 |
| 验证器不可信 | AcceptPartial:不盲信它的"失败" |
| 内容错误,失败节点 ≤ 2 | LocalReplan:带着反馈只重做失败节点 |
| 内容错误,失败节点 > 2 或为空 | GlobalReplan:带着反馈重新规划 |
重规划次数有上限,默认 2 次;用完还不行就终止,终止原因记为超出重试次数。
源码PevConfig.defaultsagent-solution/common/agents/pev/src/main/java/com/openjiuwen/agents/pev/agent/PEVAgent.java:395@bf702bc9Rail 做横切观察
PEVAgent 在各阶段边界触发回调,所以 agent-core 的 Rail 可以挂上来观察:内置的 CriteriaVerificationRail 对最终输出再做一次成功条件检查,RootCauseRail 累计设备故障。注意 Rail 只观察,不驱动派发;派发是内核决策函数的职责。
和"评估"的关系
PEV 把评估搬进了单次执行里:每一轮都有验证,验证结果直接决定下一步。基于运行数据的评测(下一关 agent-ops)回答"这个智能体整体表现如何",PEV 回答"这一次的结果能不能交付"。
动手:预测派发
小结
- PEV 先诊断再行动:验证器不可信 > 设备故障 > 内容错误。
- 设备故障和验证器故障诚实降级,内容错误才重做或重规划。
- 诊断依据是确定性信号,不让模型给自己判卷。
源码出处
- agent-solution/common/agents/pev/README.md开发指南与 5 个场景
- agent-solution/common/agents/pev/src/main/java/com/openjiuwen/agents/pev/kernel/PevKernel.java:73
public static RootCause diagnoseRootCause根因诊断 - agent-solution/common/agents/pev/src/main/java/com/openjiuwen/agents/pev/kernel/PevKernel.java:117
public static ReplanAction toReplanAction根因 → 派发动作 - agent-solution/common/agents/pev/src/main/java/com/openjiuwen/agents/pev/agent/PEVAgent.java:395
public static PevConfig defaults()默认最多重规划 2 次
链接指向固定提交,仓库后续更新不影响这里的行号。
过关测验
1. 执行时产能接口超时,验证不通过。PEV 会怎么做?
2. PEV 的根因诊断依据是什么?
3. 内容错误、失败了 3 个节点,派发什么动作?