MemGUI-Agent 能不能自己恢复误点,不取决于它「聪不聪明」,而取决于两件可检查的事:任务指令里有没有写清楚检查点和失败回退条件,以及页面上有没有不可逆动作。前者决定回退是稳定行为还是偶发;后者决定这一步能不能交给智能体自己做。支付、删除、提交订单这类页面,通常应当无条件停下等人工确认,不要指望模型临场判断。
先跑一次误点测试:故意点错按钮,看 MemGUI-Agent 的下一步是返回、继续还是停住,再从日志确认它有没有引用任务指令里的失败重试条件。若没有明确检查点,回退多半是模型自发行为,长程任务里不稳定。支付、删除、提交、授权类页面建议写进停止条件,触发即暂停交人工。判断依据是页面文本、按钮文案和日志记录,不是成功率数字。
构造一次误点后观察 MemGUI-Agent 是否回退
测试前先选一个不影响真实数据的页面:本地 mock 页、沙箱账号下的测试商品页、或者没有写入动作的列表页。把正常路径先走一遍并记下来,包括每一步的页面标题、关键按钮文案、URL 或可见元素的特征,这些是后面判断「它有没有回到原位」的对照物。
然后故意点错。可选的错法有三种:点目标按钮旁边的相邻按钮、点页面上的返回或首页入口、点一个和任务无关的菜单项。错点之后不要立刻接管,先看它的下一步行为,通常落在三类里:
- 返回原任务路径,说明存在回退能力;
- 继续在错误页面上往下点,说明它把新页面当成了当前任务的一部分;
- 停住不动或反复点同一处,说明它已经失去方向。
验证方式看日志:有没有页面识别结果、有没有动作选择理由、有没有和检查点做对比的记录。风险边界要清楚,跑一次的结果只能说明这一次的表现,建议在同类页面上重复几次,再判断它是稳定回退还是碰巧回退。
检查任务指令里有没有写失败重试条件
回退行为可能来自任务指令,也可能是模型自己补的。区分的办法是找指令里有没有失败重试或返回上一步的条目,再看误点后它有没有被触发。一个可用的指令骨架可以写成这样:
目标:在目标页面完成指定操作
检查点:依次为 搜索页 -> 结果列表 -> 详情页
失败重试:若当前页面关键元素不匹配预期检查点,返回上一个检查点,最多重试 2 次
停止条件:出现支付、删除、提交类按钮时暂停并请求确认把这段放进任务指令后重跑误点测试,重点看日志里是否出现「返回上一个检查点」这种动作记录。如果指令里根本没有这一条,之前观察到的回退就属于模型自发,长程任务里换一个页面可能就不复现。指令里的检查点也要写得能被页面元素验证,比如用按钮文案或标题文本,而不是「详情页」这种抽象说法。
对比有确认点和无确认点的完成率
这里不建议去看百分比,长程任务样本太少时百分比没有解释力,改为记录步骤更实在。用同一个任务跑两组:一组在中间步骤插入人工确认,一组不加。每组记录三个量:总共走了多少步、哪一步出错、出错后是停在错误页还是继续往下走。
对比后通常能看出一个规律:加确认点并不能让任务更快,它减少的是错误向下传播的机会——人在中间步骤拦住了误点,后面的步骤就不会建立在错误页面上。风险边界同样存在,确认点太密会让人疲劳,反而容易在没看清的时候直接点确认。建议只在状态发生不可逆变化前设确认点,中间的可返回步骤交给智能体自己处理。
在支付或删除类页面测试停止边界
哪些页面必须无条件暂停,可以用页面证据来判断,而不是凭感觉。下面这些特征出现在当前页面上时,建议直接触发暂停并转人工:
- 金额文本加支付、付款、立即购买、确认支付类按钮同时出现;
- 删除、移除、清空类按钮,且附近带有目标对象名称;
- 提交订单、确认收货、发送、发布、授权、解绑、注销这类动作按钮;
- 出现验证码、短信校验、密码输入框等身份校验元素;
- 出现删除后不可恢复、操作不可撤销之类的提示文案。
触发方式可以先用关键词匹配,把匹配到的页面文本、按钮文案或元素属性写进日志,作为暂停依据。要说明的是,关键词匹配会有误判,比如正常浏览商品时也会出现「购买」字样,所以这类规则需要结合页面结构确认,不要只看单个词。
把恢复动作写成可复用的任务片段
把误点恢复固定成一段任务片段,就不用每次靠临场判断。骨架可以这样写,方括号里是需要替换成实际页面值的地方:
片段名:误点恢复
前置:当前页面标记 [url_pattern] 或 [key_text]
步骤:
1 识别错误页面:判断当前页面的 [key_text] 是否属于预期白名单
2 返回检查点:执行返回动作 [backtrack] 到最近的 [checkpoint]
3 重新确认状态:读取 [checkpoint] 的关键元素,确认已回到该检查点
输出:{recovered: true/false, checkpoint: '[checkpoint]', evidence: '[页面文本]'}
失败处理:若第 3 步确认失败,停止执行并上报,不继续尝试放置位置建议在任务指令的失败分支里,和前面的失败重试条件写在一起。[backtrack] 换成环境里实际可用的返回或导航动作,[key_text] 换成真实页面元素,替换后跑一次误点测试,看输出的 recovered 字段和日志里的页面证据是否一致。这个片段只解决可返回的误点,遇到支付、删除类页面仍然走第 4 节的暂停规则,不要把它当成绕过确认的手段。