如何构建一个知道何时停止的Claude代码循环

0x_rody 发布于 2026-06-25 阅读 105

本文介绍如何让AI Agent的循环在正确时机停止,通过三个文件实现:停止规则、收敛检查和升级交接,避免过早退出或无限循环浪费资源。停止规则定义五种退出条件,收敛检查追踪每轮得分以判断收益递减,升级交接确保卡住时能清晰传递信息。

图像

启动循环很简单。真正的技巧在于退出:知道何时完成、何时卡住、何时放弃。

把停止逻辑做对,你的智能体就能在工作实际完成的那一刻立即停止,然后干净地交接,而不是白白消耗你的资金。

下面3个文件:停止规则、收敛检查、升级交接。

以下是完整设置 👇

图像

为什么停止是最难的部分

一个无法停止的循环会在两个方向上失败。它要么过早退出,把一个还没完成的任务宣布为完成;要么永不退出,在原地打转直到你的Token耗尽。

好的停止逻辑处理三个不同的时刻。它识别真正的成功并干净地停止。它识别卡住的情况,并升级给你处理,而不是胡乱猜测。

它还识别收益递减的情况——每次循环帮助越来越小——并在付出不再值得之前停止。

三个文件覆盖了所有三种情况:规则、收敛检查、升级交接。

文件1:停止规则

核心逻辑。每次循环之前,都会读取这些规则。把它们放进 CLAUDE.md:

## 循环停止规则

在以下任意条件成立时立即停止循环:

- **成功**:目标达成并已验证。停止,报告证据。
- **达到上限**:达到循环次数上限(默认为6次)。停止,报告迄今为止的最佳结果以及尚未完成的部分。
- **卡住**:同一个失败连续出现两次。循环在猜测,没有进展。停止并升级。
- **回退**:某个更改导致之前通过的检查失败。停止。修复一个问题正在破坏另一个问题。
- **递减**:最近两次循环对结果的改进小于5%。工作基本完成。停止并报告。

绝不要在未经验证的情况下宣布成功。
绝不要“再来一次”突破上限。上限就是上限。

五个退出条件,三种结果。成功递减 表示完成。达到上限 表示预算用完。卡住回退 表示需要升级。循环始终知道自己处于哪种状态。

文件2:收敛检查

最棘手的停止触发条件是“收益递减”,因为它需要循环比较不同周期,而不仅仅是判断当前周期。

这个命令可以跨周期跟踪进度。

放入 .claude/commands/loop-check.md:

---
description: 在循环中运行任务,并带收敛跟踪
argument-hint: <task>
allowed-tools: Read, Write, Edit, Glob, Grep, Bash
model: sonnet
---

任务: $ARGUMENTS

每个周期跟踪一个分数(通过的测试数、完成百分比,或任务定义的度量标准)。

1. 运行周期。记录分数。
2. 与上一周期比较:
   - 分数达到目标:停止,成功。
   - 分数连续两个周期改进低于5%:停止,递减。
   - 分数下降:停止,回退,回滚上次更改。
   - 分数提升:继续。
3. 每个周期都明确宣布分数和趋势。
4. 无论何种情况,硬上限为6个周期。

停止时明确说明停止原因。

分数让“收益递减”变得可衡量,而不是一种感觉。当连续两个周期分数几乎不变时,循环已经收敛了,再往下推进只会白白消耗Token,几乎毫无收益。

文件3:升级交接

当卡住时停止,只有当你得到干净的交接反馈时才有用。一个停止后丢出一堆日志的循环帮不上忙。

这个文件定义了好的升级应该是什么样子,放在 CLAUDE.md 中:

## 当你升级时,像这样交接

因为卡住而停止是正确的决定。让这次停止变得有用:

1. 用一句话说明你当时想做什么。
2. 准确说明卡在哪里:失败原因、文件、行号。
3. 列出你已经尝试过的方法(来自循环日志),这样我就不用重复尝试了。
4. 给出你对原因的最佳猜测,即使不确定。
5. 提出一个能让你继续前进的具体问题。

一个好的升级能让我在30秒内解决问题。一个糟糕的升级会让我从头开始重新调试。尽早升级,干净地升级。

这能把一个卡住的循环从死胡同变成一个快速的交接。你不必发现循环失败后再重新开始,而是收到一份直奔问题的简明总结。

升级做得好是一项功能,而不是承认失败。

你实际看到的效果

你输入一行命令:

/loop-check 优化搜索排名,让相关内容排在最前面

然后循环跟踪自己的进度,并有目的地停止:

第1轮  分数 62/100  (基线)
第2轮  分数 81/100  +19,正在改进,继续
第3轮  分数 88/100  +7,正在改进,继续
第4轮  分数 90/100  +2,低于5%
第5轮  分数 91/100  +1,连续两次低于5%

停止:收益递减。收敛于 91/100。
再多两轮也不值得消耗Token。要复审吗?

循环没有跑到上限,也没有提前退出。它在更多轮次不再值得的那一刻停止了。这就是全部技巧:不是启动循环,而是在正确的时间结束它。

常见错误

只有周期上限。仅有上限意味着循环总是跑到限制次数,即使它在第2轮就成功了或者在第3轮就卡住了。上限是最后防线,不是主要退出条件。你还需要成功检测和卡住检测。

没有收敛检查。没有跨周期跟踪分数,循环就无法区分“差不多完成了”和“还在爬升”,因此它要么过早停止,要么为了1%的改进而硬跑完所有周期。趋势才是做决定的关键。

升级时只丢日志。卡住时停止是对的,但返回原始输出浪费了交接机会。紧凑的五行升级能让你快速解套。日志转储让你从头再来。

把上限当成建议。“再来一轮突破限制”正是有限循环变成失控循环的原因。上限就是上限,每次都要遵守。如果6轮解决不了,第7轮通常也解决不了。

10分钟设置

3分钟:将停止规则添加到 CLAUDE.md。

3分钟:在 .claude/commands/loop-check.md 创建收敛跟踪循环。

2分钟:将升级交接格式添加到 CLAUDE.md。

2分钟:在真实任务上运行 /loop-check,观察它有目的地停止,并带有原因。

循环并没有变得更聪明。它只是学会了循环工程中最难的部分:知道停止的确切时刻,从而干净地完成,而不是空转或提前退出。

图像

  • 原文链接: x.com/0x_rody/status/206...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~

相关文章

0 条评论