AI Engineer Europe 2026 · 演講 · 2026-05-10 · 17 分
讓 agent 撐得久的兩條路
Two Roads to Durable Agents: Replay vs. Snapshot · Eric Allam,Trigger.dev
Eric Allam 從後端架構史談起,比較 replay 與 snapshot 兩種讓 agent 持久執行的做法,主張 context 用 log 存、執行環境用 snapshot 存,並介紹 Trigger.dev 的 Firecracker 實作。
概要
- 後端三十年的預設是無狀態運算Eric 從 1993 年的 CGI 講到 PHP 與 LAMP,說 request 加資料庫就能產生 response 的 shared nothing 架構,成了之後 Rails、Node.js、serverless 都沿用的做法。
- replay 模型把副作用包成 step多步驟的副作用重試時會重複扣款,所以 workflow 與 durable execution 引擎把每個副作用包成會被快取的 step。好處是有執行歷史、能等人類回應;代價是結構僵硬,程式必須寫得具決定性,journal 的版本管理也麻煩。
- replay 套在 agent loop 上會越長越大每次 LLM 呼叫、每次 tool call 都變成一個 step,log 會一直長,可能撞到筆數或單筆大小的上限。Eric 的看法是 agent 像 session 而不像 transaction。
- durable agent 要存兩半一半是 context(訊息、tool call 與結果),用 append-only log 存進資料庫或物件儲存就好;另一半是執行環境(clone 下來的 repo、裝好的套件、跑著的 dev server),沒辦法用 log 還原,要用 snapshot 與 restore。
- Trigger.dev 從 CRIU 換到 Firecracker microVMCRIU 只能 checkpoint 單一 process,也要經過 container registry;改用 Firecracker 後整台機器都能 snapshot,再用壓縮把 snapshot 壓到約 14 megabytes。
- 速度數字Eric 說 snapshot 略低於一秒、restore 約幾百毫秒,benchmark 是每分鐘 15,000 次 VM 啟動;他們把這些包成類似 docker CLI 的 fc run,預計開源。
原話
▶ 07:07“Multi-step workflows are sort of start and end, and sessions keep going for as long as possible.”
多步驟 workflow 有開始和結束,session 則是盡可能一直持續下去
▶ 09:36“So this allows us to snapshot the machine, shut it down, save it to disk, and then when the user comes in we restore it”
所以可以把機器 snapshot、關掉、存進磁碟,使用者進來時再 restore
▶ 14:34“moral of the story is that snapshots are like slightly under a second and restores are a couple hundred milliseconds.”
重點是 snapshot 略低於一秒,restore 約幾百毫秒
▶ 16:07“I think this will lead to a future of you know stateful compute.”
我認為這會通往 stateful compute 的未來
延伸
- Eric 拿 1966 年的 IBM 大型主機說明 checkpoint 不是新概念:當年的工作一跑好幾小時,出錯整個重跑太貴,所以在程式裡加 checkpoint。
- Eric 說 snapshot 壓到多小是一個可以調的旋鈕,看要多少效能決定壓多少。
章節
點時碼直接跳到原片的那一段。
- 開場與問題一個跑在自己電腦上的 agent 範例,部署到伺服器後希望它能長時間工作、跨 turn 與程式版本保持 durable、出錯能復原。
- 後端歷史:從 CGI 到 shared nothing1993 年的 CGI 每個請求開一個新 process,之後 PHP 與 LAMP 沿用同樣原則:運算層沒有狀態,狀態都在資料庫。
- 副作用變成多步驟扣款、縮圖之類的非同步任務變成多步驟流程,其中一步失敗時整個重跑會重複扣款。
- replay 模型把每個副作用包成會被快取的 step,重跑時跳過做過的;有執行歷史、能等人,缺點是結構僵硬與版本管理。
- LLM 進來之後2023 年 LLM 先是 workflow 裡的一個 step,tool calling 變好後,換成由 LLM 去調度程式碼的 agent loop。
- 把 replay 套到 agent loop每次 LLM 與 tool call 都記成 step,resume 時重新執行,log 越長越大,可能碰到筆數或大小的上限。
- agent 是 session 不是 transactionEric 說有個衡量指標顯示,agent 能做有意義工作的時間每四到七個月翻倍,現在約幾小時,不久就會到好幾天;replay 給的是 durable transaction,而 agent 像 session。
- agent 的兩半:context 與執行環境context 是所有訊息與 tool 結果,用既有的資料庫、物件儲存之類就能存;執行環境則是 agent 在機器上的檔案、記憶與 sub-process。
- 用 snapshot 存執行環境等使用者下一則訊息時不能一直開著機器,所以 snapshot 後關機、使用者回來再 restore,成本比一直開著低。
- 兩者合起來與錯誤復原context 加執行的 durability 能對付不同的失敗:LLM 要等很久就 snapshot 後再 restore,機器壞掉就用 context log 重建。
- checkpoint 的歷史從 1966 年的 IBM 大型主機講到 2011 年的 CRIU,後者從 user space 暫停並還原 process。Trigger.dev 在 2024 年把它上線,之後做過數百萬次 snapshot restore。
- 改用 Firecracker microVMCRIU 只能存 process、只認開著的檔案、碰上 container registry 很慢;Firecracker 可以 snapshot 整台機器。
- 壓縮 snapshot預設 512 megabytes 的機器直接存也是 512 megabytes,所以改用 seekable compression 與分層,只在需要時解壓需要的部分。
- 速度與 fc runEric 說 snapshot 略低於一秒、restore 約幾百毫秒,並介紹類似 docker 的 CLI fc run,也提到每分鐘 15,000 次 VM 啟動。
- 回到 agent loop 與收尾用 context log 加執行 snapshot 讓 agent 跨版本、跨 turn、跨失敗都 durable,並預告 stateful compute 的未來。
名詞
- Trigger.dev
- Eric 是共同創辦人之一,說他們這幾年一直在讓這類 agent 更容易部署到 production
- shared nothing architecture
- 運算層沒有有意義的狀態,所有狀態都在資料庫的後端做法
- replay model
- 把副作用包成被快取的 step,重跑時跳過已完成部分的 durable execution 做法
- replay journal
- replay 模型裡記錄每個 step 的紀錄,版本與大小都是這個做法的痛點
- context log
- agent 的 system、user 訊息與 tool call、結果、回覆組成的 append-only log
- snapshot and restore
- 把整個執行狀態存下來並關機,需要時再還原
- CRIU
- 2011 年出現、能從 user space 暫停並還原 process 的工具,Trigger.dev 在改用 Firecracker 之前用的就是它
- Firecracker
- Trigger.dev 去年改用的 microVM,能 snapshot 整台機器
- fc run
- Eric 介紹的類 docker CLI,用來跑 container 與 Firecracker VM 並 snapshot、restore、fork,預計開源








