Agent设计规范

举报
绘图师 发表于 2026/06/23 13:54:43 2026/06/23
【摘要】 一、概述:三件事 × 三次交互 1.1 为什么是这三件事处理一个复杂任务,系统必须完成三件性质截然不同的事——理解拆解、分配执行、监控验证——缺一不可,且顺序无法颠倒。这不是方法论的选择,而是信息论上的必然:理解拆解发生在信息不完整阶段,目标是将模糊的用户意图转化为有向无环图(DAG);如果跳过这一步直接执行,子任务边界不清,后续任何修复代价都会放大。分配执行是调度问题,核心是用最少的 a...

一、概述:三件事 × 三次交互

1.1 为什么是这三件事

处理一个复杂任务,系统必须完成三件性质截然不同的事——理解拆解、分配执行、监控验证——缺一不可,且顺序无法颠倒。

这不是方法论的选择,而是信息论上的必然:

  • 理解拆解发生在信息不完整阶段,目标是将模糊的用户意图转化为有向无环图(DAG);如果跳过这一步直接执行,子任务边界不清,后续任何修复代价都会放大。
  • 分配执行是调度问题,核心是用最少的 agent 数量覆盖所有能力需求,同时最大化并行度;这个阶段的质量取决于拆解的精度。
  • 监控验证必须贯穿执行过程,而非等到最终输出才介入;一个错误在链路末端发现,修复成本是在源头发现的 n 倍。
阶段 职责 时机 核心产物
理解与拆解 解析用户意图 → 拆解为子任务 DAG → 识别依赖关系 → 输出 agent 需求清单 事前 任务 DAG + agent 需求清单
分配与执行 匹配垂类 agent → 装填蒙版 → 并行调度 → 异常捕获 事中 执行状态流 + 中间输出
监控与验证 进度心跳 → 验证门判定 → 阻碍识别 → 置信度审查 → 回溯修复 事中 验证报告 + 合格输出

1.2 三次交互的边界

用户不关心系统内部的调度细节,但他们需要在两个关键时刻介入:一是确认系统理解了自己的意图(交互1),二是确认 agent 的分工是否合理(交互2)。其余时间,用户等待最终交付。

交互1:用户输入问题 → 系统输出工作流 + agent 清单
交互2:用户审核方案 → 调整/确认 agent 边界与编排逻辑
交互3:系统装填蒙版 → 执行 → 交付工作成果

交互2 的设计意图: 交互2 是用户修改系统理解的最后窗口。一旦确认,执行阶段的方向修正成本极高。这一次交互展示的是 agent 清单(每个 agent 的职责边界、蒙版摘要、输入/输出规格),而非代码或底层实现细节。用户需要能看懂并能给出有效反馈。

交互3 内部的回溯闭环: 执行中发现的阻碍,优先在交互3 内部通过重规划解决,而非直接退回交互2。判断是否需要退回的唯一条件:问题根因是 D类(拆解错误)且回溯深度已达硬上限,此时原有 DAG 不可修复,必须由用户重新确认任务边界。

二、理解与拆解:DAG 构建

2.1 意图解析

用户输入通常是自然语言,存在歧义、隐含前提和遗漏条件。意图解析阶段的目标是将其转化为无歧义的任务描述

意图解析的输出包括:

  • 核心目标:用户最终想要什么(一句话描述)
  • 约束条件:格式、时限、质量标准、禁止事项
  • 隐含前提:用户以为显而易见但未明确说出的假设
  • 歧义点列表:系统无法单方面消解的歧义,在交互1 中显式呈现

2.2 子任务 DAG

DAG(有向无环图)是任务拆解的标准形式。每个节点是一个子任务,边表示依赖关系(上游输出是下游输入)。

DAG 构建规则:

  1. 最小粒度原则:每个节点只做一件事,输入输出类型明确
  2. 依赖显式化:所有依赖必须写入边,禁止隐式依赖
  3. 可并行识别:没有依赖关系的节点可以并行
  4. 边界节点声明:第一个节点和最后一个节点必须显式标注

常见拆解错误(D类阻碍的前身):

错误类型 描述 示例
隐式依赖 子任务之间有实际依赖但 DAG 中未连边 摘要任务依赖全文但 DAG 中与全文节点无边
过度拆分 粒度过细,子任务之间需要大量上下文传递 每个段落独立为一个节点,导致前后文断裂
粒度不均 部分节点承载了多个独立子任务 "调研+写作"作为单一节点
环形依赖 依赖关系成环,无法排拓扑序 A 需要 B 的输出,B 需要 A 的输出

