本地 Agent 跑五步任务断在第四步,重跑后汇总表多出一倍行数——断点续跑我这样复盘

25 阅读3分钟

“它昨天停在一半,我今天重跑了一遍,怎么汇总表里每个人都出现了两次?”

做运营的小郑把表格投到会议室屏幕上。确实,二十几个人的周报汇总,行数翻了一倍,有几行还是半截的。

这个任务是我给她配的:办公室的本地 Agent 每到月底跑五步——读取共享目录里本月的周报、逐份抽取“完成事项/风险/下周计划”、写进汇总表、按部门生成小结、最后出一份月度概要。平时十来分钟跑完,那天跑到第四步,机器自动更新重启了。

小郑问得很直接:“断了就断了,为什么重跑还会多出东西?”

一、问题出在“每一步都不知道自己做过没有”

我翻日志才看清:第三步“写进汇总表”是追加模式。第一次跑的时候已经写进去了,重跑时又从第一步开始,第三步又追加了一遍。至于那几行半截的,是重启那一刻正在写的内容。

说白了,这条流程只有“从头开始”这一种跑法,没有“从哪里接着跑”的概念。

二、我改了三处

**1. 加一份步骤台账。**每次任务开跑生成一个任务编号,每一步结束时往台账里写一行:步骤名、状态、输入文件清单的摘要、输出文件路径、完成时间。任务启动时先读台账,状态为“完成”且输出文件还在的步骤直接跳过,从第一个没完成的步骤开始。

图:Carl Lender from Sunrise, USA / Wikimedia Commons / CC BY 2.0

**2. 让写入变成幂等的。**汇总表不再追加,而是每次先写到临时文件,整份写完再替换正式文件。同一个任务编号重复写,结果也是一样的。中途断电,正式文件还是上一份完整的,不会留半截。

**3. 输入变了就不能跳。**如果续跑时发现共享目录里多了一份迟交的周报,输入摘要对不上,就从抽取那一步重新跑,而不是沿用旧结果。这一条是小郑提醒的:“总有人周一才交上周的。”

三、怎么验收

光说“能续跑”不算数,我和小郑约了个演练:

  • 先完整跑一遍,把结果存下来当基准;
  • 然后分别在第一到第五步的中途手动结束进程,每次都直接重新启动;
  • 每次续跑完,拿汇总表和基准逐行比对:行数一致、没有重复人名、没有半截行;
  • 再加一道坑:续跑前往目录里放一份新周报,看它会不会老老实实从抽取那步重来。

第一轮演练,在第三步中途断的那次还是出了问题——临时文件没清理,被当成了输出。补了一条“启动时清掉未完成任务的临时文件”后,五个断点加一道坑全部和基准一致。

小郑后来说:“我不要求它永远不断,断了能接上、接上不出错就行。”

四、一点体会

Agent 做多步任务,最容易忽略的不是哪一步写错,而是中断以后怎么接。每一步要能回答“我做过没有、做出了什么、输入有没有变”,写入要能重复执行而结果不变。验收别只测一路顺风,把每个断点都杀一次进程,比上线后再救火省心多了。

你们的 Agent 跑长任务时有没有中途断过?是怎么做续跑的?评论区聊聊你们的做法。

更多零碎记录在 evafang.com 。