ErrorStreak 伪进展检测

wesgine 的 ErrorStreakDetector 检测 Agent 在连续多轮中反复遇到错误但仍在继续的"伪进展"场景。


设计目标

CycleDetector 检测的是"完全相同的操作 + 完全相同的结果"(真循环)。ErrorStreak 检测的是另一种病态:Agent 每轮都做不同的事,但每轮都失败。

典型场景:

从 counter 角度看没有循环(参数每次都不同),但从用户视角看就是"AI 在原地打转"。


检测机制

Turn 1: exec("make build") → error
Turn 2: exec("go build ./...") → error  
Turn 3: exec("go build -v ./...") → error
Turn 4: read("Makefile") → ok
Turn 5: exec("make build VERBOSE=1") → error
→ ErrorStreak 触发

ErrorStreakDetector 跟踪连续错误次数,达到阈值时:

  1. 触发 HITL(Human-in-the-Loop)请求
  2. 询问用户是否继续、换方向、或终止
  3. HITL 超时后自动终止 Run

与 CycleDetector 的区别

CycleDetectorErrorStreak
检测对象完全相同的调用连续失败的不同调用
触发条件相同参数+相同结果工具返回 IsError=true
第一步自愈(纠正消息)HITL 询问
最终手段HITL → 超时终止HITL → 超时终止

不变量

INV-STREAK-01:ErrorStreak HITL 超时后终止 Run,与 CycleDetector 的终止路径共用 ApplyTermination 状态迁移。

INV-TERM-01:ErrorStreak 的内部 counter 不会自主终止 Run——它总是先经过 HITL 环节让用户决定。


事件

ErrorStreak 触发时发出 error_streak 事件,前端可据此显示警告提示。


相关文档