三、蒙版激活梯度

3.1 核心思想:为什么不是开关

直觉上,给 agent 设置能力范围的最简单方式是"开关":允许使用的知识域写进白名单,其余拒绝。这个思路在软件系统中是合理的,但在 LLM agent 里行不通。

根本原因:LLM 的知识是连续分布的,不是模块化的。

一个在训练时见过大量数学文献的模型,无法在推理时"不想数学"——它的数学知识以分布式权重的形式存在于整个网络,没有一个可以断开的开关。强行用 prompt 说"你不懂数学",模型可能会声称不懂,但在生成内容时仍会受到数学知识的影响。

因此,蒙版的设计目标不是禁止,而是:

  1. 控制激活梯度:调节各知识域在生成中的权重
  2. 强制声明泄漏:当非主激活域知识被调用时,必须留下记录

这两点合在一起,才能实现可追溯、可审计的知识边界管理。

3.2 形式化定义

设总知识空间 K = {k₁, k₂, ..., kₙ},对每个 agent Aⱼ 和每个知识域 kᵢ,定义蒙版激活值:

m(A, kᵢ)[-1, 1]

  m =  1       → 主激活域(核心能力区,自由调用)
  m =  0       → 静默域(不主动激活,泄漏风险存在)
  m = -1       → 抑制域(显式反激活,注入抑制 prompt)
  m  (0, 1)  → 背景域(半激活,可被动触发但需声明)
  m  (-1, 0) → 弱抑制域(不鼓励,不绝对禁止)

三个激活域按阈值划分:

主激活域  M_main   = { kᵢ | m(A, kᵢ) > θ_main }
背景域    M_bg     = { kᵢ | θ_bg < m(A, kᵢ) ≤ θ_main }
静默域    M_silent = { kᵢ | m(A, kᵢ) ≤ θ_bg }

默认阈值:θ_main = 0.7, θ_bg = 0.3

3.3 泄漏声明规则

当 agent Aⱼ 在推理中使用了 kᵢkᵢ ∉ M_main(Aⱼ),必须按以下规则处理:

规则1:kᵢ ∈ M_bg → 允许使用,但必须在输出中标记:
  [蒙版泄漏 | agent=A|=kᵢ | 强度=m(A,kᵢ)]

规则2:kᵢ ∈ M_silent → 先判断:
  a. 该知识对当前任务必要 → 不能抑制,回溯到分配层调整蒙版
  b. 该知识是模型自发激活 → 抑制 prompt 触发,阻断本轮推理

3.4 双路径生成

路径1(主路径):M_main 内封闭生成
路径2(泄漏路径):M_main + M_bg 开放生成,标记所有泄漏

输出优先取路径1。当路径1无法完成时,启动路径2并附带泄漏报告。

四、置信度判断机制(物质还原验证)

4.1 定位:生成层与验证层的分工

蒙版梯度管生成层——控制 agent 在生成内容时的知识域激活范围。

置信度判断管验证层——在内容生成完毕后,审查输出的事实可靠性。

两个机制各司其职,但相互触发:蒙版泄漏会提高验证层的审查强度,验证层发现的问题可能反过来要求调整蒙版。

4.2 为什么不用交叉一致性

传统多 agent 验证的主流方案是"交叉一致性":让多个 agent 独立完成同一任务,对比输出的一致性程度,一致性高则视为可信。

这个方案有一个根本缺陷:它是形式验证,不是实质验证。

三个模型可以同时犯同一个错误——例如,它们都读到了一篇被广泛引用但本身存在事实错误的文献,交叉比对结果高度一致,但结论是错的。

本规范采用实质验证:将结论下沉到事实层,逐一追查论据的物质基础。核心问题不是"别人也这么说吗",而是"这件事在现实世界里存在吗"。

4.3 四步验证流程

输入:子 agent Aⱼ 的输出结论 C

Step 1 — 论点-论据拆解
  C{ (p₁, E), (p₂, E), ..., (pₙ, E) }
  每个 pᵢ 是一个论点,E= {eᵢ₁, eᵢ₂, ...} 是支撑 pᵢ 的论据集合

