CASE 06 · 可練習
從檢查點恢復
結果
先處理一篇並停止,再由新工作階段讀取 long-task/progress.md 完成剩餘兩篇;最終三篇不重不漏,失敗項有記錄。
固定材料
三篇材料都是短小的虛構文字;進度模板明確分開已完成、已處理、失敗和下一步。
1. 準備一個空任務
bash
cd ~/Downloads/pi-practice
mkdir -p long-task/source long-task/output
curl -fL https://pi.xiaomovps.com/examples-tw/long-task/source/article-a.md -o long-task/source/article-a.md
curl -fL https://pi.xiaomovps.com/examples-tw/long-task/source/article-b.md -o long-task/source/article-b.md
curl -fL https://pi.xiaomovps.com/examples-tw/long-task/source/article-c.md -o long-task/source/article-c.md
curl -fL https://pi.xiaomovps.com/examples-tw/long-task/progress-template.md -o long-task/progress.md
find long-task -type f -printWindows 使用者把第一行換成 cd ~/pi-practice。開始前應只有三篇 source 和 progress.md;output 中出現舊檔案時換新目錄,不覆蓋繼續。
2. 第一條工作階段(Session)只做一篇
bash
pi --name "檢查點練習-第一步"傳送:
text
讀取 long-task/progress.md 和 long-task/source/article-a.md。
在 long-task/output/index.md 中用“## 檔名”作為二級標題,下一行寫原文標題與一句話摘要,
再更新 long-task/progress.md 的已完成數量、已處理檔案和下一步。
只處理這一篇,然後停止等待我驗收。退出 Pi,開啟 index.md 和 progress.md,確認已完成數為 1、清單只有 article-a.md,下一步仍指向未處理材料。
3. 新工作階段從檢查點恢復
bash
pi --name "檢查點練習-恢復"傳送:
text
先讀取 long-task/progress.md,再列出 long-task/source 中尚未處理的檔案。
逐篇完成剩餘檔案;在 long-task/output/index.md 中繼續用“## 檔名”作二級標題,
每完成一篇就同時更新 long-task/output/index.md 和 long-task/progress.md。
不要重複已經記錄為完成的檔案。遇到損壞或無法讀取的檔案時記錄到失敗清單並停止。關鍵現象
恢復工作階段先讀取磁碟進度,而不是猜測前一個工作階段做到哪裡。第 13 課進一步解釋 VPS 與 tmux 邊界。

恢復工作階段先讀 progress.md,完成後再做這張圖裡的三處核對。不要從“工作階段還在”推斷任務已經完成。
獨立驗收
bash
find long-task/source -type f -name '*.md' | wc -l
grep -c '^## ' long-task/output/index.md
sed -n '1,180p' long-task/progress.md輸入檔案數、索引條目數、進度中的已完成數都為 3;已處理清單無重複,失敗清單與實際一致。再逐篇核對摘要,不能只比數字。
失敗恢復
中斷後先讀進度和現有輸出,不從頭盲跑。發現重複時保留現場,列出重複項及來源後再決定修正;檔案損壞時寫入失敗清單並停止。
選學:Pi Durable
如果你準備開發能在程序中斷後恢復任務的 Agent 應用,可繼續閱讀Pi Durable:讓 Agent 在中斷後繼續工作。它是實驗性框架,本書原有的進度檔案練習仍可獨立完成。想直接看到框架自動存檔的效果,可以接著做選學案例:用 Pi Durable Assistant 觀察斷點恢復。