2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Temporalとは:AIエージェントを本番で落とさない「耐久実行」の仕組み

2
Posted at

「デモでは完璧に動くのに、本番に出した途端に落ちる」。AIエージェント(LLMやツールを束ねて自律的に動くアプリ)を作った人なら覚えがあるはずだ。だがこれはエージェント開発者だけの悩みではなく、長い処理を障害をまたいで完了させたい多くのシステムに共通する。これに答えるのが、ワークフロー基盤Temporal(テンポラル。同名のJavaScriptの日付APIとは別物で、Temporal.ioが提供する)が掲げる「耐久実行(Durable Execution)」だ。

なぜ本番で落ちるのか、「耐久実行」は何を守るのか

いまのエージェントは数十分〜数時間、不安定なLLM APIや外部サービスをまたいで走り続ける。レート制限・障害・再起動のどれが起きても、メモリ上の途中状態は消え、やり直しになる。分散システムが昔から抱える難題が、エージェント時代に中心へ戻った。TemporalのCEO Samar Abbasは「エージェントAIはモデルが足りないから失敗するのではない。周囲のシステムが現実の実行に耐えられないから失敗する」と言い切る。

耐久実行は、クラッシュや再起動をまたいでも処理を中断地点から再開し最後まで終わらせる実行モデルだ。比喩はゲームのセーブポイント。電源が落ちても最後のセーブから再開できれば、やり直さずに済む。しかも開発者はセーブ処理を書かない。裏でワークフローエンジンが各ステップの入出力を記録し(イベント履歴)、落ちてもそれをたどって直前の状態を組み直す。

WorkflowとActivityをどう書くか — OpenAI Agents SDK + Temporalの最小コード

Temporalの中心は2つの概念だ。Workflow(ワークフロー)は処理の流れそのもので、クラッシュしても中断地点から再開される。Activity(アクティビティ)はLLM呼び出しや外部APIなど失敗しうる処理で、入出力が記録され自動でリトライされる。原則は「正常系(ハッピーパス)だけ書けば、エラー処理はTemporalが引き受ける」。これを示すのが、2026年3月にGA(正式版)化したOpenAI Agents SDKとTemporalの統合だ。

from agents import Agent, Runner       # OpenAI Agents SDK のエージェント部品
from temporalio import workflow         # Temporal のワークフロー定義

@workflow.defn                          # ← このクラスを「Workflow」(耐久的な制御フロー)にする
class HelloWorldAgent:
    @workflow.run                       # ← Workflow のエントリーポイント
    async def run(self, prompt: str) -> str:
        # ↓ ここは「ただのエージェント定義」。Temporal を一切意識していない
        agent = Agent(
            name="Assistant",
            instructions="You only respond in haikus.",
        )
        # ↓ この Runner.run 呼び出しが、内部で自動的に「Activity」として実行される
        #   = LLM 呼び出しがクラッシュしても、Temporal が中断地点から再開する
        result = await Runner.run(agent, input=prompt)
        return result.final_output

コードのどこにも「Activityを作る」「リトライする」とは書いていない。@workflow.defn(クラスを耐久的なWorkflowにする目印)を付けるだけで、各エージェント呼び出しは自動でActivity化される。つまずきやすい——「Activityはどこ?」と探しても見つからないが、上のコードの await Runner.run(...) が内部で1つのActivityに化けている。だからこの行がクラッシュしても続きから走り、使ったトークンを無駄にしない。なおActivityは再開時に再実行されうるため、外部書き込みは冪等(2回実行でも結果は1回分)に作る——注文ならIDで「既にあれば作らない」とし二重注文を防ぐ。

Replitはどう本番で使っているか

公式事例の代表が、ブラウザ上のAIコーディング環境Replit(リプリット)だ。Replit Agentの「計画→生成→実行→デバッグ」という長いセッションを、Temporalがオーケストレーション(束ねて管理)している。公式事例によれば、各エージェントが1つのTemporal Workflowとして動き、Workflow IDが一意なので「1セッション=1プロセス」が保証される。人間の承認を挟むhuman-in-the-loopはWorkflowを一時停止して待つ形で実装する。移行も重くなく、2024年11月の検討開始から約2週間で制御基盤を載せ替えたという。さらに複数リージョンに状態を複製するMulti-Region Replicationで、クラウド障害を実際に1件、本番で回避できたとされる。数字は公式発表値だが、最小コードの「中断地点から再開する」仕組みが長時間エージェントを本番で支えていることは見て取れる。

