Azure Functionsでのサーバーレス エージェントのランタイム

Azure Functions サーバーレスエージェントランタイムは、イベント駆動型のAIエージェントをAzure Functionsアプリとして構築するためのプログラミングモデルです。 エージェントはHTTPリクエスト、タイマー、キュー、ブロブ、データベースの変更、またはコネクタイベントからスタートできます。 .agent.mdファイルでエージェントを定義し、プロジェクトと共にツールやランタイムのデフォルトを設定し、他の関数型アプリと同様にアプリをデプロイします。 ランタイムはトリガー登録、モデル呼び出し、ツールアセンブリ、セッション履歴、サーバーレスインフラ上の観測性を処理します。

Important

サーバーレスエージェントのランタイムは現在プレビュー段階です。 機能、構成名、およびサポートされているコネクタは、一般公開前に変更される可能性があります。

サーバーレス エージェント ランタイムを使用するタイミング

エージェントがイベントドリブン、ツール豊富、または運用上Azure Functionsワークロードに近い場合は、サーバーレス エージェント ランタイムを使用します。 サーバーレスエージェントランタイムのシナリオには以下が含まれます:

  • 集計、監視、調整、またはレポートを行うスケジュールされたバックグラウンド エージェント。
  • メッセージ、電子メール、アラート、キュー メッセージ、またはデータの変更に対応するイベント ドリブン アシスタント。
  • コネクタを使用して SaaS およびエンタープライズ アプリケーション全体の作業を調整するシステム間エージェント。
  • HTTP、チャット UI、または MCP を介して同じエージェントを公開する会話型フロントエンド。
  • ゼロにスケーリングし、マネージド ID、監視、デプロイ スロット、およびその他のAzureホスティング機能を使用する必要があるエージェント。

以下のシナリオでは、サーバーレスエージェントランタイムが最適とは言えない場合があります:

Scenario より良い選択肢です
決定論的関数を別のAIクライアントのツールとして公開する Azure Functions MCP 拡張機能
人による承認を含む、長時間実行される多段階のオーケストレーション Durable Functions
ノーコードエージェント作成ツール Copilot StudioまたはFoundryのプロンプトエージェント

他のMicrosoftエージェントオプションとの詳細な比較については、「サーバーレスエージェントのランタイムと他のMicrosoftエージェントオプションの比較」をご覧ください。

Tip

サーバーレスエージェントのランタイムを試すには、「Azure Functionsを使ってサーバーレスエージェントを構築する」をご覧ください。 azdテンプレートを使えば、動作するアプリを数分でAzureに展開できます。

Azure Functionsでエージェントを構築する理由

運用エージェントには、プロンプトとモデル以上のものが必要です。 作業を開始する、外部システムを呼び出す、会話履歴を保持する、信頼できないコードを安全に実行する、シークレットなしで認証する、テレメトリを出力する、オンデマンドでスケーリングする信頼性の高い方法が必要です。

Functionsはこれらの運用上の課題に対してイベント駆動型の計算モデルを提供します。 サーバーレスエージェントのランタイムは、その同じモデルをエージェントコードに適用するだけです。 サーバーレスエージェントのランタイムを使ってエージェントコードを構築・実行する利点は以下の通りです:

  • エージェントは作業単位です。 各エージェントは別々のマークダウンファイルで定義されています。
  • イベントはエージェントを起動します。 関数は、スケジュール、HTTPリクエスト、キューメッセージ、ブロブの変更、イベントグリッドイベント、Service Busメッセージ、その他サポートイベントからエージェントを起動させます。
  • 機能は、必要なときにコードを使用して最初に構成されます。 エージェントがリモート MCP サーバー、コネクター名前空間でホストされる MCP サーバー、スキル、およびサンドボックス化されたコードの実行を使用するように構成できます。 アプリ固有のロジック用に自分でPythonベースのツールを書いてみてください。
  • サーバーレスホスティングも利用可能です。 サーバーレスエージェントのランタイムは 、Flex Consumption プランと Dedicated (App Service) プランの両方をサポートしています。 Flex Consumption プランは、ゼロへのスケール、秒単位請求、自動スケーリングを提供します。 両プランともマネージドID、仮想ネットワーク統合、Application Insights統合をサポートしています。
  • 運用配管が組み込まれています。 ランタイムは、エージェントの検出、トリガー登録、ツール アセンブリ、セッション履歴、およびオプションの組み込みエンドポイントを処理します。

