Loop Engineering 实战:用 opencode-loop 搭一个能自我修正的 AI 开发循环

发布时间:2026/7/30 22:56:09
Loop Engineering 实战:用 opencode-loop 搭一个能自我修正的 AI 开发循环 我用 opencode-loop 跑了一次完整的 Loop Engineering 实践让 AI 自己写代码、自己 Review、自己跑测试。大约十几分钟后测试从 8 个变成 23 个全部通过。这不是魔法关键在 verifier 和 checkpoint。一、手动用 AI 写代码人到哪都是瓶颈过去两年用 AI 写代码的基本流程是你写 prompt → AI 回复 → 你读代码 → 再写 prompt → AI 再回复 → ...人是方向盘每一轮都要在场。问题是这个模式有几个死结写完就忘。Agent 可能一次改十几个文件你不可能每一行都仔细看bug 就藏在没看的那几行里。测试后置。经常是代码写完了才想起来跑测试失败了一堆再回头找效率低。Review 走形式。自己 Review AI 写的代码看多了会疲劳边界条件、类型安全、可访问性这些很容易漏。本质矛盾是人成了瓶颈但完全放手又不敢。2026 年 6 月Google 工程师 Addy Osmani 写了一篇 Loop Engineering把这个问题的解法说得很直接Loop engineering is replacing yourself as the person who prompts the agent. You design the system that does it instead.Peter Steinberger 也说过类似的话You shouldn’t be prompting coding agents anymore. You should be designing loops that prompt your agents.翻译成大白话别再一遍一遍给 AI 写 prompt 了去设计一个能自动循环的系统。二、Loop Engineering 的最小控制环Loop Engineering 不是某个具体工具而是一种设计方法。Addy Osmani 在原文里讲的是 Automations、Worktrees、Skills、Plugins/Connectors、Sub-agents 这些能力层组件。落到一个最小可运行的控制环我更喜欢 Codersarts 的拆法Goal清晰、可衡量的完成标准。Prompter生成下一轮指令。Agent执行指令、产出代码。Reader读取代码 diff、测试输出、日志和进度文件。Verifier独立验证结果是否满足 goal不能信 Agent 自评。Controller决定停止、重试还是升级给人。还有一个贯穿整个循环的要素Addy 叫它State/Memory循环必须有一个对话上下文之外的记忆文件记住完成了什么、下一步做什么因为模型每次都会遗忘。CLAUDE.md、AGENTS.md、progress.md都可以承担这类记忆职责只是粒度不同。Codersarts 在 Loop Engineering Explained 里把这个控制环画成了一个最小骨架for iteration inrange(1, MAX_ITERATIONS 1): passed, output run_tests()# Verifierif passed:# ControllerreturnTrue prompt_agent(output)# Prompter → AgentreturnFalse# 达到上限升级给人注意两个关键点Verifier 必须独立。Agent 自己说我修好了不算数要跑真实的测试。必须设上限。没有MAX_ITERATIONS或预算上限循环会无限烧钱。三、我的实现opencode-loop Editor/Reviewer 双 Agent我选择用 opencode-loop 作为 loop 调度器OpenCode 作为 Agent 运行环境搭了一个 Next.js Todo Web Demo。完整项目已经开源在 Gitee https://gitee.com/chenjim/opencode-loop-engine3.1 Agent 设计在.opencode/agents/下定义了两个 AgenteditorDeepSeek V4 Pro负责实现代码。reviewerKimi K2.7-code只读审查不能改文件、不能跑命令。opencode.json里的核心配置{agent:{editor:{mode:primary,model:opencode-go/deepseek-v4-pro,prompt:{file:.opencode/agents/editor.md}},reviewer:{mode:subagent,model:opencode-go/kimi-k2.7-code,permission:{edit:deny,bash:deny},prompt:{file:.opencode/agents/reviewer.md}}}}Reviewer 的 prompt 强制要求它输出结构化结果## Review Result: PASS / NEEDS_FIX### Issues- ...### Suggestions- ...3.2 Loop 命令启动循环的/loop-goal命令/loop-goal \ --check npm test\ --check npm run lint\ --check npx tsc --noEmit\ --complete-when-checks-pass \ --max-failures 3\ --max-runtime 2h \ --checkpoint-only \ --safe \ --progress-file progress.md \ --prompt-file loop-prompt.md \完成 Next.js Todo Web Demo 的所有 TODO。每次修改后调用 reviewer 审查按反馈修复直到所有检查通过。几个关键参数的作用--checkVerifier每轮后自动跑测试、lint、类型检查。--complete-when-checks-passController所有检查通过就停止。--max-failures 3和--max-runtime 2h安全上限防止无限循环。--checkpoint-only只保存 diff 快照不自动 git commit。--safe阻挡危险命令。--progress-file progress.md外部状态文件Agent 每次读取并更新 TODO。整个流程可以用下面这张图概括3.3 为什么要有 CLAUDE.mdLoop 每次运行都是一次新的对话模型不会记住上一轮的项目约定。如果不在仓库里写清楚Agent 每轮都会重新猜测这个 demo 用不用数据库样式是 Tailwind 还是 inline style哪些命令是 verifier哪些命令绝对不能跑我在项目根目录放了CLAUDE.md把项目定位、技术栈、关键文件、验证命令、Agent 约定、已知问题都写进去。它和AGENTS.md一样本质上都是仓库级记忆文件让 loop 不用每次都从零推导项目上下文。Addy Osmani 把这类文件叫State/MemoryCodersarts 会把它们作为Reader读取的输入。名字不同作用一样把意图写在对话上下文之外落到仓库文件里而不是让 Agent 每次自己猜。四、实战过程从 8 个测试到 23 个测试项目初始骨架已经搭好package.json和测试配置已经提交src/和tests/有基础实现共 8 个测试progress.md里列了 6 个 TODO全部未勾选运行/loop-goal后Agent 的行为如下探索代码库读取progress.md和关键文件。运行初始检查npm test、npm run lint、npx tsc --noEmit8 个测试全过。调用 Reviewer对项目结构、类型、API 路由、前端页面、测试分别审查。按 Review 反馈修复。扩展测试覆盖并重新跑检查。再次 Review处理剩余问题。更新progress.md标记所有 TODO 完成。整个循环跑了大约十几分钟最终结果Test Files 2 passed (2)Tests 23 passed (23)测试从 8 个增加到 23 个全部通过。五、Reviewer 到底发挥了什么作用这次实践里Reviewer 不是摆设。它确实找出了代码里的真实问题修复后代码质量比初始版本高了一档。但 Reviewer 也不是万能。它没发现把eslint-config-next升到 16.2.9 后在当前 FlatCompat 配置下会触发兼容问题。这个坑是在实际跑 lint 时踩到的。这说明Reviewer 自动化测试 两层验证比单层更可靠但都不是 100%。六、踩坑记录6.1 eslint-config-next 版本不兼容Reviewer 建议把eslint-config-next从 15.1.7 升级到 16.2.9与next版本对齐。但升级后FlatCompat 处理新配置时直接崩溃Converting circular structure to JSONAgent 回退到 15.1.7 后 lint 才恢复正常。这个兼容性问题被写进了progress.md的 Known Issues 里。6.2 opencode-loop 是小众社区插件ByBrawe/opencode-loop目前还是小众社区插件没有官方背书文档主要靠 README。但它完整实现了 Loop Engineering 需要的核心能力调度、验证、checkpoint、安全限制。6.3 模型选择有讲究Editor用 deepseek-v4-pro推理和实现能力强适合写代码。Reviewer用 kimi-k2.7-code代码审查细致适合找问题。如果反过来或者两个用同一个模型效果可能会差一些。至少在这次实践里实现模型和审查模型拆开后Reviewer 更容易站在旁观者视角挑问题。6.4 verifier 全绿后人工核验又找出 bug循环跑完、npm test、npm run lint、npx tsc --noEmit全部通过progress.md 也全勾选。我本以为可以收工结果手动拉起来看了一遍页面和 diff又发现几个问题input label 用了display: none屏幕阅读器也会忽略这个 label等于 input 还是没有可访问名称。加载态把整页替换成Loading...骨架结构都没有首屏体验差。tsconfig.json的jsx还是preserveNext.js 16 新编译器下应该配成react-jsx。mutation 没有防重入快速点两次 Delete 会触发并发请求第二个会 404。这些问题都没被自动化 verifier 拦住。测试覆盖的是功能正确性lint 覆盖的是代码风格tsc 覆盖的是类型但可访问性、交互细节、框架版本适配仍然需要人仔细看。七、Loop Engineering 的边界这次实践让我确认了几件事第一Loop 不是全自动魔法。人仍然要定义目标、设计 Agent prompt、配置 verifier、审阅最终的 diff。Loop 只是把重复prompt这部分自动化了。第二Verifier 是底线但不是上限。如果循环只问 Agent你完成了吗它会自信地说完成了然后留下一堆 bug。独立的测试、lint、类型检查是 loop 能信任的底线能拦住功能错误和类型错误。但就像 6.4 里写的那样verifier 全绿之后人工复核仍然可能发现可访问性、交互细节、框架版本适配这类问题。Loop 能替你跑重复验证不能替你负责最终质量。第三理解债务会加速积累。Loop 跑得越快代码库增长越快你越可能不理解自己仓库里的代码。Addy Osmani 管这叫 comprehension debt。解决方案没有捷径定期读 Loop 产出的代码。第四成本必须设上限。--max-runtime、--max-failures、token 预算这些不是可选项。一个无人看管的 loop可以在几小时内烧掉很多钱。适合用 Loop 的场景重复性改造、测试驱动重构、长时编码任务、需要多轮修复的 bug。不适合的场景架构设计、需要深度业务判断的代码、需要创造性 UI/UX 的工作。Loop Engineering 把 AI 编程从人拿着方向盘推进到了人设计导航系统车自己跑。但车最后还是你的路也要你选。这次用一个 Todo Demo 验证了这条路是通的。下一步我会把它用到一个更真实的项目里看看在复杂代码库上Reviewer 还能不能保持同样的命中率。如果你也想试建议从一个小功能开始先把 verifier 写好再让 loop 跑起来。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】