确认被拒绝或卡住
确认流程有问题时,Agent 常表现为“我还在等待”“操作没有完成”或反复查询。首先要确认请求是否真的处于待处理状态,而不是把网络超时、组件卸载和业务拒绝混在一起。
先定位状态
| 观察 | 含义 | 处理 |
|---|---|---|
| 没有确认界面 | 请求未创建,或界面未挂载 | 查宿主与区域 |
| 界面显示但用户看不到 | 弹窗在隐藏窗口、被遮挡或另一标签页 | 提供可发现的待办入口 |
| 用户拒绝 | 明确的业务流程 | 返回拒绝,停止该意图 |
| 用户已批准但无结果 | 回执未消费、执行失败或期望不成立 | 查后端与执行结果 |
| Agent 重复查询 | 没有终态或轮询上限 | 返回结构化 pending / failed / timeout |
常见故障
把 approval: ask 当成自动批准。 它只要求确认。Agent 没有批准工具,也不应看到 approval token。
待确认项绑定错了请求。 挑战必须绑定 request id、能力、记录、参数摘要、用户、Agent 与会话。否则用户看到的和实际执行的可能不同。
页面卸载后确认仍在等待。 取消或迁移时必须终止请求,返回可诊断状态,不能让 Agent 无限轮询。
只在前端记录批准。 高风险动作应由后端验证一次性回执,并在消费后执行业务事务。
超时被当成拒绝。 两者业务含义不同。超时应报告未确认或结果未知,不能自动重试写入。
恢复步骤
- 用 request id 在后端查询审批与执行状态。
- 若仍在等待,向用户展示明确摘要与有效期。
- 若拒绝,停止当前意图;不要换一个相似动作绕过。
- 若回执已消费但业务失败,读取业务状态,判断是否部分成功。
- 若页面已刷新,重新
describe,不要复用旧请求。
验收
- 拒绝、超时、页面关闭、回执重复消费都有稳定错误;
- 未批准时业务函数未执行;
- Agent 看不到审批秘密,也没有批准能力;
- 审计能关联公开审批 id;
- 轮询有上限并遵守限流。

