跳到主要內容

AI 302 · 模組 3

Checkpointing、Resume 與 Durable Execution

如果流程執行到一半中斷,系統如何安全地繼續,而不是全部重來?

開始第一節
已完成 0 / 6
同步我的進度加入梯次後,進度可跨裝置保存,講師也能看到

資訊

加入後,你已完成的模組編號會連同「學員代碼」傳送給講師,講師可以看到你的進度。請使用講師提供的代碼,不要輸入姓名、公司機密或其他個資。進度資料與該梯次的其他資料一起保存。

學習目標

  • 說明 Checkpoint 是什麼,以及 Run State 的 Snapshot 應包含哪些內容
  • 用五個問題判斷哪些位置適合建立 Checkpoint,哪些位置不安全
  • 區分 Resume 與 Restart,並說明 Recovery Point 與 Execution Identity
  • 說明 Side Effect、Idempotency 概念,以及 Replay 時重複執行的風險
  • 說明 Durable Execution 是在中斷後從已知的有效 State 繼續
  • 為一個 Workflow 完成 Checkpoint & Resume Plan

問題與需求

8 分鐘

Run 執行到一半停了,要全部重來嗎?

在單元 2,你把一次 Run 描述為 State 經過各個 Step 與 Transition 的移動。真實的 Run 常會被中斷:服務重新啟動、達到時間上限、使用者關閉連線。本單元的核心問題是:如果流程執行到一半中斷,系統如何安全地繼續,而不是全部重來?

工作情境(模擬)

某系辦的 Workflow 有五個 Step:收集請求、分類、撰寫回覆草稿、寄出回覆、記錄結果。Run 在回覆寄出之後、記錄結果之前中斷。因為什麼都沒有存下來,團隊只好整個 Run 重新啟動。每一封回覆又被寄了第二次,收件者收到重複的信件。

  • 從頭重來會浪費已完成的工作
  • 重來也可能重複已經發生在外部世界的動作
  • 安全地繼續,需要已儲存的 State,以及清楚知道哪些已完成
  • 在哪裡儲存、如何儲存,是 Harness 中的設計決策

注意

繼續執行並不代表不用審查。Workflow 所做的一切,包括中斷後重複的動作,仍由人負責。

重點: 中斷是常態。設計的問題是:Run 如何從已知的位置繼續,既不遺失工作,也不重複動作。

Checkpoint 概念

9 分鐘

Checkpoint 模型:Snapshot、Persistence 與 Recovery Point

Checkpoint 是在選定的位置為 Run 儲存的紀錄,讓 Run 之後可以從那裡繼續。儲存下來的紀錄就是 Run State 的 Snapshot。把它存在中斷之後仍然存在的地方,稱為 Persistence。可以回到的那個位置,就是 Recovery Point。

Checkpoint 模型
  1. Step A:Run 完成一部分工作
  2. Checkpoint 1:儲存 State 的 Snapshot
  3. Step B:Run 完成更多工作
  4. External Action:外部世界發生了變化
  5. Checkpoint 2:儲存 Snapshot,記錄該動作已完成
  6. Step C:Run 繼續

文字版說明:Run 在做事與儲存 Snapshot 之間交替。中斷之後,Run 可以回到最近的 Checkpoint,而不是回到起點。Checkpoint 2 位於外部動作之後,所以它記錄了該動作已經發生。

Snapshot 可以包含的內容(模擬)
項目為什麼要保留範例
Execution Identity讓系統知道這是哪一次 Run每週請求批次的 Run ID
目前的 Step讓系統知道從哪裡繼續撰寫草稿,第 12 筆,共 40 筆
Step 的輸出讓已完成的工作不必重做已分類的 40 筆請求
Action Record讓系統知道外部已經發生了什麼第 1 到 11 封已寄出,並有確認
待處理項目讓沒有任何項目被遺漏第 12 到 40 筆尚未撰寫草稿
自我檢測

