互动实验室实验 3 / 8
本章目录

实验 03 · 重试与停止状态机

对应第 08 章。本实验模拟瞬时恢复、持续失败和重复无效动作,观察不同停止机制何时介入。

1. 实验问题

max_turns 是最后保险,却不是唯一停止条件。瞬时错误适合有预算重试;同一失败反复出现说明策略没有获得新信息;持续失败最终应报告预算耗尽。三个情况都显示“失败”,但正确动作不同。

先选择最大轮数 8 和“重复同一错误”。预测系统会跑满八轮,还是被重复检测器提前停止。

2. 运行状态机

开启退避后,时间成本会逐轮增长,但本模拟不会真的等待。退避保护服务,不解决逻辑错误。对参数非法或权限拒绝使用指数退避,只会更慢地重复错误。

3. 分类结果

观察最终文案:

它们都属于 Thread 状态,不能只靠最终自然语言推断。

4. 幂等挑战

把模拟工具换成“创建 GitHub issue”。第一次请求已送达,但客户端超时。此时重试可能创建两个 issue。安全设计需要 operation_id 或先查询是否已创建,而不是仅增加等待。

列出你自己的 Agent 未来可能拥有的副作用工具,逐个标记:可安全重放、需要幂等键、绝不能自动重放。

5. 代码挑战

在 AgentState 中保存 recent_call_fingerprints。指纹由工具名和规范化参数生成,结果哈希另存。连续两次相同调用且结果相同,向模型注入重复警告;第三次进入 blocked。为文件读取加入版本信息,避免文件已经变化却被误判为无效重复。

完成后用 self-test 模拟三个场景,断言 stop_reason 准确。可靠循环必须能解释为什么停,而不只是终于不再运行。