一次 Agent 运行如何发生
一次 Agent 运行是一串有边界的判断,不是持续点击浏览器直到“看起来做完了”。每一轮先向模型描述当前页面,等待一次响应,再把声明的工具调用交给页面执行器,最后把结果送回模型,决定是否继续。
运行顺序
text
用户消息
│
▼
读取注册表快照 ──▶ 生成上下文与工具 schema
│
▼
模型响应 ──▶ 纯文本:结束或继续
│
└─ 工具调用 ──▶ 执行器:可用性 → 策略 → 执行 → 判据 → 观察
│
▼
工具结果 ──▶ 下一轮快照和工具清单会在每一轮重新生成。模型拿不到一个持续存在的 DOM 句柄;它看到的只是页面的有界表示,以及当前确实已声明的动作。
单轮内部发生什么
- 会话接收用户消息,或接收恢复任务的受控指令。
- 运行时读取活跃区域、记录、状态、反馈、不可用动作和可执行动作。
- 生成系统上下文,并为每个可用动作生成 function schema。
- 模型返回文本、工具调用,或两者兼有。
- 每个工具调用都经过同一个执行器:参数校验、可用性、确认、执行、成功判据和执行后观察。
- 工具结果按协议顺序回填。
- 如果模型继续请求工具,就进入下一轮;如果给出最终回答,本次运行结束。轮数、上下文、输出预算和重复调用检测会阻止运行无限增长。
动作缺失时,执行器不会去 DOM 里找一个看起来相似的按钮替代。缺失或不可用会变成结构化结果,交给模型判断下一步;框架不会偷偷“兜底点击”。
模型不拥有的判断
模型负责选择声明的动作 id 并提供参数。动作此刻是否可用、是否需要真人确认、执行后的业务状态是否真的改变,不由模型决定。这些检查留在页面运行时,必要时由后端继续执行。
这种分工也让运行可复现。回放模型可以发出完全相同的工具调用,不需要远程服务;请求轨迹能展示每一轮实际发送的快照、消息和工具清单。
预算与终止
生产运行有有限的轮数预算。页面可以调低,也可以在受控演示里调高,但不应取消。上下文压缩、单次输出上限和重复调用检测共同约束运行规模。
达到用户要求的状态就是成功,不需要额外再调用一次工具来生成一段话。某一步失败也是当前步骤的终止条件,模型应选择另一种动作,或如实说明为何无法继续。
从哪里观察
开发环境可以开启请求轨迹,按顺序查看第一次系统上下文、每轮工具清单、模型响应和工具结果。不要只看最后一句回答。真正需要回答的问题通常是:“在那个时刻,模型能看到什么、调用什么?”