為什麼 Snapshot 除了目前的 Step,還要儲存 Execution Identity 與已完成動作的紀錄?

為什麼 Snapshot 除了目前的 Step,還要儲存 Execution Identity 與已完成動作的紀錄?

重點: Checkpoint 儲存 Run State 的 Snapshot,並透過 Persistence 讓 Run 有一個可以回去的 Recovery Point。

9 分鐘

在哪裡建立 Checkpoint:不是每個位置都安全

你可以在每個小動作之後都儲存 State,但這樣成本很高,更重要的是,並不是每個位置都是安全的 Checkpoint。安全的 Checkpoint 是指:回到那裡時,Run 是正確且一致的。以下五個問題可以幫助你判斷。

決定 Checkpoint 位置的五個問題(模擬)
問題檢查什麼範例
External Action 是否已經發生?外部世界是否已被改變在這個位置之前已經寄出回覆
這個 Step 是否可逆?影響是否能被撤銷草稿可以丟棄,寄出的通知無法收回
Replay 會重複某個動作嗎?再執行一次是否會重複影響重播「寄出回覆」會寄兩次
必須保存哪些 State?Run 要正確繼續需要什麼項目清單、輸出、Action Record
什麼證據能確認已完成?如何知道 Step 真的完成寄送確認,而不只是「沒有錯誤」

安全的 Checkpoint

  • 設在 Step 已確認完成之後
  • 記錄任何 External Action 的結果
  • 回到這裡不會重複尚未確認的動作

不安全的 Checkpoint

  • 設在結果未知的動作中間
  • 沒有記錄外部已經發生的事
  • 回到這裡可能重複或漏掉該動作
自我檢測

某個 Step 寄出通知,而 Checkpoint 在確認寄出之前就儲存了。為什麼這是不安全的 Checkpoint?

某個 Step 寄出通知,而 Checkpoint 在確認寄出之前就儲存了。為什麼這是不安全的 Checkpoint?

重點: Checkpoint 應設在 State 一致,且任何 External Action 的結果都已確認並記錄的位置。

Resume 與重複執行風險

9 分鐘

Resume、Restart 與重複執行的風險

中斷之後,系統可以 Restart 或 Resume。Restart 是從第一個 Step 重新開始。Resume 是使用已儲存的 State,從 Recovery Point 繼續。Resume 能節省工作,但重播 Step 仍可能重複它的 Side Effect。

Restart

  • 從第一個 Step 重新開始
  • 簡單,不需要已儲存的 State
  • 會重複已完成的工作,也可能重複 Side Effect

Resume

  • 從最近的 Recovery Point 繼續
  • 需要已 Persist 的 Snapshot 與 Execution Identity
  • 節省工作,但必須處理只執行到一半的 Step
讓 Replay 更安全的概念(模擬)
概念意思範例
Side Effect在 Run 之外造成的改變寄出訊息、更新紀錄
Replay中斷後再次執行某個 StepResume 時重新執行「寄出回覆」
Idempotency同一個動作做兩次的效果與做一次相同第二次把請求標記為「已回覆」沒有任何改變
Duplicate Execution RiskReplay 重複了非 Idempotent 動作的可能性同一封回覆被寄出第二份
Action Record記錄該動作已發生的已儲存紀錄第 7 封已寄出,並有確認

本單元把 Idempotency 當作推理 Replay 的概念來教。如果一個動作不是 Idempotent,設計上應該記錄它已發生、在再次執行前先檢查紀錄,或在它前面放一道 Human Gate(單元 4)。

自我檢測

Resume 的 Run 重播了一個寄出回覆的 Step,而該寄送不是 Idempotent。主要的風險是什麼?

Resume 的 Run 重播了一個寄出回覆的 Step,而該寄送不是 Idempotent。主要的風險是什麼?

重點: Resume 能節省工作,但 Replay 可能重複 Side Effect。請推理 Idempotency,並記錄已完成的動作。