Projectの定義

サーバーレスエージェントアプリは、エージェント固有のファイルとともにデプロイされる標準的なPython v2関数アプリプロジェクトです。 以下のプロジェクトファイルは、Python関数アプリで常に必要です:

ファイル Purpose
function_app.py create_function_app() をインポートし、構成されたAzure Functions アプリを返します。
host.json Azure Functions ホストを構成します。
requirements.txt サーバーレス エージェント ランタイム パッケージと、アプリ固有のPython依存関係が含まれます。

詳細については、PythonアプリのAzure Functions開発者参考ガイドをご覧ください。

エージェントランタイムファイル

ランタイムはこれらのエージェント固有のファイルやフォルダを発見し、それらはアプリプロジェクトとともにデプロイされます:

ファイルまたはフォルダー Purpose
*.agent.md エージェントを定義します。 YAML front matter によってエージェントが構成され、マークダウン本文が指示になります。 プロジェクトには少なくとも1つのエージェント定義ファイルが必要です。
agents.config.yaml (任意)モデル、タイムアウト、サンドボックス設定などのアプリ全体のランタイムデフォルトを定義します。
mcp.json エージェントがツールとして使用できるリモートHTTP MCPサーバーを定義し、メール送信やTeamsの操作などのタスクに使えるコネクタツールも含まれます。
tools/ (任意)MCPサーバー、接続、スキル、サンドボックス実行などで提供されていない機能を提供するために作成したカスタムPythonツールが含まれています。
skills/ (任意)エージェントが必要に応じて読み込める再利用可能なプロンプトアセット SKILL.md 含まれています。

各エージェントファイルでは、YAMLフロントマターに続けてMarkdown形式の指示を使用します。 この例は、毎日午後3時(UTC)に動作するタイマートリガーエージェントを定義しています:

---
name: Daily Tech News Email
description: Fetches top tech news and emails a summary daily.

trigger:
  type: timer_trigger
  args:
    schedule: "0 0 15 * * *"
---

You are a news assistant. When triggered, do the following:

1. Gather today's top technology news from reputable sources.
1. Summarize the stories in a concise HTML email body.
1. Email the summary to $TO_EMAIL with the subject "Daily Tech News Summary".

フロントマターは、エージェントの呼び出し方法を宣言します。 マークダウン本文は、実行時にランタイムがモデルに渡す命令ブロックです。 環境変数の置換により、命令と構成値は、 $TO_EMAILなどのアプリ設定を参照できます。

.agent.md ファイルは、1 つのエージェントを定義します。 ファイル名はAzure関数名と組み込みエンドポイントのルートセグメントを派生させます。 nameフィールドはログ、ラベル、ドキュメントの表示名です。

エージェントファイルフィールド、アプリ設定オプション、変数置換ルールの全リストについては、 Serverless agents runtime referenceを参照してください。

アプリの起動プロセス

Functionsホストがアプリを読み込むと、 create_function_app メソッドはプロジェクト内のエージェントファイル(トリガー)、MCPサーバー、スキル、カスタムツールを検出します。 設定の検証、各エージェントのツールの組み立て、必要なトリガーやエンドポイントの登録を行います。

エージェント固有のトリガーが起動すると、ランタイムは解決された命令、モデル、ツール、セッション履歴とともにエージェントを構築し、その後Microsoft Agent Frameworkを使って実行します。

イベントからエージェントをトリガーする

