学习笔记 | 11 月 2 日 · 断了还能接着跑
- 2026-11-05 10:40:55
跑完一次不难,难的是断了还能接着跑
前两天讲的都是单轮任务:一句话进去,一轮循环出来。
真实的任务很少这么干净。它经常跨小时、跨天——等审批、等素材、等对方回消息,中途进程重启、电脑合盖、上下文被截断。
于是出现三种很难受的情况:
进程一重启,它从第一句话重新开始,把已经做过的事再做一遍。 上下文被截断,前面的进度丢了,它开始重复提问。 人接手时不知道它做到哪了,只能翻聊天记录猜。
今天讲状态管理:状态放哪、写什么、怎么恢复。
先把「对话」和「任务」分开
最常见的一个错误,是把对话历史当成任务状态。
历史是流水账:谁在什么时候说了什么。状态是账本:目标是什么、做到哪一步、凭什么说做到了。
账本不需要长,但必须准。一个能用的状态只有三样:
目标:这次到底要交付什么,一句话。 进度:已完成、待办、卡在哪。 证据:凭什么说这一步完成了(文件名、接口返回的关键字段)。
反例是把四十轮历史当成状态回放:token 烧掉大半,关键约束还是被埋在中间。
对话是流水账,状态是账本。翻账本三十秒能看懂的事,翻流水账要半小时。
状态要写在磁盘上,不是脑子里
放在内存里的状态,进程一挂就没了;放在进程外的状态,挂十次也还在。
三种载体,按复杂度排:
文件:一个 state.json 就够,单机、单任务首选。 数据库:多个任务并发时用,顺便能查历史。 外部系统:工单、看板、表格,好处是人本来就在看。
写什么,一份清单:
goal 整理 10 月第 4 周周报phase workingdone 已读 12 个素材 / 已归类 9 条pending 3 条待确认 / 写风险段blocked 缺 10/28 会议纪要next 向用户索要 10/28 纪要updated 2026-10-31 09:12
不写什么:原始工具返回、完整对话、中间推理。那些是过程,不是状态。
写入时机是重点:每完成一步写一次,而不是任务结束时写。 结束时才写,等于没写——中断恰恰发生在结束之前。
恢复不是「重放」,是「接着走」
恢复只有三步:读、校验、续跑。
第一步读,简单。第二步校验最容易被跳过,但它是关键:
引用的文件还在吗? 时间过期了吗?昨天的库存和今天的不是一回事。 结论还成立吗?昨天「已确认」的事,今天可能被推翻了。
第三步续跑,从 next 开始,不是从开头开始。
重建上下文也有讲究:checkpoint + 最近两三步就够了,不要全量重放。全量重放是最贵的偷懒——看起来稳妥,实际上又慢又容易跑偏。
还有一个必须解决的问题:幂等。
恢复时最怕「这一步到底执行过没有」。三种做法:
写文件用 upsert(覆盖写),不用 append。 发消息、发邮件带幂等键,重复调用不重复发。 调用外部系统前先查状态,而不是直接执行。
跑三天的那种:心跳、过期、接管
任务一旦跨天,会多出三个问题:
心跳。 每次 checkpoint 带 updatedAt,超过 N 小时没更新就视为停滞。没有心跳,你分不清「在跑」和「卡死了」。
过期。 状态里的结论要带日期,读取时判断是否仍然有效。一份三天前的「已确认」,处理方式和刚确认的应该不一样。
接管点。blocked 必须写清楚:等谁、等什么、等到什么时候。写清楚这三项,人一眼就知道该干什么;只写「卡住了」,等于把问题原样丢回去。
还有一条边界:重试的是步骤,不是整个任务。 整任务重跑一遍的代价,经常比人工介入还高;而人工介入需要的,恰好就是那份写清楚的状态。
给周报 Agent 加一个 checkpoint
三个东西就够:state.json、materials/、out/。
流程很朴素:
开始先读 state.json,没有就新建。每处理完一个素材文件,往 done里追加一条(带文件名)。周报写完, phase改成done。
然后是关键的验收动作:跑到一半按 Ctrl+C,再跑一次,看它是不是从第 4 个文件接着来。
提示词骨架:
开始前先读 state.json:- phase == "done":告诉用户已完成,不要重跑。- phase == "working":从 pending 第一项继续,不要从头再来。- 文件不存在:创建它,phase 设为 working。每完成一步,立刻更新 state.json:done 追加一条(含文件名),pending 删掉对应项,updatedAt 改成当前时间。
这段提示词不长,但它把「记住做到哪」从模型的自觉,变成了流程的强制。
今日三句话
对话是流水账,状态是账本;Agent 一中断就失忆,是因为它把流水账当成了账本。 状态要每完成一步写一次,而不是任务结束时写——中断恰恰发生在结束之前。 恢复三步:读、校验、接着走;全量重放是最贵的偷懒。
明日预告:Agent 的成本账——一次任务到底烧在哪,以及最该省的三处。