Step 2 — 论据分层
  对每个 e ∈ Eᵢ:
    ├─ 可验证事实 → 进入物质还原
    ├─ 推理推导   → 递归拆解其依赖的事实基础
    └─ 经验判断   → 标记为 soft-claim,置信度权重折扣

Step 3 — 物质还原
  对每个可验证事实 e:
    ├─ 事实存在且准确  → verified
    ├─ 事实存在但偏差  → 标记偏差度 δ(e)
    ├─ 事实不存在      → falsified → 触发不合格
    └─ 事实无法验证    → uncertain → 标记置信度折扣

Step 4 — 判定
  ├─ 存在任意 falsified  → 不合格
  ├─ 仅 uncertain + verified → 合格(置信度折扣)
  └─ 全 verified → 合格(全置信度)

4.4 分层触发(成本控制)

全量物质还原成本高,按三级触发:

L1 — 轻量验证(默认对所有输出执行)
  ├─ 结构化字段完整性检查
  ├─ 输出格式合规检查
  └─ 表面矛盾检测
  │
  ├─ 通过 → 绿灯放行,不进入 L2
  └─ 不通过 → 触发 L2

L2 — 标准验证(L1 不通过时触发)
  ├─ 论点-论据拆解(Step 1-2)
  ├─ 物质还原关键论据(抽样 30-50%,优先抽取支撑核心论点的论据)
  │
  ├─ 通过 → 合格(置信度折扣标注)
  └─ 不通过 → 触发 L3

L3 — 深度验证(L2 发现 falsified 时触发)
  ├─ 全量论据物质还原
  ├─ 监督 agent 介入
  ├─ 上游 + 下游独立 agent 介入
  └─ 结果:合格 / 不合格 → 重做

4.5 三级介入机制

一旦判定不合格(任意 falsified),启动三级介入:

监督 agent(过程视角): 复盘 Aⱼ 的执行日志,判断:违规使用了静默域知识?执行步骤跳步?指令理解偏差?

上游 agent(输入视角): 检查 Aⱼ 收到的输入是否完整且正确,判断:上游传递了错误数据?前置条件未满足?

下游 agent(消费视角): 检查 Aⱼ 的输出是否可被下游消费,判断:格式错误?字段缺失?语义不可解析?

三角覆盖设计确保:三者的盲区互不重叠,联合诊断覆盖故障链路的全部维度。

4.6 重做策略

重做 ≠ 原样重跑

重做步骤:
1. 定位根因(监督 agent 输出)
2. 修正根因:
   ├─ 输入问题     → 修正上游输出,原 agent 重做
   ├─ 蒙版问题     → 调整激活梯度,原 agent 重做
   ├─ 能力缺口     → 更换 agent 或扩展蒙版
   └─ 过程问题     → 注入 process guard(执行约束 prompt),原 agent 重做
3. 重跑 + L2 验证(重做后的输出强制进入 L2,不得走 L1 绿灯)
4. 仍不合格 → 挂起,等待人工介入

五、阻碍识别与回溯协议

5.1 阻碍分类

A类 — 瞬态故障(Transient)
  判定标准:同一输入重跑能过(故障与输入无关)
  典型场景:API 超时、模型服务不可用、并发写冲突
  修复策略:原地重试,指数退避,不改变任何输入或蒙版
  上限:重试 3 次后降级为 B类或 C类重新评估

B类 — 参数失配(Parametric)
  判定标准:agent 能力足够,但入参或指令不匹配
  典型场景:prompt 未覆盖边缘情况、上下文被截断、输入格式错误
  修复策略:回溯到父节点,修正参数后重新派发

C类 — 能力缺口(Capability Gap)
  判定标准:当前蒙版下 agent 不具备必要能力
  修复策略:回溯到分配层,换 agent 或扩展蒙版

D类 — 拆解错误(Decomposition Error)
  判定标准:子任务划分本身有问题,不是执行层的错
  修复策略:回溯到规划层,重新拆解 DAG
  触发条件:同一 DAG 路径的多个节点连续发生 B类或 C类阻碍时,升级评估

5.2 回溯层级与回滚边界

层级          回滚范围                   兄弟节点处理
────          ────────                   ────────────
节点级        只回滚当前节点              不影响(独立执行)
父节点级      回滚父节点 + 所有子节点     父节点下全部失效
路径级        回滚整条依赖链              链上全部失效,链外保留
全局级        回滚整个 DAG               全部失效

