|
| 1 | +# AI Agent 都会写代码了,为什么我还得像监工一样盯着它? |
| 2 | + |
| 3 | +> 发布渠道:掘金 |
| 4 | +> |
| 5 | +> 文章目标:围绕 `Supervisor` 建立“AI 驱动 AI、目标驱动自动推进”的认知,并带动 `GitHub Star / 安装试用` |
| 6 | +
|
| 7 | +## 摘要 |
| 8 | + |
| 9 | +AI 编程越来越强,但很多长任务里,开发者反而更像个监工:AI 改一会儿 `CR` 就回来问要不要继续,补一半单测就停住,睡前挂的任务醒来只做完 `task 1`。我后来发现,问题不只是模型能力,而是缺一个能围绕目标持续推进的 `Supervisor`。它不是简单地“盯任务”,而是你先设定目标,再让 AI 去驱动 AI,让执行中的 Agent 持续朝目标推进,把中间那段最像“监工”的过程自动化掉。 |
| 10 | + |
| 11 | +## 正文 |
| 12 | + |
| 13 | +最近我越来越常遇到一种很烦的场景。 |
| 14 | + |
| 15 | +我让 AI 去改一轮 `CR`、补一组单测,或者顺手把下一个功能做掉。 |
| 16 | + |
| 17 | +本来以为终于能放手十几分钟,结果它干一会儿就回来问我一句:`要不要继续?` |
| 18 | + |
| 19 | +比如我让 AI 去改一轮 `CR`。需求其实很明确:把 review 里提到的几个问题改掉,顺手清理一下重复逻辑,补上缺的单测,最后跑一遍测试,确认这轮改动可以收口。 |
| 20 | + |
| 21 | +按理说,这已经是很适合交给 AI 的活了。 |
| 22 | + |
| 23 | +结果没过一会儿,它来一句: |
| 24 | + |
| 25 | +“已经处理了 4 条 review comment,剩下 2 条涉及状态流转调整和命名统一,要不要继续?” |
| 26 | + |
| 27 | +你看着这句话,第一反应通常不是“挺智能”,而是烦。 |
| 28 | + |
| 29 | +因为这说明它不是在替你把事情做完,它只是做了一段,然后停下来,把球踢回给你。你只能回一句:继续。 |
| 30 | + |
| 31 | +过几分钟,它又来了: |
| 32 | + |
| 33 | +“我已经把重复逻辑抽出来了,下一步建议把相关单测补上,要不要继续?” |
| 34 | + |
| 35 | +你再回:继续。 |
| 36 | + |
| 37 | +再过一会儿,它又停住: |
| 38 | + |
| 39 | +“单测已经补了 3 个 case,还有 2 个边界场景需要处理,是否继续?” |
| 40 | + |
| 41 | +你还是得回:继续。 |
| 42 | + |
| 43 | +最烦的不是它不会做。 |
| 44 | + |
| 45 | +最烦的是,它明明已经知道目标,也大致知道下一步该干什么,却还是总在半路回来问你一句。 |
| 46 | + |
| 47 | +这种感觉在补单测的时候尤其明显。你让它给一个 service 或 hook 把测试补齐。它会分析逻辑、建测试文件、写几个 happy path、顺手跑一下测试。看起来一切都很顺,结果很快又停下来: |
| 48 | + |
| 49 | +“基础场景已补完,异常分支和空数据分支还没覆盖,下一步建议继续补齐,要不要继续?” |
| 50 | + |
| 51 | +看到这种话,人是真的会有一种被绑在电脑前的感觉。 |
| 52 | + |
| 53 | +因为这些根本不是必须由你拍板的大决策。很多时候,无非就是继续做,把这一轮事情做完整,把该补的补完,把该跑的跑完,把该收的尾收掉。 |
| 54 | + |
| 55 | +但它偏偏不一口气往下推。 |
| 56 | + |
| 57 | +更让人破防的是那种“睡前交任务,醒来只做了 task 1”的场景。 |
| 58 | + |
| 59 | +比如你让它做一个下一个功能: |
| 60 | + |
| 61 | +“把这个设置页的筛选功能做掉,包含前端交互、接口调用和基础测试,最后整理到可提交状态。” |
| 62 | + |
| 63 | +它先给你写了一个像模像样的 plan: |
| 64 | + |
| 65 | +- task 1:搭筛选面板 UI |
| 66 | +- task 2:接接口和状态管理 |
| 67 | +- task 3:补测试并收尾验证 |
| 68 | + |
| 69 | +你看着这份 plan,会很自然地觉得:行,这次应该能自己一路做下去了。甚至你会想,今晚睡前把任务挂着,说不定明天醒来这个功能就差不多了。 |
| 70 | + |
| 71 | +结果第二天一看,现实经常是: |
| 72 | + |
| 73 | +它只做了 task 1。 |
| 74 | + |
| 75 | +UI 确实搭出来了,按钮也有了,交互壳子也在。然后它停住了。最后留给你一句特别客气的话: |
| 76 | + |
| 77 | +“task 1 已完成。下一步建议开始接接口和状态管理,请确认是否继续。” |
| 78 | + |
| 79 | +那一瞬间真的很容易烦。 |
| 80 | + |
| 81 | +因为你期待的是:既然目标已经说清楚了,那就继续往下做。UI 搭完就接接口,接口接完就补测试,测试跑完再检查一遍改动,有问题继续修,没问题就收尾。 |
| 82 | + |
| 83 | +结果它不是没干活。 |
| 84 | + |
| 85 | +它干了,但只干了一小段。然后停在那里,等你下一句。 |
| 86 | + |
| 87 | +于是最尴尬的事情就发生了:AI 已经开始帮你改 `CR`、补单测、做功能了,但你反而更离不开电脑了。 |
| 88 | + |
| 89 | +以前自己写代码,累归累,至少节奏在自己手里。你知道下一步该改哪、查哪、跑哪,想一口气做完就做完,想停下来休息也能停。 |
| 90 | + |
| 91 | +现在换成 Agent 之后,很多时候你进入的是另一种累法。 |
| 92 | + |
| 93 | +你不是全程亲手干活,但你得全程待命。 |
| 94 | + |
| 95 | +去接杯水,不踏实。去吃个饭,不踏实。回个消息,不踏实。晚上想把任务挂着睡觉,也不踏实。 |
| 96 | + |
| 97 | +因为你知道它大概率不会一路做到底。它很可能改完一半 `CR` 回来问你,补完一半单测回来问你,做完功能的 task 1 又回来等你确认 task 2。 |
| 98 | + |
| 99 | +你表面上像是把任务交给了 AI,实际上你根本走不开。 |
| 100 | + |
| 101 | +你不是在“让 AI 干活”,你是在电脑前陪 AI 干活。 |
| 102 | + |
| 103 | +这才是现在很多 AI 编程体验里最消耗人的地方。 |
| 104 | + |
| 105 | +不是 AI 完全不会做,而是它太容易在半路把你叫回来。你以为自己获得了一个 Agent,最后却越来越像一个监工:盯进度、补指令、做确认、催下一步。 |
| 106 | + |
| 107 | +真正烦人的,不是写代码本身。 |
| 108 | + |
| 109 | +而是你明明已经把目标交代清楚了,却还是得守在电脑前,等 AI 一次次来问你: |
| 110 | + |
| 111 | +“下一步呢?” |
| 112 | + |
| 113 | + |
| 114 | + |
| 115 | +*图:真实承载场景不是一个聊天框,而是 Agent、文件、Git、终端和 Supervisor 同处一个工作台。* |
| 116 | + |
| 117 | +## 我后来意识到,我缺的不是一个更会聊天的 AI |
| 118 | + |
| 119 | +我缺的,是把“继续往下做”这件事也自动化。 |
| 120 | + |
| 121 | +这也是我做 `Supervisor` 的原因。 |
| 122 | + |
| 123 | +很多人一听这个名字,第一反应会觉得它像是一个“盯着 Agent 有没有卡住”的东西。但我后来越来越确定,`Supervisor` 最核心的价值根本不是“盯任务”。 |
| 124 | + |
| 125 | +它真正有意思的地方在于: |
| 126 | + |
| 127 | +你先设定一个目标,然后让 AI 去驱动 AI,让执行中的 Agent 持续朝目标推进。 |
| 128 | + |
| 129 | +不是我每隔几分钟回来补一句“继续”。不是我一直守在电脑前等它问“要不要往下做”。而是我先把目标讲清楚,再让另一个 AI 站在更高一层,围绕这个目标持续评估、持续判断、持续续推。 |
| 130 | + |
| 131 | +也就是说,`Supervisor` 干的不是简单的监控。 |
| 132 | + |
| 133 | +它做的是目标驱动的自动推进。 |
| 134 | + |
| 135 | +比如我给它一个目标:改完这轮 `CR`,把 review 里的问题收干净;给某个模块补齐关键单测,跑过验证;把一个功能从实现、测试一路推进到可提交状态。 |
| 136 | + |
| 137 | +那接下来我要的就不是“Agent 做一段,回来问我一次”。 |
| 138 | + |
| 139 | +我要的是它围绕这个目标一直往下走。 |
| 140 | + |
| 141 | +如果当前进展离目标还远,那就继续推进。 |
| 142 | +如果还有明显遗漏,那就继续补齐。 |
| 143 | +如果任务停在一个半成品状态,那就继续往前推。 |
| 144 | +直到目标完成,或者真的到了必须由我介入做决策的时候,再把我叫回来。 |
| 145 | + |
| 146 | +这才是我想要的自动化。 |
| 147 | + |
| 148 | +不是“AI 帮我做了一点点”,而是“我给出目标,然后 AI 去驱动 AI,把中间那段反复催促、反复确认、反复续推的过程接过去”。 |
| 149 | + |
| 150 | +人不应该寸步不离地盯着 Agent。 |
| 151 | + |
| 152 | +人更适合做三件事:设定目标,在关键分叉点做决策,最后验收结果。 |
| 153 | + |
| 154 | +至于中间那段“不断把任务往前推”的过程,本来就更适合交给 AI 去完成。 |
| 155 | + |
| 156 | +> TODO(supervisor-image-1): 在这里补一张 Supervisor 目标配置 / 状态卡片截图。 |
| 157 | +> |
| 158 | +> 预期图片内容: |
| 159 | +> - 桌面端工作区中的 Supervisor 卡片 |
| 160 | +> - 清晰展示 objective 文案 |
| 161 | +> - 能看到 evaluator / state / enable 或 trigger 等关键信息中的至少两项 |
| 162 | +> - 最好能让读者一眼理解“这是围绕目标自动推进的能力,不是普通聊天面板” |
| 163 | +
|
| 164 | +## Supervisor 解决的,不是能力问题,而是工作流问题 |
| 165 | + |
| 166 | +现在的 Agent,单点能力其实已经不差了。改个函数、修个 bug、补几段测试,很多都能做。 |
| 167 | + |
| 168 | +但一旦任务变成长链路,真正让人崩的,往往不是“它不会”,而是“它老停”。 |
| 169 | + |
| 170 | +它不是没有能力往下走,它只是缺一个持续围绕目标去驱动执行的机制。 |
| 171 | + |
| 172 | +所以 `Supervisor` 想补上的,不是模型会不会写代码,而是任务能不能持续自动推进。 |
| 173 | + |
| 174 | +“会写”解决的是能力。 |
| 175 | +“能一路推到目标”解决的是工作流。 |
| 176 | + |
| 177 | +而对已经开始重度使用 `Claude Code`、`Codex` 这类工具的人来说,后者往往更影响真实体验。 |
| 178 | + |
| 179 | +因为开发者最贵的,不只是编码能力,还有注意力。 |
| 180 | + |
| 181 | +如果每个长任务都要你守在电脑前,等着 AI 一次次问你“要不要继续”,那模型越能做长任务,人反而越容易被拖进一种低效的待命状态里。 |
| 182 | + |
| 183 | +这听起来很反直觉,但现在其实已经很常见了。 |
| 184 | + |
| 185 | +> TODO(supervisor-image-2): 在这里补一张能够体现“AI 驱动 AI 持续推进”的过程型截图。 |
| 186 | +> |
| 187 | +> 预期图片内容: |
| 188 | +> - Supervisor 最近 cycle / 历史记录 / 状态变化区域 |
| 189 | +> - 最好能看到至少一次“评估 -> 续推/注入 -> 继续执行”的痕迹 |
| 190 | +> - 如果单张图信息不够,可以考虑后续换成 2 张图或短 gif |
| 191 | +> - 目标是让读者理解:不是人每次手动回复“继续”,而是 Supervisor 在围绕目标推进 |
| 192 | +
|
| 193 | +## 为什么我会把它放进 Coder Studio 里 |
| 194 | + |
| 195 | +`Supervisor` 如果只是一个单独能力,当然也有价值。 |
| 196 | + |
| 197 | +但我更想把它放进 `Coder Studio` 这个浏览器里的 AI 编程工作台里,因为真实开发里,目标推进从来不是一句对话能承载完的。 |
| 198 | + |
| 199 | +你看的不只是 Agent 说了什么。 |
| 200 | + |
| 201 | +你还要看它改了哪些文件,Git 变更长什么样,测试有没有跑过,当前任务到底离目标还有多远。 |
| 202 | + |
| 203 | +所以我想把 `Agent + 文件 + Git + 终端 + Supervisor` 放回同一个界面里。 |
| 204 | + |
| 205 | +这样当你回来看的时候,你看到的不是一条“要不要继续”的消息,而是整个任务现场:目标是什么,进度到哪了,改动落在哪,验证有没有做,结果离交付还有多远,都在一个工作台里。 |
| 206 | + |
| 207 | +而 `Supervisor` 在这里的角色,也不是“提醒你回来继续点按钮”。 |
| 208 | + |
| 209 | +它是让这条链路尽可能自动往前跑,让你不用全程守在电脑前,寸步不离地看着 Agent。 |
| 210 | + |
| 211 | + |
| 212 | + |
| 213 | +*图:桌面端工作区把 Agent、文件、Git 和终端收拢到同一个界面里,Supervisor 才真正有了承载场景。* |
| 214 | + |
| 215 | +如果你离开工位,也不一定非要等回到电脑前才能知道任务推进到了哪。 |
| 216 | + |
| 217 | +同一个工作区可以在手机或平板上继续打开,至少先把状态、输出和变更看清楚,而不是靠一条通知猜任务到底有没有跑完。 |
| 218 | + |
| 219 | + |
| 220 | + |
| 221 | +*图:移动端不是主战场,但至少不用再寸步不离守着电脑看 Agent 下一句。* |
| 222 | + |
| 223 | +## 最后 |
| 224 | + |
| 225 | +如果你现在只是偶尔拿 AI 补几行代码,那你可能还没那么强烈地感受到这个问题。 |
| 226 | + |
| 227 | +但只要你开始让 AI 改 `CR`、补单测、做功能、跑验证,而且一跑就是几分钟、十几分钟,甚至希望它能在你离开电脑时自己继续往下做,你迟早会遇到这个痛点: |
| 228 | + |
| 229 | +不是它不会写。 |
| 230 | +而是它总在半路停下来,把你叫回来。 |
| 231 | + |
| 232 | +所以我想做的,不只是让 AI 更能干一点。 |
| 233 | + |
| 234 | +我更想做的是:你给出目标之后,让 AI 去驱动 AI,让 Agent 持续朝目标推进,把中间那段最烦、最碎、最像监工的过程自动化掉。 |
| 235 | + |
| 236 | +这也是 `Supervisor` 对我来说真正有价值的地方。 |
| 237 | + |
| 238 | +如果你也受够了总得守在电脑前、等 AI 一次次问你“下一步要不要继续”,可以看看这个项目: |
| 239 | + |
| 240 | +GitHub:`https://github.com/spencerkit/coder-studio` |
| 241 | + |
| 242 | +```bash |
| 243 | +npm install -g @spencer-kit/coder-studio |
| 244 | +coder-studio open |
| 245 | +``` |
| 246 | + |
| 247 | +如果这个方向你也认同,欢迎试试,也欢迎顺手点个 `Star`。 |
0 commit comments