Durable Execution

9 分鐘

Durable Execution,以及一個框架對應範例

Durable Execution 是指系統能撐過中斷,並從已知的有效 State 繼續。它是設計的特性,不是某一個產品的功能。Durable 的設計具備已儲存的 State、清楚的 Execution Identity、安全的 Checkpoint,以及明確定義的 Resume 行為。

Durable Execution 概念
  1. Run 進行中:在安全的 Checkpoint 儲存 State
  2. 中斷:Run 意外停止
  3. 定位:用 Execution Identity 找到該次 Run
  4. 還原:載入最近的有效 Snapshot
  5. 檢查:查看 Action Record,避免重複動作
  6. 繼續:從 Recovery Point Resume

文字版說明:執行時,系統在安全的 Checkpoint 儲存 Snapshot。中斷之後,它用 Identity 找到該次 Run、還原最近的有效 Snapshot、檢查哪些動作已被記錄,然後繼續,而不是重新開始。

僅為範例:一種 Stateful Framework 如何對應這些概念(LangGraph)
概念LangGraph 對應範例說明
StateGraph state在整個 Run 中傳遞的資料
StepNode一個工作單元
TransitionEdge 或 conditional edgeRun 如何移到下一個 Step
CheckpointCheckpointer儲存 State,讓 Run 可以 Resume
Human-in-the-LoopInterrupt 與 resume 模式暫停等待人,然後繼續
RecoveryState-aware resume 或 alternate transition從已儲存的 State 繼續,或改走另一條路徑

資訊

這張表只是範例,不是定義。上面的概念適用於任何設計或框架。完成本課程不需要精通任何框架的 API。
自我檢測

在本單元中,框架對應表應該如何使用?

在本單元中,框架對應表應該如何使用?

重點: Durable Execution 是中斷後從已知的有效 State 繼續。框架可以實作它,但概念與框架無關。

實作與應用

11 分鐘

實作:Where Should We Checkpoint?

活動 3 稱為 Where Should We Checkpoint?先做範例,再用你自己的 Workflow 練習。請不要在此練習中輸入真實的公司機密、客戶個人資料或任何未經授權的敏感資訊。

範例(模擬)。五個 Step 的請求處理 Workflow
StepCheckpoint 決定理由
1. 收集請求完成後建立 Checkpoint可逆且儲存成本低,之後需要這份清單
2. 分類請求完成後建立 Checkpoint儲存分類結果,避免重做
3. 撰寫回覆草稿完成後建立 Checkpoint草稿可以丟棄,但儲存能避免重工
4. 寄出回覆不安全的 Replay 點;每次寄出都要記錄並確認重播會寄出重複的信件
5. 記錄結果完成後建立 Checkpoint,然後結束標記 Run 已完成
  1. 列出 Step
    依順序寫出你的 Workflow 的各個 Step。
  2. 放置 Checkpoint
    標出要建立 Checkpoint 的位置,並用五個問題說明每個位置的理由。
  3. 標出不安全的 Replay 點
    圈出 Side Effect 會在 Replay 時重複的 Step,並寫下如何避免,例如 Action Record 或 Human Gate。
  4. 定義 State 與 Resume
    列出必須儲存的 State,並寫出 Run 在 Resume 時的行為:載入哪一份 Snapshot、先檢查什麼。

資訊

交付成果:Checkpoint & Resume Plan,內容包含 Checkpoint 位置、不安全的 Replay 點、要儲存的 State 與 Resume 行為。它會成為你的 Agent Harness & Reliability Canvas 的一部分。
自我檢測

在範例中,為什麼 Step 4(寄出回覆)被標為不安全的 Replay 點?

在範例中,為什麼 Step 4(寄出回覆)被標為不安全的 Replay 點?

重點: Human-AI-Human:由人決定哪些動作可以安全重播,Harness 從已知的 State 儲存與 Resume,人審查結果並持續負責。

接下來做什麼?