株式会社エムニ
🧙‍♂️

OpenAI Agent SDKとAzure Durable Functionsの統合について調べたのでまとめる

に公開

こんにちは、株式会社エムニのエンジニア/PMの宮木です。
先日リリースされたOpenAI Agent SDKとAzure Durable Functionsの記事が面白かったのでキャッチアップがてらまとめていきます。
出典:https://techcommunity.microsoft.com/blog/appsonazureblog/openai-agent-sdk-integration-with-azure-durable-functions/4453402

背景

近年、生成 AI の進歩により、複数のタスクを自律的に実行するエージェントが注目を集めています。エージェントは大規模言語モデル (LLM) を用いて外部ツールを呼び出しながら目的を達成しますが、複数のステップを経るため実運用では信頼性が課題となります。例えば、APIのレート制限やネットワークの一時的な障害が発生した場合、処理が途中で停止し、最初からやり直す必要があることもあります。このような状況を避けるためには、進行状態を保存し、障害時に再開できる仕組みが不可欠です。

前提知識

OpenAI Agents SDKとは

OpenAI Agents SDK は、エージェントを簡単に構築するための Python 向けフレームワークです。重要なポイントは次のとおりです。

  • エージェントとツールの概念 – エージェントはユーザからのリクエストを受け取り、必要に応じてツール(Python 関数)を呼び出します。SDK はツール関数を自動的に関数呼び出し用のスキーマに変換してくれるため、任意の Python 関数を簡単にツールとして登録できます。
  • エージェントループ – エージェントは指定されたインストラクションに従い、最初に回答を試みます。情報不足の場合は適切なツールを呼び出し、その結果を使って再度回答する、というループを自動的に管理します。このループが完了するまで SDK が処理を調整してくれるため、開発者はタスクロジックに集中できます。
  • ハンドオフとマルチエージェント – エージェントは自分で対処できないサブタスクを別のエージェントに委任(handoff)できます。例えば一次分類を行う「トリアージエージェント」が、顧客対応を行う「CRMエージェント」に処理を引き継ぐ、といったシナリオです。
  • ガードレール – エージェントが入力や出力に対して事前に定めたルールを満たしているかを検証し、不正なデータや危険な操作を防止します。

これらの機能により、Agents SDK はツール呼び出しのシーケンスやエージェント間の連携を簡潔な Python コードで記述できます。ただし、SDK 自体は状態を保持する機能を持たず、長時間実行時のリトライや再開は開発者側で実装する必要があります。

Azure Durable Functionsとは

Azure Functions はイベント駆動型のサーバレスコンピューティングサービスで、AI 統合において次のような利点があります。

  • イベント駆動で自動スケーリング – トリガーが発生すると関数が起動し、需要に応じてインスタンスが増減します。使用していないときはスケールインしてコストを抑えられます。
  • Azure OpenAI との統合 – OpenAI バインディング拡張により、Azure OpenAI サービスへのアクセスが簡単になり、チャットボットや RAG (retrieval‑augmented generation) ワークフローを手軽に実装できます。
  • Durable Functions 拡張によるワークフロー – 通常の関数はステートレスですが、Durable Functions 拡張を使うとステートフルなワークフローを記述できます。これにより複数ステップの処理、リトライ、タイマー、外部イベント待ちなどを一つのワークフローとして定義できます。

Durable Functions の特徴を生かすと、複雑な AI 処理も安全に実行できます。例えば、長時間実行される旅行プラン作成エージェントでは、要件収集 → 検索 → 提案の承認 → 予約処理という一連のステップを状態付きで管理し、途中で失敗しても復元できます。

なぜ統合が必要なのか

Agents SDK 単体では、エージェントがどのステップまで進んだかという「状態」を管理しません。そのため、レート制限やクラッシュによりプロセスが途中で失敗すると、最初からやり直さなければならないことが多くなります。また、ツール呼び出しや人間の承認を含む複雑なワークフローを自前で調整するのは容易ではありません。Azure Durable Functions は、こうした課題を解決するための耐久的オーケストレーションを提供します。状態を自動的に保存し、失敗時に最後のチェックポイントから再開できるため、コストの高い LLM 呼び出しや長時間の処理を安全に扱えます。さらに、Durable Functions のリトライポリシーにより、外部サービスの一時的な失敗に対して自動再試行が行われます。

