Signal #37:把部署交给 Agent 时,要先说清它凭什么报告完成。发布请求提交后,流程还需要到目标环境核对运行版本,才能把部署任务标记为完成。
你让 Agent 把新版本发到测试环境,等部署好了就请同事来验收。没多久,Agent 回复「已经部署好了」。你发链接前顺手看了一眼发布平台,发现这次发布还没结束,测试环境里跑的还是旧版本。
回头看执行记录,Agent 确实提交了发布请求。平台一受理,命令就返回了 0,接下来的部署由平台在后台继续。Agent 看到命令成功退出,就报了「部署完成」。测试环境有没有切到新版本,它还没查。
异步部署里,请求已经提交,只是结果还没出来。还有一种更难察觉的情况,命令连请求的动作都没做,最后也返回了 0。
有些命令会在动手前问一句「是否继续」。人操作时可以在终端作答。如果 Agent 的执行框架关闭了标准输入,程序收不到回答,可能跳过操作后正常退出。一篇名为 RECEIPT 的论文复现了这种情况。在关闭输入的实验中,156 个原本会请求输入的命令调用样例里,有 18 个跳过了请求的操作,仍返回 0。例如,交互式删除命令 rm -i 没有删掉文件,却正常退出。
工具能提供的信息,决定了 Agent 下一步该做什么。检测到命令在等确认,可以把确认请求交给人。拿到了发布单,可以继续查询进度。如果手里只有一个退出码,就还要去查请求有没有提交,或者目标状态有没有改变。
假设交给 Agent 的任务是「把测试环境的服务更新到本次构建」。执行前就能确定两件事,一是预期的构建 ID,二是从哪里读取目标环境正在运行的版本。提交发布后,可以先用发布单追踪进度。到了验收,再用运行版本接口或发布平台的实例状态,检查约定范围内的实例是否都已切换到预期构建。
如果还查不到运行版本,Agent 可以报告「部署请求已提交,运行版本尚未验证」。如果任务还要求确认某个缺陷已经修复,查到新版本之后,还要运行对应的回归用例。版本核对回答的是「改动发上去了吗」,用例回答的是「改动生效后,原来的问题解决了吗」。
这一步可以直接写进研发工作流。Agent 负责调用工具、追踪进度和汇报结果,工作流依据验收结果更新任务状态。对部署来说,支持「已完成」的证据来自目标环境。哪怕 Agent 提前说了「部署成功」,任务也会等到验收通过再结束。
《企业研发 AI 自动化》是我持续记录 AI 进入真实研发流程后的实践系列。
它关注的不只是 AI Coding 工具本身,而是从需求输入、任务表示、Agent 执行到自动化验证的完整链路:AI 如何在真实工程系统里稳定运行,并逐渐形成可复用的研发自动化能力。
欢迎关注和交流~