目录
让 AI 自己跑一个长任务,偶尔会看到它卡住:同一个文件读了十几遍,同一条命令一直重试,同一段代码改过来又改回去。
它不会自己意识到在打转,只会一轮一轮地跑下去,token 和时间都在空烧。
WES Code 的循环检测盯着这件事:先提醒它换个办法,再让它把已知的信息记下来、停止打转;还在转,就弹出来让你决定继续还是终止。这篇讲它看什么、默认阈值是多少、触发后发生什么,以及在设置里怎么调。
一、它盯三件事
| 维度 | 统计什么 | 默认阈值(警告 / 终止) |
|---|---|---|
| 同类工具连续调用 | 连续调用同一类工具的次数,换一类就清零 | 探索类 50 / 100,操作类 25 / 50 |
| 完全相同的调用 | 工具、子动作和参数完全一样的调用,连续出现的次数 | 4 / 7 |
| 重复的输出 | AI 回复的文字和之前一样,在最近 20 轮里出现的次数 | 3 / 5,只警告不终止 |
「探索类」是 read、grep、ls 这类只读工具,「操作类」是 edit、write、exec 这类会改东西的工具。有几个工具单独设了阈值:
| 工具 | 警告 / 终止 |
|---|---|
| exec | 30 / 60 |
| 只读的 exec(如查看类命令) | 50 / 100 |
| edit、write、apply_patch | 30 / 60 |
| plan | 15 / 30 |
探索类阈值给得最宽,因为在一个大仓库里找东西,连续读几十个文件很正常。完全相同的调用阈值最紧:同样的参数调到第 7 次,基本可以确定是在原地转。
拿「完全相同的调用」举个例子(示意)。AI 一直用同样的参数读同一个文件:
text
read internal/order/cache.go 第 1 次
read internal/order/cache.go 第 2 次
read internal/order/cache.go 第 3 次
read internal/order/cache.go 第 4 次 → 到警告阈值,提醒它换个办法
read internal/order/cache.go 第 5 次
read internal/order/cache.go 第 6 次
read internal/order/cache.go 第 7 次 → 到终止阈值
如果每次读的是不同的文件,或者换了读取范围,就不算「完全相同」。
二、触发之后会发生什么
到警告阈值:提醒一句
AI 会收到一条观察提示,原文是:
observation ... repeat count: N. Consider a different approach or tool to make progress.
意思是「这件事已经重复 N 次了,换个方法或工具试试」。某些工具会换成更具体的建议。
第一次到终止阈值:让它自己收尾
不会直接停,而是给 AI 注入一条提示:
observation ... repeat limit reached: N. Wrap up current work --- record the key facts you have learned (paths, line numbers, decisions) so they survive context compression, then stop looping.
要它把已经弄清楚的东西(路径、行号、决定)记下来,然后停止打转。同时,这个维度的计数清零,给它一次自我纠正的机会。
第二次到终止阈值:交给你决定
⟦配图:本地上传 marketing/images/covers-juejin/cover-19-cycle-detect.png,图片说明「先自我纠正,再请你决定」⟧
自我纠正之后还在转,WES Code 会弹出一个选择:
AI 在操作 某个操作 上循环(已重复 N 次且自动纠正失败)。
两个选项:
| 选项 | 结果 |
|---|---|
| 继续尝试 | 计数清零,再给 AI 一轮机会 |
| 终止任务 | 停止这次运行 |
10 分钟内没有选,就按终止处理。
三、哪些情况不算循环
几种看起来像重复、其实是正常推进的情况,会被放宽:
- 工具报错了:报错会清掉「完全相同调用」的计数,报错重试由另一套错误处理负责
- 探索时换了参数:比如连续 grep 不同的关键词,连续计数按一半累加
- 只读的命令:查看类的 exec 归到只读 exec,阈值和探索类一样宽
四、在设置里调阈值
打开设置,「AI 引擎」下面的「循环检测」。页面说明是「当 AI 重复调用同类工具超过阈值时,触发警告或终止运行」,分四块:
| 区块 | 页面上的说明 |
|---|---|
| 探索类工具 | read、grep、ls 等只读工具的连续调用阈值 |
| 操作类工具 | edit、write、exec 等写入工具的连续调用阈值 |
| 相同调用检测 | 完全相同参数的工具调用连续出现的阈值 |
| 工具级覆盖 | 为特定工具单独配置警告和终止阈值 |
每一块都能分别填「警告」和「终止」两个数。需要先打开一个项目文件夹,才能配置。
什么时候调
- 仓库很大、AI 经常要连续读很多文件:调高探索类阈值
- 你希望它更早停下来问你:调低操作类和相同调用的终止阈值
- 某个工具经常被误判:在「工具级覆盖」里单独给它设阈值
五、它做不到的地方
- 换了参数的重复,算不上「完全相同」:只能靠同类工具的连续计数慢慢累积到阈值
- 不看工具返回了什么:只看调用本身,不判断结果是不是在进步
- 有些阈值设置页里调不了:重复输出的阈值没有放到设置页
- 没有总开关:循环检测一直开着,只能调阈值
小结
- 循环检测盯三件事:同类工具连续调用、完全相同的调用、重复的输出
- 默认阈值:探索类 50 / 100,操作类 25 / 50,完全相同的调用 4 / 7
- 到警告阈值先提醒;第一次到终止阈值,让 AI 记下已知信息、自己收尾;第二次弹窗问你,10 分钟不选就终止
- 阈值在「AI 引擎 → 循环检测」里调
文中的循环检测是 WES Code 里的功能,官网是 weisyn.com。你们遇到过 AI 最离谱的一次「原地打转」是什么,欢迎评论区聊聊。
觉得有用的朋友,欢迎点赞、收藏、关注,后面会继续分享 AI 编程的实战经验。