ランタイムはアプリ内で複数のエージェントトリガーをサポートしていますが、エージェントファイルごとにトリガーは1つだけです。 トリガー定義には、 typeargs オブジェクトがあります。 typeはトリガー バインドを識別し、argsには、エージェントを開始するイベントを構成するトリガー固有の設定が含まれています。

一般的なトリガー パターンは次のとおりです。

Pattern
HTTP エージェント 要求を受信し、ツールを呼び出し、構造化された応答を返します。
スケジュールされたエージェント 日次レポート、ダイジェスト、クリーンアップ、または調整ワークフローを実行します。
キューまたはメッセージエージェント モデルの推論またはツール呼び出しを必要とする作業項目を処理します。
ストレージまたはデータベース イベント エージェント 変更されたファイル、レコード、またはイベントに対応します。
コネクタによってトリガーされるエージェント 管理型コネクター(Teamsメッセージ、Outlookメール、コネクターがサポートするカレンダーイベントなど)からのイベントに反応します。

トリガー設定の詳細、サポート型、 args 参照については、 Serverless agents runtime referenceを参照してください。

エージェントにツールを提供する

サーバーレスエージェントのランタイムは、いくつかの種類のツールをサポートしています。 まずは構成済みの機能を使用し、それらのオプションに収まらないアプリ固有のロジックにはカスタム Python ツールを使用します。

リモート MCP サーバー

mcp.jsonでリモートHTTPまたはストリーム可能なHTTP MCPサーバーを定義します。 ランタイムはこれらのサーバーを発見し、すべてのエージェントにそのツールを提供します。 エージェントが別のサービスによってホストされているツールを呼び出すか、アプリの境界を越えてエージェントとツールを作成する必要がある場合は、リモート MCP サーバーを使用します。

Azure コネクタ

コネクタを使用すると、エージェントはカスタム API クライアント コードなしで外部サービスを操作できます。 コネクターネームスペースは、Microsoft 365 Outlook、Teams、Salesforce、SAP、SQLなどのサービスのための接続、トリガー、MCPサーバーをホストします。 コネクタトリガーを使って外部イベントからエージェントを起動し、コネクタMCPツールを使ってエージェント命令からサービスアクションを呼び出します。

スキル

再利用可能なプロンプトアセットを skills/に保存してください。 各スキルフォルダには名前、説明、マークダウンの指示が記載された SKILL.md ファイルが含まれています。 ランタイムは自動的にスキルを発見し、エージェントに利用可能にします。 スキルは基地エージェントの指示を小さく保ちつつ、必要に応じてドメイン固有のガイダンスを提供できます。

サンドボックス実行

ランタイムはAzure Container Apps動的セッションを使ってエージェントにexecute_pythonツールを提供します。 このツールはPythonを分離されたセッションプールで実行し、コード実行やデータ分析のタスクに役立ちます。 セッションプールエンドポイントを agents.config.yamlで設定してください。

カスタム Python ツール

アプリ固有の機能はカスタムPythonツールを使ってください。 .pyフォルダにtools/ファイルを追加し、実行時パッケージの@toolで関数を装飾します。 ランタイムはこれらのツールを自動的に発見し登録します。

各ツールタイプの構成詳細、フィールドテーブル、コード例については、 Serverless agents runtime referenceを参照してください。

セッションと状態

エージェントとの複数ターンの対話には、セッション履歴が必要です。 Azureでは、ランタイムは関数アプリのAzureWebJobsStorageアカウントを通じてセッション履歴をBlob Storageに保存します。 ローカル開発の場合、ランタイムはファイルベースのセッション履歴にフォールバックされます。 サンドボックス実行はセッション認識能力を持ち、無関係なエージェント実行には分離されたセッションを使用します。

Observability

azure-functions-agents-runtime バージョン 0.1.0b6 以降、ランタイムには、現在も活発に開発中で今後変更される可能性があるオブザーバビリティ機能セットが含まれています。

最新の設定詳細、テレメトリフィールド、使用ガイダンスについては、ランタイムリポジトリのドキュメントをご利用ください: