Claude Code 团队官方的循环设计指南,把 `/goal`、`/loop` 这些原语讲得很清楚,想从单次提示转向自主代理工作流的开发者可以直接照着搭。
Claude Code 团队将“设计循环”定义为智能体重复工作直到满足停止条件,划分四种类型:1)回合循环——手动提示触发,Claude 自判完成,适合短任务,可通过 SKILL.md 提升验证;2)目标循环——/goal 手动触发,达成目标或达最大轮数停止,需确定性完成标准(如测试通过数);3)时间循环——/loop 和 /schedule 按间隔触发,适合同步消息、检查 PR 等重复任务,可云端运行;4)主动循环——事件或计划触发,无人实时参与,每个子任务独立退出。建议从最简单方案开始,选择性使用复杂循环。
关于如何开始使用循环(loops),现在有很多讨论,讨论的焦点是“设计循环”而不是为你的编程智能体编写提示词。如果你在 X 上花些时间试图搞清楚循环到底是什么,你会找到多种不同的答案。
在 Claude Code 团队,我们将循环定义为智能体重复工作周期直至满足停止条件的过程。我们根据以下几点对几种不同类型的循环进行分类:
- 触发方式 * 停止方式 * 使用了哪种 Claude Code 原语 * 每种循环最适合哪类任务
我们将介绍主要的循环类型、各自的使用场景,以及在管理模型 token 用量的同时如何保持代码质量。并非所有任务都需要复杂循环;请从最简单的方案入手,并有选择地使用这些模式。
回合制循环
- 触发方式:用户提示词 * 停止条件:Claude 判断任务已完成或需要更多上下文 * 最佳用途:不属于常规流程或计划安排的较短任务 * 用量管理方式:编写具体提示词,并通过技能(skills)改进验证,从而减少回合数量
你发送的每一条提示词都会启动一个手动循环,由你指导每一回合。Claude 收集上下文、执行操作、检查工作、必要时重复执行,然后做出响应。我们将这个过程称为智能体循环(agentic loop)。
例如,要求 Claude 创建一个点赞按钮。它会读取你的代码、做出修改、运行测试,然后交回一个它认为能工作的结果。之后你手动检查工作成果,再写下一条提示词。
你可以通过将手动步骤编码到 SKILL.md 文件中来改进验证环节,这样 Claude 就能端到端地自行检查更多工作。该文件应包含允许 Claude 查看、测量或与结果交互的工具或连接器。检查项越量化,Claude 就越容易进行自我验证。
例如,在你的 SKILL.md 文件中,你可以指定:
基于目标的循环(/goal)
- 触发方式:实时手动提示词 * 停止条件:目标达成 或 达到最大回合数 * 最佳用途:具有可验证退出条件的任务 * 用量管理方式:设置具体的完成标准和明确的回合上限,例如“尝试 5 次后停止”
有时,单次回合是不够的,尤其对于更复杂的任务。当智能体能够迭代时,其表现会更好。你可以通过 /goal 来定义“完成”是什么样子,从而延长 Claude 持续迭代的时长。
当你定义成功标准时,Claude 不必自行判断什么是“足够好”并提前终止循环。每次 Claude 尝试停止时,一个评估模型会检查你的条件,并将它送回继续工作,直到目标达成或达到你定义的轮次上限。
这就是为什么确定性标准(例如通过的测试数量或达到某个分数阈值)如此有效。
例如:
基于时间的循环(/loop 和 /schedule)
- 触发方式:指定的时间间隔。
- 停止条件:你手动取消它,或工作完成(PR 合并、队列清空)。
- 最佳用途:用于重复性工作,或与外部环境 / 系统交互。
- 使用管控:设置更长的时间间隔,或基于事件而非时间来作出反应。
某些智能体工作是重复性的:任务本身不变,只有输入会发生变化。例如,每天早晨总结 Slack 消息。另一些工作依赖于外部系统,与之交互的一个简单方式是按固定间隔检查系统状态并针对变化作出反应。例如,一个 PR 可能会收到代码审查,或者 CI 失败。
针对这些情况,你可以在运行 Claude 时使用 /loop 触发,它会按一个时间间隔重复执行提示词。例如:
/loop 在你的电脑上运行,因此如果你关闭电脑,它就会停止。你可以通过使用 /schedule 创建例程,将循环转移到云端。
主动循环
- 触发方式:事件或计划,无需人类实时参与。
- 停止条件:每个任务在目标达成时退出。例程本身会一直运行,直到你关闭它。
- 最佳用途:适用于定义明确的重复性工作流,例如:Bug 报告、问题分类、迁移、依赖升级等。
- 使用管控:将例程路由到更小、更快的模型,并将最强大的模型用于需要判断决策的任务。
上述原语,以及 Claude Code 的其他功能(如自动模式和动态工作流(研究预览版)),可以组合成一个用于长时间运行工作的循环。
例如,要处理传入的反馈,你可以使用:
/schedule(研究预览版)来运行一个检查新报告的例程
/goal来定义完成状态,并使用技能来记录如何验证该状态
- 动态工作流来编排多个智能体,由它们对每份报告进行分类、修复并审查修复内容
- 自动模式,使例程无需停下来请求许可即可运行
将它们组合起来,提示词可以写成这样:
维护代码质量
循环输出的质量取决于其周围的系统。在设计系统时:
- 保持代码库本身整洁:Claude 会遵循你代码库中已有的模式和约定。
- 让 Claude 能够验证自己的工作:通过技能(skills)将你认为好的标准编码给团队。
- 让文档易于获取:框架和库的文档包含了最新的最佳实践。
- 使用第二个智能体进行代码审查:一个拥有全新上下文的审查者偏见更少,且不受主智能体推理过程的影响。你可以使用内置的
/code-review技能或 Code Review for GitHub。
当单次结果未达到标准时,不要只解决单个问题,而应尝试将其编码,以改进系统的未来所有迭代。
管理模型 token 使用量
为管理模型 token 使用量,循环应具有明确的边界:
- 为任务选择合适的基元和模型:较小的任务不需要多个智能体或循环。有些任务可以使用更便宜、更快的模型。
- 定义明确的成功与停止标准:具体说明“完成”的标准,这样 Claude 就能更快(但也不能太快)地找到解决方案。
- 在大规模运行前先进行试点:动态工作流可能会生成数百个智能体。先对一小部分工作用量进行评估。
- 在确定性工作中使用脚本:运行脚本比逐步推理更便宜。例如,一个 PDF 技能可以附带一个表单填写脚本,Claude 每次运行该脚本,而无需重新推导代码。
- 不要比实际需要更频繁地运行例程:将运行间隔与所监控对象的变化频率相匹配。
- 检查使用情况:
/usage命令可按技能、子智能体和 MCP 细分近期使用量;不带参数的/goal显示已使用的轮数和模型 token 数;/workflows显示每个智能体的模型 token 使用量,你可以随时停止某个智能体。
开始使用
总结一下:
要开始使用循环,先审视你已经在做的工作。选择一个让你成为瓶颈的任务,思考哪个环节可以移交出去:你能编写验证检查吗?目标是否足够清晰?任务是否按计划到达?
一旦有了想法,就运行循环,观察结果(比如它在何处卡住或过度运行),不要害怕迭代调整。
欲了解更多信息,请阅读 Claude Code 文档中关于并行运行智能体以及循环、调度、目标和动态工作流的页面。
本文由 @delba_oliveira 撰写。