本周要回答: 网络在中途断开、任务重复触发或进程突然重启,会不会造成重复动作和无法解释的状态?
进入本周前: 已有受控的手动只读运行时,能够定位一次请求和停止进程。
- 01持久保存待运行
- 02获取执行权
- 03核查完成状态
- 04恢复或人工核查
学习内容与理解目标
本周学习任务状态机:待运行、运行中、成功、失败、等待人工处理与取消。将任务状态存到适合当前部署方式的持久存储,而不是假定进程内变量或临时磁盘能跨重启保留。副作用发生前后都有不确定窗口,重试不等于重新从头盲做一遍。
幂等是重复请求不产生额外不希望的效果,不是简单“生成一个 ID”就自动得到恰好一次执行。对不确定是否已成功的外部操作,应先核对目标系统状态,必要时交给人工。持久状态选修见 R49 · LangGraph JavaScript:Persistence;本地 SQLite 足够时无需为了学习引入复杂编排。
学习链接与选读范围
| 级别 | 官方或原始资料 | 本周只读这些 | 阅读预算 |
|---|---|---|---|
| 选读 | R49 · LangGraph JavaScript:Persistence | 状态保存、线程或运行标识、恢复的概念。 | 40 分钟 |
| 必读选段 | R68 · Google SRE:Effective Troubleshooting | 用假设和证据定位中断与重试问题。 | 35 分钟 |
| 路径 B 选读 | R72 · Render:Cron Jobs | 调度、运行限制和停止规则;不要假定支持持久磁盘。 | 35 分钟 |
实战拆解
为每次任务创建不含私人信息的运行标识,持久保存状态和最小必要结果。明确相同触发、重复输入与真正的新任务如何区分。
加入有限重试、退避、总超时与取消。只对适合重试的错误重试,格式错误或权限拒绝不应无限尝试;总预算覆盖所有重试。
用 mock 演练:处理中断、工具超时、重复触发、返回后未保存状态。检查重复请求不会生成重复草稿;无法确定状态时进入待人工核查。
确认托管文件系统的持久性与服务限制。使用定时任务时,状态要放在任务可安全访问的持久数据层;Render 的 cron 与磁盘能力分别核对 R72 · Render:Cron Jobs、R73 · Render:Persistent Disks。
制作一份合成数据备份,在新位置实际恢复,并核对记录数量与关键字段。确认恢复过程中不会自动重放外部动作。
交付与验收
| 本周交付 | 怎样确认真的完成 |
|---|---|
| 持久状态与去重 | 重启可找到运行状态,重复触发的行为有实际测试。 |
| 故障演练记录 | 涵盖超时、中断、重复与不确定完成状态。 |
| 可恢复备份 | 确实恢复过数据,说明恢复点、数据损失范围与限制。 |
不用代码生成器的练习: 自己制造一次同任务的并发触发,观察两次是否都获得执行权;解释为什么界面禁用按钮不能解决服务端并发问题。
隐私与安全检查: 备份和状态表同样需要权限与保留期限。日志避免记录完整模型上下文和凭据;只保留定位故障所需信息,参考 R61 · OWASP:Logging Cheat Sheet。停止新任务并不自动取消已经排队或已发送到外部系统的操作,应明确剩余风险。
落到日常生活: 允许一个只读公开资料任务按明确周期运行,先低频且有限次数。没有变化时跳过推理,失败时给一个可操作提示,而不是连续发送无意义通知。
过关或补课判断: 能恢复状态、去重和停止,且知道不确定结果如何处理后再尝试带审批的写入。一次成功运行不足以过关。
本周可复制的协作提示
请先为只读任务设计持久状态、去重、有限重试和取消。用 mock 演练中断与重复,不承诺恰好一次外部执行。确认临时与持久存储区别,并实际恢复一份合成备份。
本周来源与核对范围
来源编号与核对说明沿用课程原文,基线为 2026-09-27。未逐一登录完成外部实验;实施前请核对最新版本与访问条件。
- R49LangGraph JavaScript:Persistence ↗
持久状态选修;已有简单实现可不引入框架。
- R61OWASP:Logging Cheat Sheet ↗
选必要日志与敏感数据排除。
- R68Google SRE:Effective Troubleshooting ↗
故障定位与假设验证。
- R72Render:Cron Jobs ↗
定时运行选修;运行限制、计费及存储支持按当前文档确认。
- R73Render:Persistent Disks ↗
持久盘不是所有服务类型均支持;不可把临时文件系统当数据库。