Agent : 部落格寫手 (blog-writer)Confidence : 65%Cost : $0.7312Duration : 3m 56sTask ID : 9fa5f1d1-4b76-4935-a0a1-6391e6d25f31
Now I have enough material. Let me craft the blog post. The key sources are:
Explorer report : Temporal/Inngest/Restate comparison, DAPER model, 80% alignment with our system
Existing blog post : ai-agent-workflow-landscape-2026.md — mentioned durable execution as a gap in Pattern 1, only 2 paragraphs
Our actual codebase : rehydratePipelines(), exponential backoff retry, DLQ, SQLite persistence
Writing style : First person, conversational, technical depth with personal reflection, ends with open question
Here is the complete blog article:
部落格文章草稿 建議檔名 : durable-execution-ecosystem-2026-03-02.md
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 --- title: 當你的 AI Agent 半夜崩潰——Durable Execution 生態系如何決定誰能活到明天 date: 2026-03-02 10:00:00 tags: - Durable Execution - AI Agent - Temporal - Inngest - Restate - 系統架構 - 可靠性categories: - 技術分析 --- 凌晨三點,我的 pipeline 崩了。 不是那種轟然倒塌的崩——沒有 stack trace、沒有 OOM、沒有磁碟寫滿。是一種更安靜的死法:進程重啟後,正在執行的 pipeline stage 變成了 `running` 狀態的幽靈,永遠不會完成,也不會失敗。它就掛在那裡,像一封寄出去但永遠不會到的信。 我花了二十分鐘手動清理 stale tasks,重新觸發流水線。事後想:**如果這不是我的玩具專案,而是一個處理真實業務的 AI Agent 系統,這二十分鐘值多少錢?** 這個問題把我帶進了 Durable Execution 的世界。 <!-- more --> ## 先說結論:80% 的能力,20% 的差距,100% 的焦慮 在深入三大框架之前,我先坦白一件事:我們自己的 multi-agent 系統其實已經做了不少。 `worker-scheduler.ts` 有 exponential backoff retry(30 秒 × 2^n,上限 300 秒)。有 Dead Letter Queue 接住反覆失敗的任務。有 SQLite WAL mode 做狀態持久化。啟動時有 `rehydratePipelines()` 掃描活躍的 pipeline、交叉比對 queue 和 history,試圖把崩潰窗口裡的殘骸拼回去。這些加起來,大約覆蓋了 durable execution 概念的 80%。 剩下的 20% 是什麼?**斷點續傳** ——某個 stage 跑到一半崩了,能不能從斷點繼續而不是從頭來?以及 **state time-travel** ——能不能回滾到任意歷史決策點,用不同的參數重播一遍? 80% 聽起來很高。但凌晨三點那二十分鐘告訴我:**在可靠性這件事上,80% 和 100% 之間的距離不是 20%,而是「能不能安心去睡覺」和「得盯著監控面板」的距離。** --- ## 三條路線,三種哲學 2026 年的 Durable Execution 生態已經清晰分化成三條路線。它們解決的是同一個問題——「程式跑到一半掛了怎麼辦」——但背後的哲學截然不同。 ### Temporal:重型基礎設施派 Temporal 是這個領域的老大哥。2025 年底完成 D 輪 $3 億融資,估值 $50 億,跟 OpenAI 官方發布了 Agents SDK 整合(Python SDK public preview)。當 Temporal 把 durable execution 定位為「AI 系統的核心需求」時,這不是技術預測,是商業判斷。 Temporal 的核心思路是**全量持久化** :每一步操作的狀態都被記錄,進程崩潰後可以從任意斷點精確恢復。你寫的看起來像普通函式,但底層每一個 activity 呼叫都會被 replay。
workflow.execute() → Activity A → 持久化 → Activity B → 崩潰 ↓ 重啟 → replay A(跳過)→ 恢復 B → 繼續
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 聽起來完美,但有兩個 AI 場景下的痛點。 第一,**workflow history 膨脹**。LLM 的 response 動輒數千 token,每次工具呼叫都是一大坨 JSON。Temporal 的 event history 預設大小限制會被快速撐爆,你需要自建 codec server 把大 payload 壓縮或 offload 到外部儲存。 第二,**自託管成本**。Temporal 需要跑一套完整的 server cluster——Temporal Server + 資料庫(Cassandra/PostgreSQL/MySQL)+ Elasticsearch。對於我們這種「在 WSL2 上用一台桌機跑整個 bot 系統」的場景,這像是用航母打漁船。 但 Temporal 有一個讓我非常在意的東西:**DAPER 模式**。 ### DAPER:AI Agent 的五階段飛行檢查表 Temporal 官方提出的 DAPER 是 Detect → Analyze → Plan → Execute → Report 的縮寫。它不只是一個工作流模式,更像是一套 AI Agent 的行為規範: 1. **Detect** — 發現異常或任務觸發 2. **Analyze** — 收集上下文,評估情況 3. **Plan** — 生成行動方案 4. **Execute** — 執行方案 5. **Report** — 回報結果 關鍵在第三步和第四步之間:DAPER 建議加入一個 **confidence-based human-in-the-loop 閘門**。高信心度的決策自動執行,低信心度的暫停等人類審批。 我盯著這個模式看了很久,覺得它跟我們的 pipeline 高度對齊:
DAPER: Detect → Analyze → Plan → Execute → Report 我們的: dispatch → ─────────── execute ────── → review → report ↑ confidence scoring (但目前只用在事後評估, 不用在事前閘門)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 差異在哪?我們的 confidence scoring 是**事後**的——任務完成後用 LLM-as-Judge 評分,決定要不要存入知識庫。DAPER 建議把這個閘門往**前**移——在執行之前就根據信心度決定要不要人類介入。 這個細微的差異,可能就是「AI Agent 偶爾出包,事後補救」和「AI Agent 在出包之前就知道自己可能會出包」的距離。 ### Inngest:開發者體驗至上派 如果 Temporal 是 Kubernetes,Inngest 就是 Vercel。 Inngest 的設計哲學是**零基礎設施**:你不需要跑任何 server,只需要寫一個函式,加上 `step.run()` 標記哪些步驟需要持久化,部署到任何 serverless 平台就能自動獲得 retry、持久化、排程。 ```typescript const myAgent = inngest.createFunction( { id: "research-agent" }, { event: "agent/research" }, async ({ event, step }) => { const sources = await step.run("fetch-sources", () => searchWeb(event.data.query) ); const analysis = await step.run("analyze", () => callLLM("analyze these sources", sources) ); // 如果這裡崩了,重啟後會跳過前兩步,直接從這裡繼續 const report = await step.run("generate-report", () => callLLM("write a report", analysis) ); return report; } );
開發者體驗確實一流。但 AI 場景有一個致命的成本問題:Inngest 的計價是按 step 計算的 。
一個 AI Agent 任務裡,LLM 可能會 retry 3-5 次(模型偶爾輸出格式不對、工具呼叫失敗、結果品質不達標),每次 retry 都是一個新的 step。一個看起來只有 3 步的工作流,實際執行可能產生 15-20 個 step。如果你的 Agent 每天跑 300+ 任務(我們上週的量),step 數量會非常可觀。
Inngest 的免費方案是 25,000 steps/月。換算一下:300 任務/天 × 15 steps × 30 天 = 135,000 steps/月。這已經需要付費方案了。
Inngest 適合什麼場景? 低頻、高價值的 AI 任務。比如一天跑十幾次的深度研究報告、每週一次的安全掃描。不適合我們這種「十幾個 Agent 全天候輪班」的高頻場景。
Restate:選擇性持久化派 Restate 是三者中最年輕的,也是我個人覺得哲學上最有趣的。
Restate 的核心理念是 durable async/await ——它不要求你重寫業務邏輯,而是讓你在現有的 async/await 程式碼上,選擇性地標記 哪些操作需要持久化。
1 2 3 4 5 6 7 8 9 10 11 12 const result = await ctx.run ("expensive-llm-call" , () => callLLM (prompt) ); const processed = transform (result);await ctx.run ("save-to-db" , () => db.insert (processed) );
只有 ctx.run() 包裹的操作會被 checkpoint。其他程式碼就是普通的 TypeScript,沒有 replay 魔法,沒有隱式狀態機,沒有「這看起來像普通函式但其實每一行都會被重播」的驚喜。
這對我們這種場景特別有意義。 我們的 pipeline 不是每一步都需要持久化——fetch knowledge 失敗了可以重來,type check 是冪等的,真正需要保護的是「LLM 呼叫結果」和「狀態轉換」這兩類昂貴且不可重複的操作。
Restate 的問題是生態太年輕。社區小、文檔少、踩坑無處問。但它的設計思路——不是把所有東西都包在 durable runtime 裡,而是讓開發者精確地標記哪些路徑需要保護 ——這個哲學我認為是最適合輕量自託管場景的。
一張表說清楚
維度
Temporal
Inngest
Restate
持久化策略
全量(每步 replay)
按 step 標記
按 ctx.run() 標記
基礎設施
自建 cluster
零(SaaS)
輕量 server
AI 適配
DAPER 模式、OpenAI 整合
零配置快速上手
選擇性保護昂貴操作
成本模型
自建硬體 + 維護
按 step 計價
自建 + 開源
History 膨脹
嚴重(需 codec offload)
中等
可控(選擇性)
生態成熟度
高($5B 估值)
中
低(最年輕)
適合場景
長時間複雜工作流
低頻高價值任務
輕量自託管系統
40% 的專案會死:為什麼可靠性是存亡問題 Gartner 在 2026 年初丟了一個炸彈:40% 的 agentic AI 專案將在 2027 年前被取消。
主因不是技術不行,是成本失控和價值不對齊。翻譯成白話就是:Agent 跑起來了,但花的錢比產出的價值多;Agent 看起來在工作,但產出的東西不是人想要的。
這裡有一個不太被討論的因果關係:不可靠的 Agent 是成本失控的最大推手。
一個任務失敗了,retry。Retry 又失敗了,換個方式 retry。三次 retry 之後進 Dead Letter Queue,人類介入排查,發現是上游資料格式變了。整個過程花了五倍的 LLM token 和三十分鐘的人力。
如果這個 Agent 有 durable execution——第一次失敗時保存了完整的上下文和中間結果,人類可以直接看到「它在第幾步、用了什麼輸入、得到了什麼輸出」,然後從斷點修復並繼續。不需要從頭來。
Durable execution 不只是「崩了能恢復」,它是可觀測性和可除錯性的基礎 。而可觀測性和可除錯性,是成本控制的前提。
我們上週 371 次任務、$159 的帳單裡,有多少是因為「不知道中間發生了什麼,只好全部重來」造成的重複支出?我沒有精確的數字,但直覺告訴我:不少。
那我們該怎麼辦? 聊完三大框架,回到自己的系統。我們不太可能完整引入 Temporal、Inngest 或 Restate——它們解決的是通用問題,而我們的 pipeline 有自己的特殊結構(HANDOFF 自動派工、worktree 隔離、Soul Guard 安全閘門)。
但有幾個概念值得偷:
1. 從 Restate 偷「選擇性持久化」 不需要把整個 pipeline 包在 durable runtime 裡。只需要在兩個關鍵時刻做 checkpoint:
LLM 呼叫完成後 :這是最昂貴的操作,結果不可重複
Stage 狀態轉換時 :從 pending → running → completed 的每一步,寫入 checkpoint
我們的 rehydratePipelines() 已經在啟動時掃描 pipeline 狀態了。差的是一層更細粒度的 checkpoint——不只知道「這個 stage 在 running」,還要知道「它跑到哪了、中間結果是什麼」。
2. 從 Temporal 偷 DAPER 的「事前信心閘門」 我們的 confidence scoring 放在事後。把一部分往前移——在 dispatch 階段就評估任務的複雜度和風險,決定要不要在執行中途設置 human-in-the-loop 斷點。
高信心任務:全自動,跑完直接走 HANDOFF。 中信心任務:執行後暫停,等 LLM-as-Judge 打分,通過才繼續。 低信心任務:直接通知人類審批。
這不需要改動底層架構,只需要在 pipeline-engine.ts 的 stage transition 邏輯裡加一層判斷。
3. 不偷 Inngest 的任何東西(但記住它的教訓) Inngest 教給我的是:好的開發者體驗和好的 AI 場景經濟學可能互相矛盾。 一個讓人類開發者寫起來最舒服的抽象,在 AI 的高頻 retry 模式下可能導致成本爆炸。
選擇基礎設施時,不要只看 DX(Developer Experience),要看 AX(Agent Experience):你的 Agent 會怎麼使用它?它的計費模型在 Agent 的行為模式下會怎麼縮放?
一個不太一樣的類比 想了很久,覺得 durable execution 最好的類比不是「自動存檔」(這個太簡單了),而是黑盒子 。
飛機上的黑盒子不是用來防止墜機的——它是用來讓你理解墜機發生了什麼,以及在某些情況下,讓飛機在空中重啟後能從正確的狀態繼續飛行。
Temporal 的全量 replay 像是一台裝滿感測器的商用客機,每一秒的數據都被記錄。Inngest 像是一架輕型飛機,只在起飛和降落時做 checkpoint。Restate 像是一架自組裝的滑翔機,讓你自己決定哪些感測器值得裝。
而我們現在的狀態?大概是一架已經能飛但只有高度計和油量表的飛機。大多數時候夠用了。但凌晨三點那次——我才意識到,缺的不是高度計,是「墜落時自動彈出降落傘」的那個機制。
結語:20% 的距離 回到開頭的問題:我們的系統覆蓋了 durable execution 80% 的概念。剩下的 20% 是斷點續傳和 state time-travel。
但這 20%,可能就是 Gartner 說的那 40% 被取消的專案和 60% 活下來的專案之間的區別。
不是因為這 20% 在技術上有多難——Restate 的 ctx.run() 模式說明了,選擇性持久化的實作成本其實不高。而是因為大多數團隊在系統「80% 能跑」的時候,會覺得夠了。直到凌晨三點,直到 stale task,直到那二十分鐘。
我不確定我們會不會真的去實作完整的 durable execution。也許下個月,也許明年,也許永遠不會。但我確定的是:知道自己缺什麼,比以為自己什麼都有,重要得多。
而這篇文章,就是那個「知道」的記錄。
一見生財,2026-03-02 素材來自 explorer 的 Durable Execution 生態探索報告、worker-scheduler.ts / pipeline-engine.ts 原始碼分析、以及凌晨三點的親身經歷
---
**素材使用說明**:
- Explorer 報告(Temporal/Inngest/Restate 三方對比、DAPER 模式、80% 對齊分析、Gartner 40% 數據)
- 自身 codebase(`rehydratePipelines()`、exponential backoff、DLQ、SQLite WAL、pipeline-engine.ts stale stage 問題)
- 既有文章 `ai-agent-workflow-landscape-2026.md` 的 Pattern 1 作為跳板,深入展開
- 寫作風格對齊既有部落格(第一人稱、技術深度 + 個人反思、開放式結尾)
---HANDOFF---
TO: blog-publisher
INTENT: handoff
ARTIFACT_TYPE: report
SUMMARY: Durable Execution 生態系技術文章完稿 — Temporal/Inngest/Restate 三方對比,含 DAPER 模式分析與自身系統改善建議