本篇是 Agent-RPA 的心脏:自然语言意图 → 探索 → 结晶成参数化技能 → 0 Token 回放 → 分级自愈 → 回写升版。 对应传统 RPA 的"录制→脚本→回放→维护",但录制者是 Agent、维护是自愈。
stateDiagram-v2
[*] --> Intent: Agent 提交 NL 意图
Intent --> Exploring: 无可用技能 / 强制探索
Intent --> Resolving: 命中已有技能
Exploring --> Crystallizing: 目标达成(Validator 通过)
Exploring --> Failed: 探索失败/升级人工
Crystallizing --> Draft: 生成技能包 v_draft
Draft --> Trialing: 影子回放自测(≥1次)
Trialing --> Published: 断言全过 → 发布 vN
Trialing --> Crystallizing: 自测失败 → 补采/重探索
Resolving --> Replaying: 绑定变量
Published --> Replaying
Replaying --> Succeeded: 全部断言通过 → 产出结果
Replaying --> Healing: 定位/断言失败
Healing --> Replaying: L1/L2/L3 修复成功 → 回写升版
Healing --> Deprecated: 三级皆败 → 标记失效
Deprecated --> Exploring: 触发重探索(可选)
Succeeded --> [*]
Failed --> [*]
几个刻意的设计选择:
- Draft → Trialing → Published 三态:技能不是探索完就直接可信。先做影子回放自测(用探索时的输入再跑一遍确定性回放),断言全过才发布。这把"探索时侥幸成功"与"可确定性复现"区分开(对应 SC2/SC7 的可验证性)。
- Deprecated 不等于删除:失效技能保留,供 diff / 审计 / 触发重探索。
谁在思考(v2 澄清):Planner-Actor-Validator 是外部 Agent 驱动的职责,不在底座内(架构不变量 I-6)。底座提供多模态感知(observe)、拟人执行(act)、抽取(extract)与录制;Agent 用这些原语完成推理循环。Agent 可经 inbound MCP 亲自逐步驱动,或委托底座在 outbound 模式托管循环(见 10)。这里描述的三段式是推荐给 Agent 的探索范式(借鉴 Skyvern),而非底座硬编码的流程。
借鉴 Skyvern 的三段式,把"一个大 prompt 干所有事"拆开以降低幻觉、支持自校验。
flowchart LR
GOAL["NL 意图 + 产出 schema + 约束"] --> P["Planner<br/>拆解为有序子任务 + 工作记忆"]
P --> A["Actor<br/>观察(截图+AX-tree)→选元素→拟人动作"]
A --> OBSV["页面新状态"]
OBSV --> V["Validator<br/>本步是否达成 + 整体是否偏航"]
V -->|通过| P
V -->|偏航| P
P -->|全部完成| CAP["移交完整语义轨迹给 Crystallizer"]
探索期采集什么(Crystallizer 的原料)——每个成功动作即时记录:
| 采集项 | 内容 | 用途 |
|---|---|---|
| 语义动作 | navigate / click / type / select / scroll / extract / assert / wait + 意图描述 |
动作图节点 |
| 多模态定位器 | AX-tree ref + role/name、CSS、XPath、包围盒/视觉锚点、语义描述 |
回放定位与自愈(≥2 种) |
| 输入来源 | 该步的输入值是常量还是来自意图参数/上一步输出 | 变量抽取 |
| 断言 | 该步"成功"的可判据(URL 变化、元素出现、文本匹配、抽取非空…) | 回放校验与自愈触发 |
| 页面指纹 | 关键容器的 AX 子树摘要 hash | 缓存键 / 漂移检测 |
| 抽取 schema | 字段名→定位/正则/类型 | 结构化产出 |
默会知识锚点:Validator 的判据本质是"把人脑里隐含的成功标准显式化"。蓝图要求探索期强制生成断言,就是逼迫把默会的"我知道它成功了"变成可执行判据——否则回放无从校验、自愈无从触发。
结晶器是底座自有的确定性组件(不含 Agent):它把一条"能跑通"的轨迹,提炼成"能复用、能校验、能自愈"的技能包。四个子步骤默认全确定性;仅在"去噪判断/参数命名/断言补全"等模糊处,可可选地经 Cognition Port 请 Agent 辅助(见 10),但不是必需——无 Agent 时结晶仍可完成,只是参数命名等更朴素。四个子步骤:
flowchart TD
RAW["原始探索轨迹<br/>(含噪声/试错/回退)"] --> DENOISE["① 去噪<br/>剔除无效试探、合并等价步骤"]
DENOISE --> PARAM["② 参数化<br/>识别输入变量→提为 %占位%,机密指向 Vault"]
PARAM --> LOCGEN["③ 定位器生成<br/>每步 ≥2 种定位器 + 韧性排序"]
LOCGEN --> ASSERT["④ 断言/抽取固化<br/>成功判据 + 输出 schema"]
ASSERT --> PKG["技能包 v_draft(见 07 规范)"]
- ① 去噪(借鉴 workflow-use "intelligently filters noise"):探索常有试错、来回滚动、误点。结晶器基于 Validator 的通过点回溯出"最短成功路径",剔除噪声。
- ② 参数化:把探索时的具体输入("无线降噪耳机")抽象为变量
query;凭据类输入替换为%vault:site.credential%占位(I-5)。产出变量 schema(名称/类型/是否必填/默认)。 - ③ 定位器生成:这是韧性的关键,详见 03 §5 定位器仓库 与 07。原则:优先语义/AX-tree(抗样式漂移),CSS/XPath 作为快路径,视觉锚点兜底。
- ④ 断言/抽取固化:把探索期的判据与抽取字段写死为可执行断言与 schema。
回放解释器是纯确定性引擎,不含 LLM(I-4)。它遍历技能包的动作图,逐节点执行:
flowchart TD
A["加载技能包 + 校验变量 schema"] --> B["绑定变量(含 Vault 解引用)"]
B --> C["申请隐身会话(见 04:身份/传输档)"]
C --> D{"遍历动作图节点"}
D -->|extract| E["按 schema 抽取 → 累积结果"]
D -->|control("loop/branch")| F["按条件展开子图"]
D -->|interact| G["定位 → 行为合成执行 → 断言"]
G -->|断言失败| H["进入自愈(§5)"]
E --> D
F --> D
G -->|通过| D
D -->|完成| I["按顶层 schema 汇总产出"]
- 动作图支持控制流(借鉴 Skyvern blocks):
loop(遍历列表如"前 10 个结果")、branch(条件分支)、while、extract、http(可选:对已知 XHR 端点直接请求以提速)。 - 变量绑定在入口一次完成;机密通过 Vault 解引用注入,仅驻留内存,不落技能包/日志。
- 产出 schema 与探索期一致,保证 A/B 旅程结果结构稳定(SC1/SC2)。
核心思想:成本递增、能低成本解决就绝不升级、修复必回写(借鉴 Stagehand self-healing cache + workflow-use fallback)。
flowchart TD
FAIL["某步定位/断言失败"] --> L1
subgraph L1B["L1 · 本地重定位(0 Token)"]
L1["按定位器仓库多路兜底:<br/>AX-ref → role/name 语义 → CSS → XPath → 视觉锚点"]
L1 --> L1D["DOM/AX 子树 diff:<br/>找到‘移动/改名’后的等价元素"]
end
L1D -->|找到| OK["执行成功"]
L1D -->|失败| L2
subgraph L2B["L2 · 经 Cognition Port 回调 Agent(Agent 侧 Token)"]
L2["仅针对这一步:把多模态上下文(截图+AX-tree+DOM+该步意图)<br/>发给绑定的 Agent 驱动,让其重选元素/改判据"]
end
L2 -->|找到| OK
L2 -->|失败| L3
subgraph L3B["L3 · 经 Cognition Port 请 Agent 重探索子流程(Agent 侧 Token)"]
L3["请 Agent 仅重规划失败子任务,接回原动作图"]
end
L3 -->|成功| OK
L3 -->|失败| ESC["升级人工 / 技能标记 Deprecated"]
OK --> WB["回写:更新定位器/断言,技能升版 vN+1"]
WB --> CONT["继续回放剩余节点"]
谁来做 L2/L3 的思考——两种在场性(详见 10):
- 在场模式(交互式回放):若本次回放由某 Agent 经 inbound 发起且仍在场,L2/L3 的认知请求回给同一个 Agent,它带着自己的任务上下文修复。
- 脱离模式(无人值守/批量/定时):没有在场 Agent,则底座经 Cognition Port 调用配置的默认 healer Agent 驱动(模型可配置,子 Agent 指定 Fable 5)。
分级判据与预算:
| 级别 | 触发 | 成本落点 | 典型解决的漂移 | 上限 |
|---|---|---|---|---|
| L1 | 首选定位器未命中 | 底座 0 Token(多模态融合,见 12) | 改 class/id、元素挪位、DOM 微调 | 毫秒级,多路尝试 |
| L2 | L1 全败 | Agent 侧(单步) | 控件换形态、文案改动、需重判"哪个是搜索框" | 每步 ≤ 预算上限 |
| L3 | L2 失败 | Agent 侧(重规划子任务) | 流程结构变化(多了一步/顺序变) | 每 Run ≤ 预算上限 |
| 升级 | L3 失败 | 人工 | 站点大改版 / 硬风控 | 交人,技能失效 |
- 回写策略:L1 成功则把命中的定位器提到该步定位器列表首位(韧性排序自学习);L2/L3 成功则替换/新增动作节点并升版本,产出 skill diff 供审计(借鉴 workflow-use "workflow diffs")。
- 回放期拟人不变:自愈只改"选哪个元素/判据",执行仍走行为合成器重采样(见 03)。
- 底座 0 Token 兜底始终存在:即便完全没有配置任何 Agent 驱动,L1 仍可运行;L2/L3 在无驱动时直接升级人工(I-6:底座可独立完成确定性部分)。
flowchart LR
subgraph SKILL["技能包变量层"]
IN["输入变量<br/>query:string(必填)<br/>topN:int=10"]
SEC["机密引用<br/>%vault:ecom.login%"]
FLOW["步间数据流<br/>step3.out → step5.in"]
OUT["输出 schema<br/>items[]{title,price,rating}"]
end
CALL["run_skill(skill, {query,topN})"] --> IN
IN --> RUN["回放解释器"]
SEC -.解引用.-> RUN
RUN --> FLOW --> OUT
- 输入变量:探索期从"哪些值是可变输入"推断,人可在发布前审校(默会知识确认点)。
- 步间数据流(借鉴 workflow-use roadmap "take output from previous steps as input"):上一步抽取的值作为后续步输入(如"取搜索结果第 i 项链接 → 进入详情页抽价格")。
- 输出 schema:顶层结构化结果契约,跨探索/回放一致。
- 语义化版本:
skill@site/name,major变更=不兼容动作图重构,minor=新增能力,patch=自愈回写。 - Skill Diff:每次回写生成结构化差异(节点增删改、定位器变化、断言变化),支持人类 Review/回滚。
- 信任分(trust score):由"连续成功回放数、近期自愈频率、断言覆盖率"计算,低于阈值触发主动重探索或人工复核。
- 缓存键:技能步骤绑定"URL 模式 + 关键容器 AX 子树 hash",容器外变化不使缓存失效(借鉴 Stagehand
selector-scoped 缓存键),降低无谓自愈。
| 能力 | 传统 RPA | workflow-use | Stagehand | Agent-RPA |
|---|---|---|---|---|
| 创作者 | 人录制 | 人录制 | 人写 act/observe | Agent 探索 |
| 回放 0 Token | 是 | 是 | 是(缓存命中) | 是 |
| 自愈 | 弱/无 | 早期 | 有(cache self-heal) | 分级 L1–L3 + 回写升版 |
| 定位韧性 | 单选择器 | 选择器为主 | AX+选择器 | 多模态+韧性排序自学习 |
| 抗检测 | 拟人(为主) | 无重点 | 无重点 | 隐身阶梯(见 03) |
| 复用单元 | 流程文件 | JSON 工作流 | 脚本 | Skills(可被任意 Agent 发现) |
- 探索期强制生成断言与 ≥2 种定位器(可自愈的前提)。
- 技能经 Draft→Trialing(影子回放自测)→Published,验证可确定性复现(SC2)。
- 回放解释器零 LLM 调用(I-4)。
- 自愈为 L1(0Token)→L2→L3 成本递增,且修复回写升版(SC7)。
- 变量/机密/步间数据流/输出 schema 模型完整(I-5)。
- 提供 skill diff 与信任分,支持人类 Review/回滚(默会确认点)。