回溯深度硬上限: 默认 3 层。到达上限强制挂起,等待人工介入。

六、机制衔接

6.1 主循环

用户输入
  ↓
交互1:理解拆解 → 子任务 DAG + agent 清单(含蒙版摘要)
  ↓
交互2:用户审核 → 确认方案 / 提出修改
  ↓
交互3:装填蒙版 → 并行执行各节点
  ↓
  ├─ 验证门 L1
  │   ├─ pass → 继续下一节点
  │   └─ fail → 阻碍识别
  │       ├─ A类 → 原地重试(指数退避)
  │       ├─ B类 → 父节点回溯,修正参数,重新派发
  │       ├─ C类 → 分配层回溯(换 agent / 扩蒙版)
  │       └─ D类 → 规划层回溯(重拆 DAG,视情况退回交互2)
  │
  ├─ 验证门 uncertain(L1 标记不确定)
  │   └─ 进入 L2 标准验证
  │       ├─ L2 pass → 置信度折扣标注 → 继续
  │       └─ L2 fail(发现 falsified)→ 进入 L3
  │           └─ L3:全量还原 + 三级介入
  │               ├─ L3 合格 → 置信度折扣标注 → 继续
  │               └─ L3 不合格 → 重做
  │                   └─ 重做仍不合格 → 挂起人工介入
  ↓
全节点完成 → 汇聚最终输出 → 交付用户

6.2 蒙版梯度与置信度判断的交叉

C类阻碍(能力缺口)有两种修复路径:换 agent 或扩蒙版。扩蒙版是成本较低的选择,但引入了新的知识域激活,有产生泄漏的风险:

C类阻碍触发蒙版调整
  → 将某知识域 kᵢ 从 M_silent 提升到 M_bg
  → 执行时走泄漏路径(路径2),所有 kᵢ 的使用标记泄漏声明
  → 输出强制进入 L2 标准验证
  → 若 L2/L3 发现 falsified,且根因追溯指向新引入的泄漏域 kᵢ:
      → 说明"扩蒙版修能力缺口"对当前任务不适用
      → 回退策略:不回退蒙版,改为更换 agent
      → 记录本次失败路径,防止下次对同一类任务再次尝试扩蒙版策略

附录A:术语表

术语 定义
蒙版(Mask) agent 的知识域激活配置,定义其在各知识域上的激活强度 m(Aⱼ, kᵢ)
激活梯度 m(Aⱼ, kᵢ) ∈ [-1, 1],连续值表示 agent 在特定知识域上的激活程度
主激活域(M_main) m > θ_main 的知识域集合,agent 可自由调用
背景域(M_bg) θ_bg < m ≤ θ_main 的知识域集合,可被动触发但需声明
静默域(M_silent) m ≤ θ_bg 的知识域集合,不主动激活,泄漏时需阻断
泄漏声明 agent 使用非主激活域知识时必须附加的标记
物质还原 将论据追溯到客观事实并验证其存在性的过程
falsified 物质还原的否定结果:论据声称的事实不存在于现实世界
verified 物质还原的肯定结果:事实存在且准确
验证门 子任务输出点的自动判定机制,三分输出:pass / fail / uncertain
三级介入 不合格触发时监督 agent + 上游 agent + 下游 agent 的联合诊断
DAG 有向无环图,子任务依赖关系的标准表示形式

附录B:设计决策记录(ADR)

ADR-01:为什么不用开关式权限控制蒙版

LLM 的知识是分布式权重,无法在推理时真正隔离。强制用 prompt 声明"你不知道X",模型会声称不知道,但知识仍然影响生成内容。连续梯度 + 强制声明的组合,将"无法完全禁止"的事实转化为"可以完全追踪"的机制。

ADR-02:为什么验证层不用交叉一致性

交叉一致性是形式验证,无法检测多个模型同时犯的错误(例如共同引用错误信息源)。物质还原是实质验证,每个论据都必须追溯到现实世界的事实基础。代价是成本更高,因此设计分层触发(L1/L2/L3)来控制验证成本。

ADR-03:为什么三级介入选上游+下游,不是随机两个 agent

故障诊断的有效性取决于诊断者的"视角覆盖"。上游持有输入空间,下游持有消费规格,监督持有执行过程——三者恰好覆盖故障链路的全部维度,且盲区不重叠。随机选取的 agent 可能有大量视角重叠,形成诊断盲区。


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。