[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"post-v2-\u002Fblog\u002Fmulti-agent-100-deploys":3},{"id":4,"title":5,"body":6,"date":656,"description":657,"draft":658,"extension":659,"meta":660,"navigation":662,"path":663,"seo":664,"stem":665,"tags":666,"__hash__":673},"blog\u002Fblog\u002Fmulti-agent-100-deploys.md","Multi-Agent 翻车实录：v4→v5→v4 的 100 次部署",{"type":7,"value":8,"toc":639},"minimark",[9,13,20,23,26,31,34,179,182,185,188,190,194,197,226,229,231,235,238,241,246,249,354,360,366,369,371,375,378,389,392,395,398,404,406,410,413,416,422,425,427,431,434,539,541,545,550,553,559,563,569,572,575,579,582,585,592,596,599,609,611,615,618,623,626,633,636],[10,11,5],"h1",{"id":12},"multi-agent-翻车实录v4v5v4-的-100-次部署",[14,15,16],"blockquote",{},[17,18,19],"p",{},"TL;DR — 用了 9 个 AI Agent、100+ 个 Kanban 任务、5 版设计稿、无数次部署，最后回到最初的版本。总\"净产出\"为零，但学到了所有东西。",[17,21,22],{},"这不是成功故事。这是一份诚实的翻车实录。",[24,25],"hr",{},[27,28,30],"h2",{"id":29},"一系统架构谁在干什么","一、系统架构：谁在干什么",[17,32,33],{},"在开始之前，先介绍一下这支\"AI 工程团队\"的成员：",[35,36,37,56],"table",{},[38,39,40],"thead",{},[41,42,43,47,50,53],"tr",{},[44,45,46],"th",{},"角色",[44,48,49],{},"Profile",[44,51,52],{},"职责",[44,54,55],{},"模型",[57,58,59,74,88,101,114,127,140,153,166],"tbody",{},[41,60,61,65,68,71],{},[62,63,64],"td",{},"项目经理",[62,66,67],{},"Manager",[62,69,70],{},"拆需求、分配任务、跟踪进度",[62,72,73],{},"DeepSeek",[41,75,76,79,82,85],{},[62,77,78],{},"设计师",[62,80,81],{},"Designer",[62,83,84],{},"出效果图、UI 差异分析",[62,86,87],{},"MiniMax",[41,89,90,93,96,99],{},[62,91,92],{},"架构师",[62,94,95],{},"Architect",[62,97,98],{},"技术选型、系统设计",[62,100,87],{},[41,102,103,106,109,112],{},[62,104,105],{},"开发者",[62,107,108],{},"Coder",[62,110,111],{},"写代码",[62,113,87],{},[41,115,116,119,122,125],{},[62,117,118],{},"全栈",[62,120,121],{},"FullStack",[62,123,124],{},"前后端串的功能",[62,126,87],{},[41,128,129,132,135,138],{},[62,130,131],{},"审查者",[62,133,134],{},"Reviewer",[62,136,137],{},"代码审查",[62,139,87],{},[41,141,142,145,148,151],{},[62,143,144],{},"测试者",[62,146,147],{},"Tester",[62,149,150],{},"质量扫描+自动化测试",[62,152,87],{},[41,154,155,158,161,164],{},[62,156,157],{},"运维",[62,159,160],{},"Ops",[62,162,163],{},"SSH 部署、预览上线",[62,165,87],{},[41,167,168,171,174,177],{},[62,169,170],{},"主审查",[62,172,173],{},"Default",[62,175,176],{},"部署后线上验证",[62,178,73],{},[17,180,181],{},"它们通过一个 SQLite 的 Kanban 系统协作。Manager 创建任务，Dispatcher 自动调度，Worker 抢任务干活。完成后产出交给下一个 Worker。",[17,183,184],{},"理论上，这是一条完美的流水线。",[17,186,187],{},"实际上……",[24,189],{},[27,191,193],{"id":192},"二v4来之不易的稳定版本","二、v4：来之不易的稳定版本",[17,195,196],{},"首页经历了三轮迭代才到达 v4：",[198,199,200,208,214,220],"ul",{},[201,202,203,207],"li",{},[204,205,206],"strong",{},"v1","：Designer 独立设计，赛博朋克风格，Three.js 3D 球体 + 粒子背景",[201,209,210,213],{},[204,211,212],{},"v2","：用户说\"太花哨了\"，Designer 精简",[201,215,216,219],{},[204,217,218],{},"v3","：用户说\"还是不够\"，继续调",[201,221,222,225],{},[204,223,224],{},"v4","：终于确认——IcosahedronGeometry 球体 + 双环面 + 900 粒子 + Canvas 神经网络背景",[17,227,228],{},"v4 是经过用户反复确认的版本。但 Designer 没有停——它在空闲时段继续迭代。",[24,230],{},[27,232,234],{"id":233},"三v5ai-自主优化的产物","三、v5：AI 自主优化的产物",[17,236,237],{},"在一个没有用户指令的空闲时段，Designer 产出了 v5 设计稿。",[17,239,240],{},"它的\"优化\"逻辑是：",[14,242,243],{},[17,244,245],{},"\"赛博朋克风格已经过时了。简约克制的设计更符合现代审美。减少视觉噪音，让内容说话。\"",[17,247,248],{},"它做了以下改动：",[35,250,251,264],{},[38,252,253],{},[41,254,255,258,261],{},[44,256,257],{},"维度",[44,259,260],{},"v4（赛博朋克）",[44,262,263],{},"v5（精简克制）",[57,265,266,277,288,299,310,321,332,343],{},[41,267,268,271,274],{},[62,269,270],{},"球体",[62,272,273],{},"IcosahedronGeometry",[62,275,276],{},"简化 SphereGeometry",[41,278,279,282,285],{},[62,280,281],{},"环面",[62,283,284],{},"双环面",[62,286,287],{},"移除",[41,289,290,293,296],{},[62,291,292],{},"粒子",[62,294,295],{},"900 个 + Canvas 纹理",[62,297,298],{},"300 个纯色",[41,300,301,304,307],{},[62,302,303],{},"背景",[62,305,306],{},"深色渐变 + 神经网络",[62,308,309],{},"纯色 #020617",[41,311,312,315,318],{},[62,313,314],{},"导航栏",[62,316,317],{},"毛玻璃半透明",[62,319,320],{},"完全不透明",[41,322,323,326,329],{},[62,324,325],{},"按钮",[62,327,328],{},"赛博朋克边框发光",[62,330,331],{},"扁平圆角",[41,333,334,337,340],{},[62,335,336],{},"字体",[62,338,339],{},"Google Fonts (Orbitron)",[62,341,342],{},"系统字体栈",[41,344,345,348,351],{},[62,346,347],{},"配色",[62,349,350],{},"多种霓虹色",[62,352,353],{},"单一 #22d3ee",[17,355,356,359],{},[204,357,358],{},"纯从设计角度看，v5 确实\"更好\"","——更可读、更符合现代设计系统、加载更快。",[17,361,362,363],{},"但问题是：",[204,364,365],{},"用户要的不是\"更好\"，要的是 v4 的风格。",[17,367,368],{},"Designer 没有区分\"设计优化\"和\"风格变更\"——它把两者当成了同一件事。",[24,370],{},[27,372,374],{"id":373},"四v5-上线后","四、v5 上线后",[17,376,377],{},"Manager 启动了全自动部署流水线：",[379,380,385],"pre",{"className":381,"code":383,"language":384},[382],"language-text","Designer 出 v5 效果图\n  → Coder 实现\n    → Reviewer 审查\n      → Git 提交\n        → Tester 测试\n          → Ops 部署到预览\n            → Agent Review 验证\n              → Ops 上线生产\n","text",[386,387,383],"code",{"__ignoreMap":388},"",[17,390,391],{},"全自动，45 分钟内完成。QQ Bot 在每个阶段完成后推送通知。",[17,393,394],{},"我打开网站的时候，第一反应是：「这谁给我换了？」",[17,396,397],{},"不是在说\"不好看\"——是在说\"不是我确认的版本\"。",[17,399,400,401],{},"但此时，管道已经走完了。6 个 Worker 都完成了自己的任务，全部 APPROVE。",[204,402,403],{},"从流程上看，\"一切正常\"。",[24,405],{},[27,407,409],{"id":408},"五v5v4回退之路","五、v5→v4：回退之路",[17,411,412],{},"我创建了回退需求：「首页换用 v4 设计稿。」",[17,414,415],{},"Manager 理解了——它不是简单地\"回到之前的代码提交\"，因为 Git 历史里已经混入了其他改动。最干净的方案是：让 Designer 对比 v5 和 v4，产出差异清单，然后 Coder 修改。",[379,417,420],{"className":418,"code":419,"language":384},[382],"Manager 创建子任务 →\n  Designer 对比差异（t_0e4bb28d）\n    → 产出 26 项差异清单\n      → Coder 修复 20 项 P0+P1\n        → Reviewer 审查\n          → Git 提交\n            → Tester 测试\n              → Ops 部署\n                → 容器 OOM 💥\n",[386,421,419],{"__ignoreMap":388},[17,423,424],{},"然后就是上一篇文章里讲的故事——容器 OOM，网站挂了 55 分钟。",[24,426],{},[27,428,430],{"id":429},"六数字说话100-次部署的真相","六、数字说话：100+ 次部署的真相",[17,432,433],{},"在 v4→v5→v4 的整个过程中，Kanban 系统创建了超过 100 个任务。平均每次\"改动\"实际上经历了 6-12 个 Worker 任务。",[35,435,436,449],{},[38,437,438],{},[41,439,440,443,446],{},[44,441,442],{},"阶段",[44,444,445],{},"任务数",[44,447,448],{},"工人",[57,450,451,462,473,484,495,505,515,525],{},[41,452,453,456,459],{},[62,454,455],{},"v4 最终确认（Designer 迭代）",[62,457,458],{},"~20 个",[62,460,461],{},"Designer × 3",[41,463,464,467,470],{},[62,465,466],{},"v5 设计",[62,468,469],{},"~10 个",[62,471,472],{},"Designer × 2",[41,474,475,478,481],{},[62,476,477],{},"v5 实现上线",[62,479,480],{},"~30 个",[62,482,483],{},"Coder + Reviewer + Tester + Ops",[41,485,486,489,492],{},[62,487,488],{},"admin 侧边栏修复",[62,490,491],{},"~15 个",[62,493,494],{},"Architect + Coder + Reviewer + Ops",[41,496,497,500,502],{},[62,498,499],{},"三项视觉修复",[62,501,458],{},[62,503,504],{},"Designer + Coder + Ops + Review",[41,506,507,510,512],{},[62,508,509],{},"v5→v4 回退（含 OOM）",[62,511,480],{},[62,513,514],{},"Designer + Coder + Reviewer + Tester + Ops + Review",[41,516,517,520,522],{},[62,518,519],{},"blog 页对齐",[62,521,491],{},[62,523,524],{},"Designer + Coder + Reviewer + Ops",[41,526,527,532,537],{},[62,528,529],{},[204,530,531],{},"合计",[62,533,534],{},[204,535,536],{},"~140 个",[62,538],{},[24,540],{},[27,542,544],{"id":543},"七我学到的","七、我学到的",[546,547,549],"h3",{"id":548},"_1-ai-designer-需要视觉锚点","1. AI Designer 需要\"视觉锚点\"",[17,551,552],{},"v4 被确认后，它的效果图应该成为\"不可变更的锚点\"。任何后续优化都必须在保持视觉一致性的前提下进行。但 Designer 没有这个约束——它在每次迭代中都可能\"重新诠释\"风格。",[17,554,555,558],{},[204,556,557],{},"解决办法","：在 Manager 工作流中加入\"设计基线检查\"——Coder 实现后，Designer 验证实现是否与设计稿一致（这是我们后来加的）。",[546,560,562],{"id":561},"_2-管道太长问题放大","2. 管道太长，问题放大",[379,564,567],{"className":565,"code":566,"language":384},[382],"Designer → Coder → Reviewer → Git → Tester → Ops → AgentReview\n",[386,568,566],{"__ignoreMap":388},[17,570,571],{},"7 个阶段。每个阶段 5-30 分钟。管道越长，发现问题的时机越晚。",[17,573,574],{},"v5 的\"风格漂移\"在 Designer 阶段就发生了，但直到 Ops 部署后才能被用户看到——中间跨越了 Coder、Reviewer、Tester 三个阶段，它们都\"通过\"了——因为它们审查的是代码质量，不是设计意图。",[546,576,578],{"id":577},"_3-worker-之间的幻觉放大","3. Worker 之间的\"幻觉放大\"",[17,580,581],{},"Designer 说\"这 26 项差异需要修\"。\nCoder 修了 20 项（P0+P1）。\nReviewer 审查说\"代码 OK\"。\nTester 测试说\"功能 OK\"。",[17,583,584],{},"但没有人问：\"v4 和 v5 的差异真的需要全部回到 v4 吗？v5 的一些改进（系统字体栈、纯色背景）是否应该保留？\"",[17,586,587,588,591],{},"每个 Worker 只完成自己被分配的任务，",[204,589,590],{},"没有人做\"整体决策\"。"," 这就是 Multi-Agent 系统当前的盲区。",[546,593,595],{"id":594},"_4-人有最终决策权但需要及时看到","4. 人有最终决策权，但需要及时看到",[17,597,598],{},"如果用户在 Designer 阶段就看到 v5 效果图，根本不会有后续的 95 个任务。但我没有在那个时候介入——因为我忙别的事情去了。",[17,600,601,604,605,608],{},[204,602,603],{},"教训","：在任何 UI 变更进入开发之前，",[204,606,607],{},"强制","预览展示给用户确认。不要假设用户\"随时在看\"。",[24,610],{},[27,612,614],{"id":613},"八结语","八、结语",[17,616,617],{},"这次\"翻车\"让我重新思考了一个问题：",[14,619,620],{},[17,621,622],{},"Multi-Agent 系统到底应该像一个\"团队\"还是像一个\"自动化流水线\"？",[17,624,625],{},"如果是流水线，那 140 个任务中真正有价值的可能只有 20 个——其余 120 个是在一条错误的路径上越走越远。",[17,627,628,629,632],{},"如果是团队，那它缺少一个关键角色——",[204,630,631],{},"产品经理","。一个会在 v5 设计出来后说\"等等，用户确认了吗？\"的人。",[17,634,635],{},"后来我把 ProductManager 加入了系统。下一次的 v4→v5→v4 循环，可能不会被触发。",[17,637,638],{},"也可能触发——但至少会有个 PM 先拦住我。",{"title":388,"searchDepth":640,"depth":640,"links":641},2,[642,643,644,645,646,647,648,655],{"id":29,"depth":640,"text":30},{"id":192,"depth":640,"text":193},{"id":233,"depth":640,"text":234},{"id":373,"depth":640,"text":374},{"id":408,"depth":640,"text":409},{"id":429,"depth":640,"text":430},{"id":543,"depth":640,"text":544,"children":649},[650,652,653,654],{"id":548,"depth":651,"text":549},3,{"id":561,"depth":651,"text":562},{"id":577,"depth":651,"text":578},{"id":594,"depth":651,"text":595},{"id":613,"depth":640,"text":614},"2026-06-02","我让 9 个 AI Agent 协作部署一个网站。它们创建了 100+ 个 Kanban 任务，迭代了 5 版设计稿，部署了无数次，最后回到了最初的版本。这是一份诚实的翻车实录。",false,"md",{"author":661},"陈德立",true,"\u002Fblog\u002Fmulti-agent-100-deploys",{"title":5,"description":657},"blog\u002Fmulti-agent-100-deploys",[667,668,669,670,671,672],"ai-agent","multi-agent","kanban","workflow","software-engineering","hermes","1M-7UpM_YEclX47W1uTGCn3rnTldy4B7oT7cKUOH6F4"]