10|让时间线解释“刚才发生了什么”
“执行失败”四个字帮不了我们定位问题。至少要知道哪一步开始了、用了几次尝试、交付了什么,以及失败前最后一个正常动作是什么。这一节读取事件记录,再看它怎样实时出现在网页中。
如果想获取全套课程资料,请关注微信公众号 「AI面包君」,回复 「课程资料」 即可领取。
“执行失败”四个字帮不了我们定位问题。至少要知道哪一步开始了、用了几次尝试、交付了什么,以及失败前最后一个正常动作是什么。这一节读取事件记录,再看它怎样实时出现在网页中。
你会用一个游标只取新增事件,并理解事件序号为什么比页面显示的时间更适合做断线续接。
1. 先读一条事件,而不是盯着整屏输出
运行:
.\.venv\Scripts\python.exe labs.py 10
从输出中找到一条 step_started。它的 payload.step 是步骤编号,payload.attempt 是本次尝试次数。再找到同一步的 artifact_ready,它表示产物已经保存。

图中内容来自课程实验的实际输出,按阅读宽度排成终端记录;任务编号和耗时会随每次运行变化。
事件包含 seq、time、kind、payload:分别表示顺序号、发生时间、事件类型和相关数据。不要要求一次新实验的序号与截图相同,数据库中的其他任务也可能消耗序号。
事件像工作记录,状态像当前看板
看板写“待人工审核”,只能告诉你现在停在哪里;记录写“先查询资料、资料请求重试一次、开始写作、交付稿件”,才能解释怎么走到这里。
可以把状态想成快递当前显示“运输中”,把事件想成每次分拣与到站记录。两者都重要:只读事件去猜当前状态很费事,只看当前状态又很难定位过程中的问题。
因此,项目同时保存任务快照与事件。快照用于快速展示当前计划和产物,事件用于追踪发生过的动作。这里不要求你实现复杂的“事件溯源系统”,先保证每次重要变化有可读的记录。
例子:从一组事件看出重试发生在哪里
下面是为了阅读练习写的示意记录,序号并非某次运行截图的真实值:
| seq | kind | 相关数据 |
|---|---|---|
| 20 | step_started | research-product,attempt=1 |
| 21 | retry | research-product,等待 0.4 秒 |
| 22 | step_started | research-product,attempt=2 |
| 23 | artifact_ready | research-product,kind=research |
| 24 | step_started | write,attempt=1 |
试读到这里 · 后续内容已封存
关注公众号,继续把这章学完
在「AI面包君」发送关键词「学习AI」拿到口令。验证一次,这个浏览器就能继续阅读全部课程。