CycleDetector三维度四分类算法详解,如何精准识别Agent循环行为

CycleDetector通过Identical Call、Tool Category、Error Streak三个独立检测维度,结合工具四级分类与参数变化减半计数机制,实现对Agent运行中各类循环...

人工智能

在大模型智能体(Agent)的实际运行中,‘陷入死循环’并非仅指重复执行完全相同的指令,而是一类高度异构的行为模式集合。2026年10月,CycleDetector算法正式公开其完整检测逻辑——采用三维度并行检测与四分类阈值策略,从根本上重构了对‘循环’的定义与判定方式。

传统方案常依赖全局轮次上限(如max_turns=25)作为终止依据,但这一做法存在明显缺陷:当Agent在合理范围内反复迭代调试(例如修复编译错误链),强制截断反而会中断有效任务;反之,若Agent在无信息增益下重复相同操作,却因参数微调未被识别,又会导致资源浪费甚至系统僵死。

CycleDetector的核心突破在于将‘循环’解构为三种可量化、可区分的行为形态,并为每种形态配置独立的检测逻辑与动态阈值。

第一维度:Identical Call Streak(完全相同调用序列)

这是最明确的死循环信号:工具名、参数JSON哈希值与返回结果哈希值三者均与上一轮完全一致。例如连续多次执行grep("TODO", "src/")且每次输出内容不变,则认定为无效重复。

该维度默认预警阈值为3次,终止阈值为5次。原因在于:第二次相同调用已无新信息产出;连续5次完全一致的操作,在工程实践中几乎不可能具备合理性。值得注意的是,CycleDetector同时校验参数与结果哈希——仅检查参数会误判合法轮询(如exec("git status")),而结果哈希确保“做了同样的事,还得到了同样的答案”,才构成真正意义上的死循环。

第二维度:Tool Category Streak(工具类别连续调用)

所有工具被划分为两大基础类别:

  • Exploration(探索类):read、grep、search、find等,不改变系统状态;
  • Action(操作类):edit、write、exec、delete等,直接修改环境。

当同一类工具被连续调用时,对应streak计数器递增;类别切换则重置。例如连续3次read操作后接1次edit,exploration streak归零,action streak从1开始。

该维度用于捕捉‘功能单一化’倾向:过度探索可能意味着Agent未能形成有效计划;持续操作而缺乏反馈验证,则易陷入盲目修改的陷阱。默认预警值为50次连续同类调用,终止值为100次——适用于大型代码库中合理的批量读取场景,但超出即触发干预。

第三维度:Error Streak(连续失败序列)

聚焦于执行类工具(如exec)返回错误的重复性。典型场景是:Agent反复修改同一文件、重新编译,每次修正一个错误却引入新错误,形成“打地鼠”式循环。

CycleDetector不依赖错误文本是否相同,而是通过语义相似度或错误码聚类判断“失败模式”的重复性。例如连续10次编译失败,尽管错误消息不同(A→B→C→A…),但均源于同一模块的连锁缺陷,即视为潜在循环。

该维度阈值设为8–15次:低于8次可能是正常调试;超过15次则高度可疑。配合参数变化减半机制(见下文),可有效区分真实迭代与无效循环。

终止与自愈 · CD-02

上述三维度独立运行、互不干扰,各自触发预警或终止后,由统一决策模块协调响应——任一维度达到终止阈值即触发自愈流程(HITL介入或直接终止)。

  • 探索类(Exploration):read/grep/search等,阈值最高(Warn=100, Term=200),支持大规模代码扫描;
  • 动作类(Action):edit/write/exec等,中等阈值(Warn=50, Term=100),防止盲目修改;
  • 规划类(Plan):涉及任务分解与路径生成,阈值较低(Warn=30, Term=60),因其本身应具收敛性;
  • 自定义类(Custom):允许用户按场景覆盖阈值(如exec override=100, exec rw=60),实现细粒度控制。

这一设计源于对真实Agent行为的观察:处理15个文件的重构任务可能需30轮迭代,而修复单个函数通常5轮内应完成。固定阈值无法兼顾二者,分级策略则使检测更具上下文感知能力。

更关键的是参数变化减半计数机制:当参数发生实质性变化(如patch_v1→patch_v2),当前streak不重置,但计数器增量减半(+0.5而非+1)。这解决了经典难题——

> 轮次1: read("auth.go") → edit("auth.go", patch_v1) → exec → 错误A

> 轮次2: read("auth.go") → edit("auth.go", patch_v2) → exec → 错误B

> ……重复10次

CycleDetector 减半机制

表面看每次调用参数不同,Identical Call检测失效;但若参数变化仅为微调(如补丁版本号递增),且错误模式重复,则Error Streak仍可累积至阈值。减半机制使系统能识别“形式变化、实质循环”的行为,避免将“打地鼠”误判为有效探索。

文章配图

图中对比清晰显示:若参数不变(TOP HALF),计数线性增长,25轮即终止;若参数持续变化但属迭代改进(BOTTOM HALF),计数增速减缓,50+轮仍可继续——系统由此区分出“无效重复”与“合理调试”。

该算法已在多个开源Agent框架中集成测试。实测表明,在包含12类作物、45种病害的叶片识别系统(基于ResNet50+ONNX部署)的调试阶段,CycleDetector成功拦截了3起因模型拒识逻辑缺陷导致的无限重试循环,同时放行了7次跨20轮的有效参数优化过程,误报率低于2%。

需要强调的是,CycleDetector并非追求“零循环”,而是建立循环合理性评估框架:它承认某些任务天然需要多轮迭代,重点在于识别那些脱离目标、无信息增益的重复行为。其设计哲学接近人类调试直觉——当修改不再带来进展,便是时候介入。

随着Agent在DevOps、自动化运维、科学计算等场景深度落地,对运行时行为的精细化监控需求日益迫切。CycleDetector提供了一种可解释、可配置、可扩展的检测范式,为构建高可靠智能体系统奠定了底层能力基础。后续工作将聚焦于结合执行轨迹的因果分析,进一步提升对隐性循环(如状态回退型循环)的识别精度。