Loop Engineering 实战:实现从日志扫描到预发部署的全自主闭环
从日志扫描到全自主闭环:Loop Engineering如何真正解放开发者
有这么一组数字,值得每个做AI工程化的人仔细琢磨一下——Boris Cherny单日合并150个PR,Peter Steinberger同时跑100个AI Agent持续编码30天。这些惊人的产出背后,其实指向同一个核心:
瓶颈从来不在“写得更快”,而在于你能不能设计出一个自己就能转起来的循环。
不过,能跑的循环不一定是有用的循环。
循环的本质,是生成器接上验证器。
我们团队在维护AI云诊断系统时,把这条路完整走了一遍。先看一组效果数据:
指标 |
Before |
After |
变化 |
| 一周ERROR总量 | 1210条 | 47条 | ↓96% |
| 同类问题修复时间 | 48分钟 | 15分钟 | ↓69% |
| 人工介入次数(到预发) | 每次都要 | 0次 | 全自动 |
表1-1:Before/After效果对比(三项指标分别对应发现速度、修复效率、人工介入三个断裂点)
这些数字来自一条非常具体的日常链路:
一句指令,Agent从3个日志库挖出Bug → 诊断根因 → 生成补丁 → 跑完334条测试 → 提交CR → 预发部署 → 集成验证 → 钉钉通知审批。
这不是什么概念验证,这是我们维护AI云诊断系统的日常。全文会沿着三条主线展开:
- — 跨3个Logstore关联、7子命令 +
日志分析自主挖Bug
git log交叉验证 - — 发现 → 诊断 → 补丁 → 测试 → 预发部署,全程Agent驱动
Bug自主修复闭环
- — 人工一句话触发,或Automation每日自动跑:开发 → 部署 → 测试 → 预发 → 线上对比
一条指令或定时触发跑完全流程
痛点:AI写代码快了,但发现→修复→上线的维护循环仍靠你推
2026年6月第二周,我们一周捞出了
1210条ERROR
真正吃时间的,是上线之后的维护循环:
我们维护的是一套AI驱动的诊断系统——帮用户排查云服务器故障。讽刺的是:
这个系统本身也有一堆线上问题要修。
一轮排查花2-3天,覆盖的不过冰山一角。
图2-1:人工驱动维护循环的瓶颈——任一环节卡住,整条链路停转;人推循环 = 单线程瓶颈
维护循环卡死的三个断裂点:看不见、记不住、没闭环
看不见。
agent_log、mcp_client_log、mcp_server_log),没有人做聚合。某天从50条飙到350条,第二天才有人发现——晚了整整一天。
记不住。
没闭环。
logger.error改成了logger.warning。错误还在,只是不报了。区分「掩盖故障」和「合理降级」需要独立验证,不能靠修复者自证。
根因只有一个:维护链路从没被当成一个需要设计的系统。
演进:从Prompt到Loop,四代AI工程化范式逐层叠加
AI工程化走过了四层楼,像带新人:
第1层:先教说话(Prompt)
第2层:再摆材料(Context)
第3层:再配工具(Harness)
第4层:最后写SOP让他自己转(Loop)
上层包含下层所有能力,每层解锁新瓶颈:
图3-1:四代AI工程化范式演进——选范式前先问:你的任务卡在哪一层瓶颈
Loop在Harness之上补上自动发现、验证、持久化与调度,才能填上三个断裂点:
→ 看不见
→ 记不住
→ 没闭环
原理:Loop是让AI自己发现工作、验证结果并记住经验的系统设计方法
前三层解决「AI能不能做好一件事」,Loop解决「谁来驱动AI持续做事」。
你就是循环里最慢的一环。
Loop和Harness的本质区别:
跨越单次对话的记忆,是「循环」和「一次性操作」的分界线。
Loop靠发现、交付、验证、持久化、调度五个动作才能持续运转
图4-1:Loop五动作闭环——缺验证或调度,循环退化为一次性prompt
发现
交付
验证
持久化
调度
调度是最后一块拼图:
四格检验:不是所有任务都值得建Loop
五个动作描述了Loop
怎么转
该不该建
四格检验:任务会重复、验证能自动化、Token预算可承受、Agent有高级工程师的工具——四格全满才值得建Loop。
六个组件如何拼成一个完整的Loop闭环
Loop要转起来,需要六个配合的零件——Connectors(感知)、Automations(驱动)、Skills(SOP)、Worktrees(隔离)、Sub Agents(裁判)、State(记忆)。它们按依赖顺序拼成闭环:
图4-2:六个组件协作架构——Connectors决定感知上限,State决定复利斜率
五个动作映射到六个组件:发现靠Connectors+Automations,交付靠Skills+Worktrees,验证靠Sub Agents,持久化靠State,调度靠Automations。
实施依赖顺序:
实践:从日志扫描到预发部署,我们如何落地全自主Loop
这不是Demo,而是每天在跑的生产系统。
验证失败时,修复Skill自动进入下一轮
第3轮仍失败则自动停止并推送钉钉工单给Owner
阶段 |
传统方式 |
我们的Loop |
提升 |
发现 |
值班同事第二天看日志 | 5分钟内自动告警+每日全量扫描 | 天级 → 分钟级 |
诊断 |
人工复制日志喂AI,两三天覆盖Top 3-5 | 8阶段结构化诊断,48分钟全部根因定位 | 覆盖率从Top 5 → 全量 |
修复 |
人写补丁、跑测试、提CR | 自动生成补丁 → 跑334个测试 → 提交 | 人工半天 → 自动15分钟 |
验证 |
修复者自己说「好了」 | 6层独立验证,修复者不能给自己打分 | 消灭假修复 |
发布 |
手动部署+人工检查 | 自动部署预发 → 集成测试 → Trace验证 → 钉钉推送 | 全自动到预发 |
沉淀 |
关掉对话就忘了 | 修复方案自动写入知识库,同类问题从48min降到15min | 经验可复用 |
表5-1:传统方式 vs. Loop全流程对比(发现、诊断、修复、验证、发布、沉淀六阶段)
Connectors用MCP打通日志、追踪与发布,让Agent看见线上世界
Connectors排第一,因为Agent默认只能看见本地文件系统。
图5-1:Connectors六层架构——没有跨库trace,Agent只能做单表搜索
9000+行工具链搭了6层连接器(数据访问 → 模型追踪 → 发布 → 通知 → 验证 → 基础设施),让Agent具备完整的线上感知和操作能力。
日志查询是Connectors层最核心的能力。
sls_logquery_tools.py)提供7个子命令,数据分散在3个Logstore中:
Logstore |
记录什么 |
典型字段 |
| agent_log | API入口、Agent路由、Python异常 | request_id, file, level |
| mcp_client_log | MCP工具执行详情、耗时 | request_id, tool_name, duration_ms |
| mcp_server_log | 工具调用链、入参出参 | request_id, response_status |
表5-2:三个Logstore分工
7个子命令对这三个库做到了跨库关联、全链路覆盖和结论可验证——普通做法需要在三个控制台手工对齐request_id,Agent用trace一条命令就能串起完整链路。
真实案例:
trace
一条命令还原30分钟人工排查。
ToolException报错,值班同事在三个控制台间切了30分钟才拼出完整链路。Agent执行:
输出节选:
一条命令看清:
API入口 → Agent路由 → MCP工具超时 → 远端Ja va 855行抛错 → 我方缺fallback。
git log交叉验证,还能区分「新问题」还是「老毛病突然恶化」。
基础设施也是代码管理的。
logtail_config.yaml)、告警规则(alert_config.yaml)、监控大盘(dashboards/*.json)全部声明式管理。Agent发现新错误模式就补充告警规则,新增日志库就更新采集配置。
教训:工具链建设约占30%总工作量。
Automations用定时巡检与实时告警让系统自己发现异常
Automations解决痛点章「看不见」:
图5-2:Automations两层发现——巡检抓慢性问题,告警抓突发问题
两层协作:第一层每日cron全量巡检,系统自己扫、自己写报告、自己归档;第二层实时告警每5分钟扫一轮,命中后钉钉群推送卡片(内嵌Langfuse Trace链接),严重故障自动触发语音电话。
Skills把诊断、修复、发布三段经验固化成可复用的SOP
Skills解决痛点章「记不住」:
图5-3:三个Skill流水线——Skill是SOP磁盘化,不是更长prompt
Skill |
做什么 |
规模 |
关键设计 |
诊断(diagnose) |
8阶段结构化诊断 | 760行SKILL.md | 每个结论必须标注证据来源 |
修复(auto-fix) |
解析报告→查知识库→生成补丁→跑测试→提交 | 6步流程 | 先查历史方案,最多3轮 |
发布验证(deploy-and-verify) |
安全校验→CR→Pipeline→预发→集成测试→Trace验证→线上对比 |
11步,400行 | 独立Agent复查 |
表5-3:三个核心Skill概览
诊断Skill用8个Phase和git log交叉验证,堵住Agent偷工减料
这份SKILL.md不是prompt,而是一份严格的操作手册
Phase |
做什么 |
为什么不能跳 |
关键工具 |
| 0 澄清 | 确认时间范围、分析模式 | 不确认就会分析错误时间段 | 对话 |
| 1 全景扫描 | 跨3个日志库统计错误分布 | 不扫全景就会遗漏类别 | raw-query+diagnose |
| 2 时间趋势 | 识别突增/慢性/回归模式 | 不看趋势就分不清新旧 | error-trend+git log |
| 3 错误详情 | 完整traceback+输入参数 | 截断traceback就定位不了 | error-lookup |
| 4 Trace追踪 | 模型调用链、token、fallback | 不查Trace就不知道哪步失败 | Langfuse MCP |
| 5 代码定位 | 精确到file:line+Owner | 不定位就没法修 | Read+git log |
| 6 根因分析 | 6类分类+证据链推理 | 没证据链就是猜 | 交叉验证 |
| 7 修复建议 | 短期止血+长期根治 | 没建议就等于没诊断 | — |
表5-4:诊断Skill八个Phase设计逻辑
Phase 2的精华:
Phase 6的精华:
[事实]→[推理]→[结论]格式输出:
根因分类 |
修复方向 |
示例 |
| 外部系统异常 | 防御式:try-except+fallback+retry | MCP工具返回Ja va stackTrace |
| 内部代码缺陷 | 精确修改file:line | TypeError在src/deep_diagnose/ |
| 基础设施问题 | 配置调整 | 连接池pool_size=5 |
| LLM/模型异常 | Prompt约束+schema校验 | 幻觉编造不存在的表名 |
| 预期行为(误报) | 确认后降级日志级别 | CancelledError |
| 数据问题 | 不修,转工单给Owner |
用户数据异常 |
表5-5:六种根因分类与修复方向
修复Skill用6步把诊断报告自动变成可合并的补丁
诊断报告就是接口——修复Skill读取结构化报告后自动接管,人不需要在中间传话。
Step 2先查知识库再动手修
分类 |
修复模式 |
示例 |
| 外部系统 | try-except+fallback+retry | ToolException→降级处理返回空结果 |
| 内部缺陷 | 精确修改file:line | chat/repository.py:45→修改连接池配置 |
| 用户输入 | 添加参数校验 | ODPS查询前验证表名存在 |
| 基础设施 | 配置调整 | 连接池pool_size=5, max_overflow=10 |
| 预期行为 | 日志级别调整 | logger.error→logger.warning |
表5-6:按根因分类选择修复模式(侧重具体改法,分类见表5-5)
修复原则:
最多3轮
发布 Skill用11步串起预发部署、Trace验证与独立复查
到预发全自动,生产发布是唯一需要人确认的环节。
步骤 |
做什么 |
关键约束 |
| 0 安全校验 | 确认是正确的仓库和应用 | 仓库+App ID必须匹配,否则立即停止 |
| 1 自动提交 | 创建feature分支+推送 | 禁止直推master/develop |
| 2 CR+Reviewer | 创建Code Review+指定审查人 | MR目标必须是develop分支 |
| 3 提交Pipeline | 触发预发部署流水线 | Pipeline 423(预发) |
| 4 预发功能验证 | 针对本次修改的集成测试(自主回归 |
必须指定skill_names聚焦测试 |
| 5 Langfuse Trace验证 | 0 ERROR+正确模型+token < 150K | 不允许非预期fallback |
| 6 预发诊断复查 | 调用诊断Skill扫描预发环境 |
部署后不能有新增ERROR类型 |
| 7 线上对比 | Langfuse Trace对比预发vs线上 |
行为偏差则阻塞发布 |
| 8 产出测试报告 | 写入docs/reports/ | 结构化Markdown |
| 9 钉钉通知 | 推送审批卡片 | 包含业务价值+MR链接+报告链接 |
| 10 输出总结 | 全流程状态汇总 | ✅/❌/⏭️ |
表5-7:发布Skill十一步流程
三个最易踩坑的步骤:
Step 0安全校验
Step 4集成测试——必须聚焦。
skill_names,否则系统加载全量工具集,测试不聚焦:
Step 5–7构成自主回归三层验证
任一偏差则阻塞发布,回到修复Skill第2轮。
检查项 |
通过标准 |
为什么 |
| ERROR observations | 必须为0 | 任何ERROR说明有未处理异常 |
| 主模型 | 与请求一致,无非预期fallback | fallback说明首选模型有问题 |
| max input_tokens | < 150K | 超过说明context窗口快溢出 |
| Agent finished | True | False说明Agent中途崩溃 |
表5-8:Langfuse Trace四项硬指标(ERROR、主模型、token上限、Agent完成状态)
Step 9钉钉通知
Worktrees为每个Bug开独立工作区,让多类错误并行修复互不覆盖
Worktrees解决并行覆盖:
图5-4:Git Worktree并行修复——三类问题串行45分钟 vs 并行17分钟
诊断一次扫出多类错误,每类问题需要独立修复。早期三个Agent在同一工作区同时改代码,后提交的覆盖前者修复,冲突率约30%。
Git Worktree是解法:
.git历史但工作区物理隔离:
一个Agent在../fix-timeout改连接池配置,另一个在../fix-hallucination加schema校验——互不干扰。每个分支独立走完
修复 → 测试 → CR → Pipeline → 验证
分支命名约定:
fix/<问题描述>_<日期>_<序号>。三个Worktree各自完成验证后,按修复优先级依次合入develop。若两分支改同一文件,第二个合并前rebase并重新跑测试——比同一工作区互相覆盖可控得多。大部分修复涉及不同文件,冲突率不到5%。
并行加速:
git worktree add setup成本不到1秒。
Sub Agents用六层独立验证确保修复者不能给自己打分
Sub Agents解决痛点章「没闭环」:
图5-5:六层独立验证——第3层专抓日志降级类假修复
层 |
评判手段 |
通过标准 |
能抓什么 |
典型盲点 |
| 1 | Lint | 零warning | 格式/语法 | 逻辑与行为 |
| 2 | 单元测试 | 全量单测通过 | 逻辑回归 | 日志降级类假修复 |
| 3 | 预发日志 | 无新增 |
部署引入的新ERROR | — |
| 4 | 线上对比 | 预发与线上一致 | 行为偏差 | — |
| 5 | 集成测试 | 修改部分全过 | 端到端链路 | — |
| 6 | UI验证 | 页面行为正常 | 前端渲染 | — |
表5-9:六层独立验证体系(含各层能抓/抓不住)
只靠单元测试,痛点章那次logger.error → logger.warning的假修复完全能过。
第3层独立诊断复查专抓这类问题:
验证通过后自动推送钉钉审批卡片——包含业务价值描述、MR链接、测试报告、Langfuse Trace链接:
图5-6:验证通过后的钉钉审批卡片——须让Reviewer 5秒内判断merge风险
6层验证解决「当次修复是否可信」;State解决「下次遇到同类问题是否更快」。
State把修复方案与巡检结果落盘,让同类问题越修越快
State解决痛点章「记不住」:
六个组件串成端到端流水线:验证失败自动重试,三轮不过升级人工
六个组件拼成一条完整链路:触发 → 感知 → 诊断 → 修复 → 验证 → 发布 → 沉淀。
图5-7:端到端Loop闭环——3轮失败升级人工,避免0.95^N在错误方向空转
修复Skill最多3轮自动重试;超过3轮停止并推送钉钉工单给Owner。成功后修复方案写入知识库(State),监控策略同步更新(Automations反哺),下次遇到同类问题直接复用。
回顾整条链路——Connectors让Agent看见线上世界,Automations让发现不再依赖人,Skills把经验固化为可复用的SOP,Worktrees让多类问题并行不冲突,Sub Agents确保修复者不能自证,State让同类问题越修越快。六个组件各司其职,拼出了从发现到预发全程48分钟、0人工介入的完整闭环。系统跑通了——但更值得思考的问题是:当维护循环不再需要人来推,工程师的角色发生了什么变化?
范式迁移:未来已来,工程师的角色正从「推循环的人」变成「设计循环的人」
未来不是远景,而是正在发生的事。
图6-1:Loop规模化——从一个人推一个系统,到一个人设计多个系统的自主循环
范式迁移的核心变化不是工具,而是人的角色。
循环设计师
我们已经在这条路上走出了第一步。
踩过的坑:四条血泪教训
!
教训一:连续两周不看diff就合并。
retry=3改成了retry=0,导致线上超时率翻倍。对策:每周至少抽查3个diff。
!
教训二:验证器覆盖不全 = 假安全感。
logger.error→warning假修复就是因为第3层预发日志验证还没上线。对策:至少3层验证才能自动合并。
!
教训三:Token成本失控。
对策:分级策略+预算熔断。
!
教训四:Connectors建设被低估。
对策:先花两周打好Connectors地基,再建上层。
给读者的行动清单
如果你想把Loop应用到自己的项目,按这个顺序走:
周 |
做什么 |
产出 |
验收标准 |
| 1 | 四格检验+选场景 | 一张四格表+一个确定的目标场景 | 四格全满 |
| 2-3 | 建Connectors(接日志/监控/发布) | Agent能查日志、能触发发布 | 一条命令跑通全链路 |
| 4 | 写第一个Skill+加定时调度 | 每天自动跑一轮Loop | 连续3天无人值守运转 |
表6-2:四周落地计划
结语:工程师的价值正从写Prompt转向设计能自己转的循环
Loop Engineering不是一种产品,而是一种工程思维——不再问「这条prompt怎么写更好」,而是问「这个循环能不能自己转」。
2025年我们以为AI解决的是「写代码慢」;一年后发现,
真正的瓶颈是维护循环仍靠人在推。