Agent Loop 怎样成为显式状态机
“让模型循环直到完成”缺少终止、失败和责任定义。状态机把每一步写成可观察契约。
切换三个场景,观察模型只拥有“提出候选动作”,Harness 才拥有任务状态与执行许可。
四个元素
- state:当前完整状态,如
WAITING_APPROVAL; - event:已发生事实,如
TOOL_TIMED_OUT; - transition:给定状态与事件转到哪里;
- action/effect:转移时启动的外部工作。
状态不是日志文案。每个终止分支至少进入 COMPLETED/FAILED/CANCELLED,等待用户则进入可持久化 WAITING_*。
一轮循环
text
读取目标与状态 → 构造模型上下文 → 模型提出 answer/tool/wait
→ 验证动作 → 执行/审批 → observation → 持久化状态
→ 检查完成、预算、取消 → 下一轮轮次上限、token/成本预算和截止时间由 Harness 强制;模型说“继续”不能突破。
事件身份
一次工具调用应有稳定 invocation_id/tool_call_id;一次顶层任务有 run_id。重试沿用幂等身份但生成新的 attempt 记录。这样才能判断结果属于哪次调用并避免旧结果写入新状态。
常见错误
RUNNING同时表示模型、工具和整个任务;- 等待审批只存在内存,重启后丢失;
- 工具完成事件重复到达导致二次转移;
- 取消只停止前端动画,没有传播到工具;
- 模型输出“完成”但没有验收条件;
- 失败后无限重试。
自测
本节自测
先作答,再查看解释。记录只保存在当前浏览器。
完成 0 / 3
打印版答案:1. 错;2. 可持久化等待状态;3. 身份、幂等和当前状态校验。
来源:ReAct。
下一步
状态机需要持有事实,进入上下文、会话状态与长期记忆。