消息通知中心最难的不是找到按钮,而是列表一直在变。Agent 刚把一条告警标成已读,未读分组就重排;刚点进一条审批提醒,顶部又插进一条高优先级消息。🤖 这时模型看到的还是“第二行”,系统里的对象却已经不是刚才那条,批量操作就很容易从提效变成误处理。
很多团队会先补一个“点击前再识别一次文案”的小修,但它挡不住实时刷新。⚠️ 消息中心的风险不在识别能力,而在动作和目标没有被绑定:进入详情、标记已读、批量忽略,本质上都是对同一批消息对象做提交,只要列表顺序和过滤条件在动作间发生漂移,后续操作就会落到别的对象上。
问题不是点击错,而是批次没有被声明
做通知自动化时,页面通常同时存在三种漂移:一是新消息插队,二是已读后列表重排,三是筛选条件被别的动作联动刷新。📌 如果 Agent 还按“看见什么点什么”的方式工作,它处理的其实不是消息,而是一个不断漂移的视口。
更稳的做法是先做Batch Claim:先把“本轮要处理的通知集合”提取成稳定对象,再进入动作阶段。✅ 这一步至少要记录通知 ID、标题摘要、来源模块、时间戳与当前筛选条件。这样后面哪怕列表重排,执行器也知道自己处理的是哪一批,而不是哪几行。
用 Target Proof 把每一步提交回证到对象
真正决定稳定性的,是每次动作后都回证目标对象仍然一致。下面这段约束比“多看一眼页面”更有用:
claimed=claim_notifications(limit=5,filters={"unread":True})foriteminclaimed:open_detail(item.id)proof=collect_target_proof()assertproof["id"]==item.idassertproof["title"]==item.title mark_read(item.id)assertis_processed(item.id,state="read")它把处理流程拆成两段:先声明处理集合,再验证当前动作仍落在声明对象上。🧭 只要详情页 ID、标题摘要、来源模块三项里有一项对不上,就不提交 destructive action,而是退回列表重新定位。
| 方案 | 处理对象 | 页面刷新后结果 | 风险 |
|---|---|---|---|
| 逐行点选 | 第 N 行 | 容易变成别的消息 | 高 |
| 文案二次识别 | 近似文案 | 易撞同类通知 | 中 |
| Batch Claim + Target Proof | 稳定消息 ID | 可回证同一对象 | 低 |
实战里最该守住的三个约束
第一,批量按钮必须晚于对象回证。🛡️ 先证明“当前选中的 5 条消息就是 claim 的 5 条”,再执行批量已读或批量归档。第二,任何会触发重排的动作后,都要重新拉取 proof,而不是沿用旧快照。第三,列表页和详情页要共享同一套对象键,至少能稳定映射到消息 ID 或业务单号。
笔者认为,消息通知中心是 Agent 最容易被低估的一类页面,因为它看起来比表单简单,却同时具备流式刷新、批量提交和对象跳转三种副作用。📉 如果没有 Batch Claim,团队会把误处理归因到模型不够聪明;实际上更常见的问题,是系统没给执行器一个稳定的目标声明层。
接下来 3 到 6 个月,通知类自动化会越来越依赖“先认领、再提交”的对象协议,而不是继续堆视觉识别。🚀 能把消息对象、筛选上下文和提交结果都做成可回放证据链的团队,才更可能把 Agent 从演示脚本推进到真实值班与协同流。你们现在的通知中心,是按位置在点,还是按对象在提交?