04让协作过程经得住中断 · 第 11 章
总进度 11 / 15

10|让时间线解释“刚才发生了什么”

“执行失败”四个字帮不了我们定位问题。至少要知道哪一步开始了、用了几次尝试、交付了什么,以及失败前最后一个正常动作是什么。这一节读取事件记录,再看它怎样实时出现在网页中。

2026-09-28约 6 分钟24 行代码难度 ★★★

如果想获取全套课程资料,请关注微信公众号 「AI面包君」,回复 「课程资料」 即可领取。

“执行失败”四个字帮不了我们定位问题。至少要知道哪一步开始了、用了几次尝试、交付了什么,以及失败前最后一个正常动作是什么。这一节读取事件记录,再看它怎样实时出现在网页中。

你会用一个游标只取新增事件,并理解事件序号为什么比页面显示的时间更适合做断线续接。

1. 先读一条事件,而不是盯着整屏输出

运行:

.\.venv\Scripts\python.exe labs.py 10

从输出中找到一条 step_started。它的 payload.step 是步骤编号,payload.attempt 是本次尝试次数。再找到同一步的 artifact_ready,它表示产物已经保存。

任务事件按序记录开始执行、产物交付与人工审核

图中内容来自课程实验的实际输出,按阅读宽度排成终端记录;任务编号和耗时会随每次运行变化。

事件包含 seq、time、kind、payload:分别表示顺序号、发生时间、事件类型和相关数据。不要要求一次新实验的序号与截图相同,数据库中的其他任务也可能消耗序号。

事件像工作记录,状态像当前看板

看板写“待人工审核”,只能告诉你现在停在哪里;记录写“先查询资料、资料请求重试一次、开始写作、交付稿件”,才能解释怎么走到这里。

可以把状态想成快递当前显示“运输中”,把事件想成每次分拣与到站记录。两者都重要:只读事件去猜当前状态很费事,只看当前状态又很难定位过程中的问题。

因此,项目同时保存任务快照与事件。快照用于快速展示当前计划和产物,事件用于追踪发生过的动作。这里不要求你实现复杂的“事件溯源系统”,先保证每次重要变化有可读的记录。

例子:从一组事件看出重试发生在哪里

下面是为了阅读练习写的示意记录,序号并非某次运行截图的真实值:

seqkind相关数据
20step_startedresearch-product,attempt=1
21retryresearch-product,等待 0.4 秒
22step_startedresearch-product,attempt=2
23artifact_readyresearch-product,kind=research
24step_startedwrite,attempt=1

试读到这里 · 后续内容已封存

关注公众号,继续把这章学完

在「AI面包君」发送关键词「学习AI」拿到口令。验证一次,这个浏览器就能继续阅读全部课程。