循环检测与错误连击检测

wesgine 的两大自保护机制:CycleDetector 检测真循环,ErrorStreakDetector 检测伪进展。


CycleDetector(循环检测器)

核心概念

CycleDetector 检测「可证明的死循环」——完全相同操作 + 完全相同结果。它不是"你跑太久了"的计时器。

两阶段终止协议

阶段触发行为
自愈首次 CycleTerm注入纠正消息 + 重置计数器
HITL第二次 CycleTerm询问用户"怎么办",超时 60s 自动终止

工具分类(四级 fallback)

  1. 硬编码 map:wesgine 内置 ~20 个工具
  2. ExtraCategories:消费方声明
  3. ToolMeta 自动推断:ReadOnly=true → exploration
  4. 默认:categoryAction

阈值配置

类别WarnTerm
Exploration(读操作)可配置可配置
Action(写操作)可配置可配置
IdenticalCall(完全相同调用)47

Per-Run 覆盖

AppRunRequest{
  CycleDetectOverride: &CycleDetectConfig{
    ActionTermThreshold: 40,
    IdenticalCallTermThreshold: 5,
  },
}

委派子 Run 可用更严格阈值。

Progress-Aware 工具

参数变化时 streak /= 2(减半)——edit 同一文件多次修改是正常操作。


ErrorStreakDetector(错误连击检测器)

核心概念

检测「伪进展」——工具持续报错但 Agent 继续调用,看起来在工作实际在空转。

触发

连续 N 次工具调用返回错误(IsError=true)。

行为

触发 HITL 询问用户是否继续,超时自动终止(INV-STREAK-01)。


两者的区别

CycleDetectorErrorStreakDetector
检测什么相同操作重复持续错误
判据工具名+参数相同工具返回 IsError
终止方式两阶段(自愈→HITL)直接 HITL
分类plan 归 exploration不分类

Plan 工具的分类

plan 在 toolCategoryMap 内置分类为 categoryExploration——探索预算 + 进度减半。应用层不得重复声明 ExtraCategories / progressAwareTools。


与 Run 终止的关系

引擎不因 counter 阈值主动终止(INV-TERM-01)。CycleDetector 是唯一的引擎内终止来源——它检测可证明的死循环,不是"你跑太久了"。

终止路径全景:


相关文档