限界と「使わない方がいい場合」— 軽量代替DBOSとの違い

耐久実行は万能ではない。第一に、Workflowのコードには縛りがある。再開は履歴をたどって同じ処理を再生する「決定論的リプレイ」で動くため、Workflow内では乱数・現在時刻・非決定的な入出力を直接使えない(使うと再生のたび結果が変わる)。では時刻や乱数が要るなら?Activity側で取得してWorkflowに渡せばいい。Activityの結果は履歴に残るので、再生時も同じ値が返る。第二に、実行する「ワーカー」と状態を管理する「クラスタ」に分かれる外部オーケストレータ型で、構成が重く学習コストも高い。

唐突だが、もっと手軽な選択肢も知っておきたい。軽量な耐久実行ライブラリDBOS(ディーボス)だ。PostgreSQLに組み込み、既存コードに @DBOS.workflow のようなデコレータを足すだけで耐久性が付く。両者を比較した第三者の解説記事は「多くのバックエンドはDBOSで十分で、壁に当たって初めてTemporalでよい」とまとめる。両者の中立な性能比較は調べた限り世になく(唯一の定量比較はDBOS自社のもの)、本記事も設計思想で使い分けを語る。

新しさも一点。LLMエージェント開発の枠組みLangGraphの「チェックポイント」は耐久実行と別物だ。公式ドキュメントによれば状態が保存されるのはステップの境界で、ステップの途中で落ちるとその回の作業は失われうる(たとえば200件のバッチ処理の47件目で落ちれば、その途中分はやり直しになる)。「状態を保存する」と「最後まで完了させる」は別問題で、本番では推論層をフレームワーク、耐久層をTemporalと分ける併用も定石になりつつある。

次に問われるのは「賢さ」より「壊れにくさ」

Temporalが映すのは、AIエージェントの勝負どころが賢さから「本番で壊れずに走り続ける実行基盤」へ動いた変化だ。耐久実行は、長時間・動的分岐・不安定な依存という、ふつうの実行が苦手な条件でこそ効く。短い処理なら軽い選択肢で足りる。あなたのエージェントは、デモではなく本番の障害をまたいで、最後まで走り切れるだろうか。

参考文献

  1. Temporal 公式ニュース - Temporal raises $300M to make agentic AI real for companies: https://temporal.io/news/temporal-raises-300M-to-make-agentic-ai-real-for-companies
  2. Andreessen Horowitz (a16z) - Investing in Temporal: https://a16z.com/announcement/investing-in-temporal/
  3. Temporal 公式 - Temporal for AI: https://temporal.io/solutions/ai
  4. WorkOS Blog - Maxim Fateev on Temporal, durable execution and AI agents: https://workos.com/blog/maxim-fateev-temporal-durable-execution-ai-agents
  5. Temporal Blog - Production-ready agents with the OpenAI Agents SDK + Temporal: https://temporal.io/blog/announcing-openai-agents-sdk-integration
  6. temporalio/ai-cookbook(公式サンプル集): https://github.com/temporalio/ai-cookbook
  7. Temporal 公式事例 - Replit uses Temporal to power Replit Agent reliably at scale: https://temporal.io/resources/case-studies/replit-uses-temporal-to-power-replit-agent-reliably-at-scale
  8. AgentMarketCap - LangGraph vs Temporal for long-running agent workflows: https://agentmarketcap.ai/blog/2026/04/08/langgraph-vs-temporal-long-running-agent-workflows-2026
  9. LangChain Docs - Durable execution: https://docs.langchain.com/oss/python/langgraph/durable-execution
  10. DBOS Blog - Durable execution: crashproof AI agents: https://www.dbos.dev/blog/durable-execution-crashproof-ai-agents
  11. tiarebalbi - DBOS vs Temporal: Postgres durable execution: https://www.tiarebalbi.com/en/blog/dbos-vs-temporal-postgres-durable-execution
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?