1. 从“会写代码”到“会设计循环”:Loop Engineering 到底在解决什么问题
第一次听到 Loop Engineering 这个词,很多人会以为是某种新的编程语言或者框架。其实不是。它描述的是一套围绕 AI 编程工具构建“自动化工作循环”的工程方法论。你可以把它理解成:以前我们用 Claude Code、Codex、Cursor 这些工具,是“我问一句,它答一句”;而 Loop Engineering 要做的是,把“提问—执行—验证—修正”这个链条变成一个可以自动跑起来的闭环,让 AI 在没有人盯着的情况下,也能持续产出可用的代码。
我最初接触这个概念,是因为一个很现实的问题:用 Claude Code 写一个中等规模的模块,前几轮对话效果很好,但一旦任务超过二三十步,它就开始“忘事”——忘记之前的约定、忘记文件结构、忘记测试没通过。你不得不反复把上下文重新喂给它,效率反而比手写还低。后来我意识到,问题不在于模型不够强,而在于我没有为它设计一个“循环结构”。模型本身是无状态的,每一次调用都是独立的;所谓“记忆”和“连续性”,其实是我们用工程手段在外面搭出来的。
Loop Engineering 的核心,就是这套“在外面搭出来的东西”。它包含几个关键部分:任务分解策略、上下文管理机制、执行与验证的自动化回路、失败重试与回滚逻辑,以及人机协作的介入点设计。这五个部分组合起来,才能让 AI 编程工具从“玩具”变成“生产力”。
适合谁来学?如果你已经在用 Cursor 或 Claude Code 写一些小脚本,但总觉得“差点意思”,那这套方法就是为你准备的。如果你是完全的新手,也没关系,我会从最基础的工具安装和配置讲起,把每一步的“为什么”都说清楚。整篇内容会围绕一个真实项目实战展开——我会用一个“批量图片元数据整理工具”作为案例,从零开始,把 Loop Engineering 的完整流程走一遍。
提示:Loop Engineering 不是某个具体产品的功能,而是一种使用 AI 编程工具的思维方式。工具会变,但这套循环设计的逻辑是通用的。
2. 工具链选型与基础环境搭建
2.1 Claude Code、Codex、Cursor 三者的定位差异
在开始搭建循环之前,得先搞清楚手里这几把“刀”各自适合切什么菜。我用了大半年时间,把 Claude Code、Codex 和 Cursor 都深度用了一遍,下面这张表是我自己的实际体感总结:
| 工具 | 核心定位 | 最适合的场景 | 循环工程中的角色 |
|---|---|---|---|
| Claude Code | 终端内的 AI 编程代理 | 多文件重构、复杂逻辑实现 | 主力执行器,适合跑长循环 |
| Codex | 代码补全与轻量生成 | 单文件内快速补全、小函数生成 | 辅助补全,适合短循环 |
| Cursor | AI 增强的 IDE | 交互式开发、实时预览 | 人机协作界面,适合调试环节 |
Claude Code 最大的优势是它能在终端里直接执行命令、读写文件、运行测试。这意味着你可以把“写代码—跑测试—看结果—改代码”这个循环完全交给它。Codex 更轻量,适合在编辑器里做即时的代码补全,但它不具备自主执行能力,所以它在循环里扮演的是“快速填充”的角色。Cursor 则介于两者之间,它有 IDE 的完整功能,同时集成了 AI 对话和生成能力,适合作为整个循环的“控制台”。
我个人的组合方案是:用 Cursor 作为主编辑器和人机交互界面,用 Claude Code 作为后台的自动化执行引擎,Codex 作为补全插件。这样既能享受 IDE 的便利,又能让 Claude Code 在后台跑长任务。
2.2 安装与配置的实操步骤
先说 Claude Code 的安装。官方推荐的方式是通过 npm 全局安装:
npm install -g @anthropic-ai/claude-code安装完成后,在项目目录下运行claude命令即可启动。第一次启动会引导你完成认证配置。这里有个细节:如果你在 Ubuntu 上安装,可能会遇到权限问题,建议用nvm管理 Node 版本,避免sudo npm install带来的权限混乱。
# 安装 nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash # 安装 Node 20 nvm install 20 nvm use 20 # 再安装 Claude Code npm install -g @anthropic-ai/claude-codeCodex 的安装更简单,如果你用的是 VS Code,直接在扩展市场搜索安装即可。Cursor 则是下载安装包,一路下一步。这里重点说 Cursor 的中文设置,因为很多人第一次用会找不到地方:打开 Cursor,按Ctrl+Shift+P(Windows)或Cmd+Shift+P(Mac),输入 “Configure Display Language”,选择 “中文(简体)”,重启后界面就变成中文了。如果你想让 AI 回复也用中文,需要在设置里找到 AI 对话的语言偏好,手动设置为中文。
注意:Cursor 注册时如果遇到手机号填写问题,建议优先使用邮箱注册。国内手机号在部分时段可能收不到验证码,这是实际使用中比较常见的坑。
2.3 环境变量与项目初始化
在开始 Loop Engineering 之前,我建议先建立一个标准的项目结构。以我的“图片元数据整理工具”为例:
project/ ├── src/ │ ├── main.py │ ├── metadata_parser.py │ └── utils.py ├── tests/ │ ├── test_parser.py │ └── test_utils.py ├── docs/ │ └── spec.md ├── .claude/ │ └── config.json └── README.md.claude/config.json是 Claude Code 的项目级配置文件,你可以在这里定义项目级的提示词、忽略规则和执行权限。这个文件在 Loop Engineering 中非常关键,因为它决定了 AI 在循环中能做什么、不能做什么。
{ "projectName": "image-metadata-tool", "allowedCommands": ["python", "pytest", "ls", "cat"], "ignoredPaths": ["node_modules", ".git", "__pycache__"], "maxLoopIterations": 10, "autoTest": true }allowedCommands限制了 AI 可以执行的命令范围,这是安全底线。maxLoopIterations控制单次循环的最大迭代次数,防止无限循环消耗资源。autoTest开启后,每次代码修改都会自动触发测试。
3. Loop Engineering 的核心循环设计
3.1 循环的四个阶段:规划、执行、验证、修正
Loop Engineering 的循环不是简单的“重复”,而是一个有明确阶段划分的结构。我把它拆成四个阶段:
规划阶段:AI 根据任务描述,生成一个步骤列表。这个列表不是随便写的,而是需要包含每一步的输入、输出和验证条件。比如“读取图片 EXIF 数据”这一步,验证条件就是“能正确解析至少三种格式的图片”。
执行阶段:AI 按照步骤列表逐步执行,每一步执行后都会产生一个中间产物。这个阶段的关键是“小步快跑”,每一步只做一件事,做完立刻验证。
验证阶段:用自动化测试或脚本检查执行结果是否符合预期。验证不通过就进入修正阶段,通过则进入下一步。
修正阶段:AI 分析失败原因,调整代码或策略,然后重新执行当前步骤。如果连续多次修正失败,则触发人工介入。
这四个阶段循环往复,直到所有步骤完成。听起来简单,但实际操作中有很多细节需要处理。比如,如何让 AI 在规划阶段就考虑到边界情况?如何设计验证条件才能既严格又不至于误报?这些都需要在实战中不断调整。
3.2 上下文管理:让 AI 不忘事的三个技巧
AI 编程工具最大的痛点就是“上下文窗口有限”。Claude Code 虽然支持较长的上下文,但在一个几十步的任务中,早期的信息仍然会被稀释。我试过几种方法,最后总结出三个最有效的:
第一个技巧是“状态文件”。在项目根目录维护一个STATE.md文件,记录当前进度、已完成步骤、待办事项和已知问题。每次循环开始前,让 AI 先读这个文件;每次循环结束后,让 AI 更新这个文件。这样即使上下文被截断,AI 也能通过状态文件恢复记忆。
第二个技巧是“摘要压缩”。每完成一个阶段,就让 AI 把该阶段的关键信息压缩成一段简短的摘要,存入状态文件。摘要只保留“做了什么、结果如何、有什么遗留问题”,不保留具体代码。这样既能保留关键信息,又不会占用太多上下文。
第三个技巧是“分而治之”。不要把一个大任务一次性丢给 AI,而是拆成多个子任务,每个子任务单独开一个会话。子任务之间通过文件系统传递结果。这样每个会话的上下文都是干净的,AI 的注意力不会被无关信息干扰。
实操心得:状态文件最好用 Markdown 格式,因为 AI 对 Markdown 的结构化信息理解得更好。我试过用 JSON,效果不如 Markdown。
3.3 验证回路的设计:自动化测试是核心
Loop Engineering 能不能跑起来,关键看验证回路是否可靠。如果验证靠人眼看,那循环就断了。所以必须把验证自动化。
对于代码类任务,最直接的验证就是单元测试。我通常会让 AI 在写功能代码之前,先写测试代码。这叫“测试驱动”的循环。具体做法是:
- 让 AI 根据需求描述生成测试用例
- 人工审核测试用例是否覆盖了关键场景
- 让 AI 写功能代码,直到所有测试通过
- 如果测试失败,AI 自动分析失败原因并修正
对于非代码类任务,比如数据处理,验证方式可以是“检查输出文件的行数、字段数、数据类型是否符合预期”。这些都可以用简单的 Python 脚本实现。
# verify_output.py import pandas as pd def verify_metadata_output(filepath): df = pd.read_csv(filepath) assert len(df) > 0, "输出文件为空" assert 'filename' in df.columns, "缺少 filename 字段" assert 'timestamp' in df.columns, "缺少 timestamp 字段" assert df['timestamp'].notna().all(), "timestamp 存在空值" print("验证通过") return True这个脚本可以作为验证回路的一部分,每次 AI 生成输出后自动运行。
3.4 失败重试与回滚:让循环更健壮
循环不可能一次就成功。失败是常态,关键是怎么处理失败。我的策略是“分级重试”:
- 第一级:AI 自动分析错误信息,尝试修正。最多重试 3 次。
- 第二级:如果自动修正失败,AI 回滚到上一个稳定状态,换一种实现方式重试。
- 第三级:如果仍然失败,暂停循环,生成一份“问题报告”,等待人工介入。
回滚机制依赖于版本控制。我强烈建议在循环开始前先git commit一次,这样任何时候都可以git reset --hard回到起点。Claude Code 支持直接执行 git 命令,所以回滚可以完全自动化。
# 在循环开始前打一个快照 git add -A git commit -m "checkpoint: before loop iteration" # 如果失败,回滚 git reset --hard HEAD注意:自动回滚会丢失未提交的修改,所以一定要确保快照是在干净的工作区打的。我踩过一次坑,回滚后发现之前手动改的配置也没了,又得重新配一遍。
4. 项目实战:批量图片元数据整理工具
4.1 需求拆解与任务规划
这个项目的需求很明确:给定一个文件夹,里面有一堆 JPEG 和 PNG 图片,需要提取每张图片的 EXIF 元数据(拍摄时间、相机型号、GPS 坐标等),整理成一个 CSV 文件,并且按照拍摄日期分文件夹归档。
我用 Loop Engineering 的方式,先让 Claude Code 做任务规划。我给它的提示词是这样的:
我需要一个 Python 工具,功能如下: 1. 扫描指定文件夹下的所有 JPEG 和 PNG 图片 2. 提取每张图片的 EXIF 元数据 3. 将元数据整理成 CSV 文件 4. 按照拍摄日期(YYYY-MM)将图片复制到对应的子文件夹 5. 如果图片没有 EXIF 数据,记录到单独的日志文件 请先不要写代码,而是生成一个详细的步骤列表,每一步包含: - 步骤描述 - 输入 - 输出 - 验证条件Claude Code 返回了一个 12 步的计划,从“检查依赖库”到“生成最终报告”。我审核了一遍,发现它漏掉了“处理损坏图片”的情况,于是补充了一条。最终的计划如下:
| 步骤 | 描述 | 验证条件 |
|---|---|---|
| 1 | 检查 Pillow 库是否安装 | import 成功 |
| 2 | 扫描文件夹,收集图片路径 | 路径数量 > 0 |
| 3 | 逐个读取 EXIF 数据 | 至少 80% 图片能读到 |
| 4 | 处理损坏图片 | 不抛出未捕获异常 |
| 5 | 生成 CSV 文件 | 文件存在且行数匹配 |
| 6 | 按日期创建子文件夹 | 文件夹数量 > 0 |
| 7 | 复制图片到对应文件夹 | 复制后文件存在 |
| 8 | 生成日志文件 | 日志内容非空 |
| 9 | 运行单元测试 | 全部通过 |
| 10 | 生成最终报告 | 报告包含统计信息 |
这个计划就是循环的“路线图”。接下来的执行阶段,就是让 AI 按照这个路线图一步步走。
4.2 核心代码的循环生成过程
执行阶段我用了 Claude Code 的“自动执行”模式。具体操作是:把计划文件plan.md放在项目根目录,然后运行:
claude --task "按照 plan.md 执行,每完成一步就运行对应的验证脚本,验证通过后更新 STATE.md"Claude Code 会逐步执行,每完成一步就停下来等验证结果。这里有个细节:我提前写好了每一步的验证脚本,放在tests/目录下,命名规则是test_step_N.py。Claude Code 会自动找到并运行对应的脚本。
以第 3 步“读取 EXIF 数据”为例,AI 生成的代码是这样的:
from PIL import Image from PIL.ExifTags import TAGS def extract_exif(filepath): try: image = Image.open(filepath) exif_data = image._getexif() if not exif_data: return None result = {} for tag_id, value in exif_data.items(): tag_name = TAGS.get(tag_id, tag_id) result[tag_name] = value return result except Exception as e: return {"error": str(e)}验证脚本test_step_3.py会检查返回的字典是否包含DateTime和Model字段。如果缺少,就触发修正循环。
整个执行过程跑了大约 40 分钟,中间触发了 5 次修正循环。其中一次是因为 PNG 图片没有 EXIF 数据,AI 一开始没有处理这种情况,验证失败后自动修正了。另一次是因为日期格式解析错误,AI 把2023:01:15 10:30:00直接当成了字符串,没有转换成2023-01。这些修正都是自动完成的,我只在最后审核了一遍最终代码。
4.3 验证与修正的实战记录
修正循环中最有价值的一次是处理“GPS 坐标解析”。EXIF 中的 GPS 信息是嵌套的字典结构,AI 第一次生成的代码直接把它转成了字符串,导致 CSV 里出现了一堆乱码。验证脚本检查到GPSLatitude字段不是数字类型,触发了修正。
AI 的分析过程是这样的:它先读取了验证脚本的错误信息,然后检查了自己的代码,发现result[tag_name] = value这一行没有对 GPS 字段做特殊处理。接着它搜索了 Pillow 的文档,找到了GPSTAGS的用法,重新生成了代码:
from PIL.ExifTags import GPSTAGS def parse_gps(gps_info): if not gps_info: return None result = {} for key, value in gps_info.items(): name = GPSTAGS.get(key, key) result[name] = value # 转换经纬度为十进制 if 'GPSLatitude' in result and 'GPSLatitudeRef' in result: lat = convert_to_degrees(result['GPSLatitude']) if result['GPSLatitudeRef'] == 'S': lat = -lat result['latitude'] = lat return result这次修正后,验证通过。整个过程 AI 没有问我任何问题,完全自主完成。这就是 Loop Engineering 的威力——你只需要设计好循环,剩下的交给 AI。
4.4 最终产出与效果评估
项目最终产出了一个约 300 行的 Python 工具,包含 4 个模块和 12 个单元测试。我拿一个包含 500 张图片的文件夹做了测试,处理时间约 2 分钟,成功提取了 487 张图片的元数据,13 张损坏图片被正确记录到日志。CSV 文件包含 15 个字段,日期归档文件夹创建了 24 个。
对比我手动写这个工具的时间,大概需要 3-4 小时。用 Loop Engineering 的方式,从规划到完成大约 1.5 小时,其中我实际投入的时间只有 20 分钟左右(审核计划和最终代码)。效率提升是明显的,但更重要的是,这个过程是可复现的。下次遇到类似任务,我可以直接复用这套循环模板。
实操心得:循环跑完后,一定要人工审核一遍关键代码。AI 有时候会写出“能跑但很丑”的代码,比如重复的逻辑、硬编码的路径。这些不影响功能,但影响可维护性。
5. 常见问题与排查技巧实录
5.1 Claude Code 安装与连接问题
问题一:安装后运行claude提示命令不存在。
这通常是 npm 全局路径没有加入 PATH。解决方法:
# 查看 npm 全局路径 npm config get prefix # 把输出路径加入 PATH,比如 export PATH=$PATH:/usr/local/bin如果是 Ubuntu 系统,可能还需要检查~/.bashrc或~/.zshrc是否加载了 nvm。
问题二:Claude Code 启动后无法连接。
先检查网络环境是否正常。如果公司网络有代理限制,需要配置环境变量。但这里不展开代理配置的细节,建议在个人网络环境下使用。
问题三:执行命令时提示权限不足。
Claude Code 默认只允许执行白名单内的命令。如果遇到command not allowed,需要在.claude/config.json的allowedCommands里添加对应命令。我建议只添加必要的命令,不要图省事用*,安全第一。
5.2 Codex 与 Cursor 的配置问题
问题一:Codex 无法加载组织设置。
这个错误通常出现在企业账号环境下。如果你用的是个人账号,可以忽略。如果确实需要组织设置,检查账号是否有对应的权限。
问题二:Cursor 响应速度慢。
Cursor 的响应速度受网络和模型负载影响。我试过几个方法:一是关闭不必要的插件,减少资源占用;二是在设置里把 AI 模型切换到更轻量的版本;三是避免在单个文件过大时使用 AI 对话,先把文件拆小。
问题三:Cursor 中文设置不生效。
Cursor 的语言设置分两部分:界面语言和 AI 回复语言。界面语言通过命令面板设置,AI 回复语言需要在设置里单独配置。如果设置后 AI 仍然回复英文,可以在对话开头加一句“请用中文回复”,这样最直接。
5.3 Loop Engineering 循环中的典型故障
故障一:循环卡死,AI 反复执行同一步骤。
这通常是因为验证条件太严格,AI 怎么改都通不过。解决方法是放宽验证条件,或者把这一步拆成更小的步骤。我遇到过一次,验证脚本要求 CSV 的行数精确等于图片数量,但有一张图片被跳过了,导致永远差一行。后来改成“行数 >= 图片数量 * 0.95”就通过了。
故障二:AI 修改了不该修改的文件。
这是最危险的情况。有一次 AI 在修正代码时,顺手把config.json里的maxLoopIterations从 10 改成了 100,导致循环跑了很久。后来我在配置里加了readonlyPaths,把配置文件设为只读。
故障三:上下文丢失导致 AI 重复劳动。
如果循环跑了很长时间,AI 可能会忘记之前的约定。这时候状态文件就派上用场了。我养成了一个习惯:每完成 5 个步骤,就让 AI 重新读一遍STATE.md,确保它还记得目标。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 命令不存在 | PATH 未配置 | 检查 npm prefix 并加入 PATH |
| 连接失败 | 网络限制 | 检查网络环境 |
| 权限不足 | 命令不在白名单 | 修改 config.json |
| 响应慢 | 模型负载高 | 切换轻量模型或拆分文件 |
| 循环卡死 | 验证条件过严 | 放宽条件或拆分步骤 |
| 文件被误改 | 权限控制不足 | 设置 readonlyPaths |
| 上下文丢失 | 循环过长 | 定期重读状态文件 |
| 中文不生效 | 设置未保存 | 对话中直接要求中文 |
避坑技巧:在循环开始前,先用一个小任务测试整个流程。比如让 AI 写一个“Hello World”并运行测试。这样可以在正式跑大任务之前,确认工具链和配置都是正常的。
6. 循环工程的扩展思路与个人体会
Loop Engineering 这套方法,我用了几个月后,发现它的适用范围远不止代码生成。比如写技术文档,你可以设计一个“大纲—初稿—审核—修订”的循环;做数据分析,可以设计一个“清洗—统计—可视化—报告”的循环。核心逻辑是一样的:把大任务拆成小步骤,每一步都有明确的验证条件,失败就自动修正。
我最近在尝试把循环工程和定时任务结合起来。比如每天早上自动跑一次“检查项目依赖更新”的循环,AI 会检查requirements.txt里的包有没有新版本,如果有就自动升级并跑测试,测试通过就提交。这样我早上到公司,只需要看一眼报告就行。
还有一个扩展方向是“多 AI 协作”。让 Claude Code 负责写代码,让另一个 AI 负责审核代码,两者形成一个对抗循环。审核方专门挑毛病,执行方负责修正。我试过几次,效果比单个 AI 自己检查要好,因为审核方没有“自己写的代码没问题”的偏见。
最后分享一个小技巧:在循环的每个阶段结束时,让 AI 输出一句“当前状态:XXX”。这句话会出现在终端里,你可以随时扫一眼,就知道循环跑到哪了。比翻日志快得多。
这个项目后续还可以这样扩展:把循环工程和 CI/CD 流水线打通,让 AI 在每次代码提交后自动跑一轮“检查—修正—测试”的循环,只有全部通过才允许合并。这样就把 AI 编程从“个人助手”升级成了“团队守门员”。