統合のしくみ

OpenAI Agent SDK と Azure Durable Functions の統合 は、上記の双方の長所を組み合わせ、エージェントシステムに耐障害性を与える試みです。具体的には、次のような機能が提供されています。

  • durable_openai_agent_orchestrator デコレータ – Durable Functions のオーケストレーター関数に適用することで、エージェントの実行を自動的に永続化します。エージェントがツールを呼び出すたびに状態が保存され、失敗後もその地点から再開できます。
  • run_sync メソッド – 通常の Runner.run() と同等の API でエージェントを実行しながら、Durable Functions のアーキテクチャに基づき処理を同期的にスケジュールします。オーケストレーター内で非同期関数を扱わずとも耐久性を確保できます。
  • create_activity_tool 関数 – 高コストな API 呼び出しや非決定的な処理を Durable Functions のアクティビティとして分離し、自動リトライと履歴保持を行います。従来の @function_tool デコレータを用いる方法と比べ、再実行時の余分な課金や副作用を抑制できます。
  • トレーシングと可観測性 – Durable Task Scheduler のダッシュボードに、各 LLM 呼び出しやツール呼び出しが耐久的タスクとして表示され、入出力や成功・失敗の履歴を確認できます。従来の Agents SDK に加えて、Azure 側の監視基盤も活用できるため、複数エージェントの調整が容易になります。
  • 複数インスタンスへのスケールアウト – Durable Functions はバックエンドのコンピューティングリソースを自動でスケーリングし、長時間実行を複数ノードに分散できます。これにより、並列的な LLM 呼び出しや大規模なマルチエージェント処理でも安定したパフォーマンスを発揮します。

これらの機能により、Agents SDK で記述したエージェントをほぼそのまま Durable Functions 上に移行し、プロダクション環境に耐える信頼性を備えられます。たとえば、元のエージェントコードに数行のデコレータを追加するだけで実行履歴が保存され、クラッシュ後も途中から再開できるようになります。ツール呼び出しが失敗しても自動でリトライされるため、冪等性を意識した安全な実装を手軽に実現できます。

実例

まず、OpenAI Agents SDK を普通に使う例:

import asyncio
from agents import Agent, Runner

async def main():
    agent = Agent(
        name="Assistant",
        instructions="You only respond in haikus.",
    )
    result = await Runner.run(agent, "Tell me about recursion in programming.")
    print(result.final_out)

これを Durable Functions 統合版に書き換えると:

from agents import Agent, Runner

@app.orchestration_trigger(context_name="context")
@app.durable_openai_agent_orchestrator  # 耐久的にエージェントを実行
def hello_world(context):
    agent = Agent(
        name="Assistant",
        instructions="You only respond in haikus.",
    )
    result = Runner.run_sync(agent, "Tell me about recursion in programming.")
    return result.final_output

この例では、durable_openai_agent_orchestrator デコレータを付与し run_sync を使うだけで、耐久性を持ったエージェント実行に変わります。コードの大部分はそのままで済むため、既存のエージェントに容易に組み込めます。

まとめ

OpenAI Agent SDK と Azure Durable Functions の統合は、AI エージェントを実運用で使う際の障害を大きく低減します。API レート制限やネットワーク障害による処理中断を心配することなく、エージェントが途中から再開できるため、複雑なタスクやマルチエージェントワークフローを安心して実装できます。また開発者にとっては既存の Agents SDK コードに数行加えるだけで済み、Durable Functions の豊富なワークフローパターンを活用して高度なアプリケーションを構築できるのが魅力です。

最後に

株式会社エムニではAIエージェントの社会実装をともに進めていくメンバーを募集しています。
最新技術にどんどん触れられるし、自分のアイデアがすぐ形になる環境なので、エンジニアとしてはかなり楽しいと思います。
生成AIを使ったアプリケーション開発に興味ある方はぜひカジュアル面談からお声がけください!

エントリーはこちらから
https://www.emuniinc.jp/recruit

株式会社エムニ
株式会社エムニ

Discussion