1
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?

【Azure Logic Apps】Consumptionプランで自律型AIエージェントを実装してみた(TeamsチャットからLogic Appを再実行)

1
Last updated at Posted at 2026-03-05

はじめに

Azure Logic Appsを運用していると、一時的なエラーなどで失敗したワークフローを「再実行(Resubmit)」する作業が頻繁に発生します。通常、これを行うにはAzureポータルにログインし、対象のリソースを探し、実行履歴から該当のIDを特定してボタンを押す……という複数のステップが必要です。

「これをTeamsからチャット感覚で指示できたら楽なのに」という思いから、今回はLogic Apps (Consumption) に新しく追加された 「自律型AIエージェント (Autonomous Agent)」 を利用し、Teamsチャットのメッセージからリソースを特定して再実行まで完結させるBotを構築しました。

実は従来のLogic Appsの標準的なアクション(分岐やループ)だけでも実装は可能ですが、あえてエージェントを使うことで得られるメリットや、実装上の工夫をまとめました。


1. なぜ「自律型AIエージェント」なのか?

今回の「メッセージを解析してAPIを叩く」という要件は、普通のLogic Appsでも実装可能です。しかし、あえて自律型AIエージェントを使用した理由は以下の通りです。

・ 表記揺れへの対応

「Logic App Aを再送信」「Aの0858...をリサミット」といった曖昧な指示を、AIが文脈を汲み取って解釈してくれます。

従来のアプローチでは、正規表現や複雑な文字列操作が必要でしたが、AIを使うことで自然言語のバリエーションに柔軟に対応できます。

・ ロジックの極小化

これが最大のメリットです。 成功・失敗時の分岐条件や、返信メッセージの組み立て(Compose)をAIに委譲することで、デザイナー上のワークフローが劇的にシンプルになります。

従来のアプローチ(Conditionアクション使用):

ツール 1実行 → Condition: 成功?
  ├─ True: ツール 2実行 → Condition: 成功?
  │   ├─ True: ツール 3実行 → Condition: 成功?
  │   │   ├─ True: 成功メッセージ作成 → Teams送信
  │   │   └─ False: エラーメッセージ作成 → Teams送信
  │   └─ False: エラーメッセージ作成 → Teams送信
  └─ False: エラーメッセージ作成 → Teams送信

自律型エージェント:

Agent: ツール 1実行 → 判断 → 適切な次のツールを選択

重要
Logic Apps Autonomous Agentでは、ConditionやSwitch、Foreachなどの制御フローアクションが使用できません。そのため、従来のように「処理にConditionで分岐」することができず、ツールの分割とAIの自律判断に頼る設計が必須となります。

・ 動的な意思決定

実行失敗時に「何が原因か」をAIが判断し、次のツールを自律的に選択して適切なエラー案内を作成します。

例えば、ツール2で失敗した場合、AIは「ツール1は成功しているからメッセージ解析は問題ない。でもツール2で失敗したということはLogic Appが見つからなかった」と判断し、適切なエラーメッセージを生成します。

さらに重要なのは、メッセージの内容自体もAIが動的に生成することです。成功時には詳細情報を含む丁寧なメッセージを、エラー時には状況に応じた具体的な対処方法を含むメッセージを、AIが自律的に作成します。

これにより、メッセージ組み立て用の複雑なComposeアクションやテンプレート管理が不要になり、Agent Instructionsで出力フォーマットを指定するだけで、AIが適切なメッセージを生成してくれます。

2. アーキテクチャ全体像

AI(Agent)が「頭脳」となり、事前に定義した 5つの「ツール(手足)」 を必要に応じて呼び出します。

アーキテクチャ図

・ 5つのツール構成

ツール名 役割(単一責任) 特徴
ツール 1: Parse Message メッセージから文字列を抽出 ChatCompletion APIで柔軟に解析
ツール 2: Get Logic App Info 名前からリソースIDを特定 Resource Graphで全サブスクリプションを検索
ツール 3: Get Trigger Name トリガー名を取得 実行履歴APIから自動取得
ツール 4: Resubmit Workflow 再実行APIを実行 Resubmit API呼び出し
ツール 5: Send Teams Reply Teamsに投稿 AIが生成したメッセージを送信

従来のLogic Appsでは、これらすべての矢印を「条件分岐(Switch/If)」で繋ぐ必要がありましたが、自律型エージェントでは 「次にどのツールを使うべきか」「どんなメッセージを送るべきか」をAIが自律的に判断 します。

実際のLogic Appsデザイナー上の構成は以下の通りです。

デザイナー画面

AIエージェントが「頭脳」となり、その配下に「ツール(手足)」となるアクション群が並ぶ、非常にスッキリした見た目になります。

・ 実行フローの例

成功時:

User: "resubmit TestApp 0858..."

Agent: ツール 1 (Parse Message) → 成功
       workflowName: "TestApp", runName: "0858..."
       
Agent: ツール 2 (Get Logic App Info) → 成功
       subscriptionId, resourceGroupを取得
       
Agent: ツール 3 (Get Trigger Name) → 成功
       triggerName: "manual"
       
Agent: ツール 4 (Resubmit Workflow) → 成功(202)

Agent: "成功した!適切な成功メッセージを作成しよう"
       message: "✅ Logic App実行の再送信が完了しました
                📋 詳細:
                - Logic App: TestApp
                - 実行名: 0858...
                - ステータス: 再送信受付完了(202 Accepted)
                
                新しい実行が開始されました。"
       
Agent: ツール 5 (Send Teams Reply) → メッセージ送信

エラー時(権限不足):

User: "resubmit TestApp 0858..."

Agent: ツール 1~3 → 成功

Agent: ツール 4 (Resubmit Workflow) → 失敗(403)

Agent: "403エラーだ。権限不足のエラーメッセージを作成しよう"
       message: "❌ Logic App実行の再送信に失敗しました
                📋 詳細:
                - エラー: 権限が不足しています。
                         Logic App Contributor以上の権限が必要です
                - ステータスコード: 403
                
                対処方法:
                - IT管理者に権限付与を依頼してください"
       
Agent: ツール 5 (Send Teams Reply) → エラーメッセージ送信

ポイント: メッセージ内容はAIが動的に生成するため、エラーの種類に応じて自然で適切な文章になります。


3. 権限設定

AgentがAzureリソースを操作するため、Logic AppのマネージドIDに以下のロールを付与します。

役割 (Role) スコープ 目的
Reader サブスクリプション Resource Graphで対象のLogic App IDを検索するため
Logic App Contributor サブスクリプション 再実行 (Resubmit) APIを実行するため

権限設定

権限付与の省略
通常、Logic AppからAI(Azure OpenAI)を直接呼び出すには Cognitive Services OpenAI User 権限が必要です。しかし今回は、「別のLogic Appをプロキシとして経由し、ChatCompletion APIを呼び出す」 構成をとっています。これにより、本ワークフロー自体へのAI関連権限の付与を省き、権限管理の分離と簡素化を実現しました。


4. Agent インストラクション(AIへの指示書)

エージェントの挙動を左右する「インストラクション」は、Geminiなどの生成AIに叩き台を作成してもらうのが最も効率的です。

「以下のツール(API)を使って、Teamsからの再実行依頼を処理するLogic Appエージェントの指示書を書いて」と依頼して作成したものがこちらです。

・ 完全なAgent Instructions

あなたはAzure Logic Appsの再実行を担当するAIエージェントです。

## 役割
Teamsチャットから送信されたメッセージを解析し、指定されたLogic Appの実行を再送信(resubmit)します。

## 処理フロー
1. ユーザーのメッセージからLogic App名と実行名(Run Name)を抽出
2. Logic Appsのリソース情報を取得
3. トリガー名を取得
4. 実行を再送信
5. 結果に応じてメッセージを生成し、Teamsチャットに返信

## メッセージ解析ルール
ユーザーのメッセージには以下のいずれかの形式が含まれます:
- 「resubmit」キーワードが必ず含まれる
- Logic App名と実行名は柔軟な表現が可能
  - 例1: "resubmit\nLogic apps A\n08584318751676908512439077168CU46"
  - 例2: "TestLogicAppというLogic appsの08584318751676908512439077168CU46を再実行して"
  - 例3: "resubmit TestLogicApp 08584318751676908512439077168CU46"

## エラーハンドリング
以下のエラーが発生した場合、適切なエラーメッセージをTeamsに返信してください:
- Logic Appが見つからない → "Logic App '{name}' が見つかりませんでした"
- 実行履歴が見つからない → "実行履歴 '{runName}' が見つかりませんでした"
- 権限不足 (403) → "権限が不足しています。Logic App Contributor以上の権限が必要です"
- その他のエラー → HTTPステータスコードとエラーメッセージを表示

## 出力フォーマット
成功時:
✅ Logic App実行の再送信が完了しました
📋 詳細:
- Logic App: {workflowName}
- 実行名: {runName}
- ステータス: 再送信受付完了(202 Accepted)

失敗時:
❌ Logic App実行の再送信に失敗しました
📋 詳細:
- エラー: {error_message}
- ステータスコード: {status_code}

・ Agent Instructionsのポイント

重要: 「出力フォーマット」セクションで、AIが生成すべきメッセージの具体例を明示しています。

これにより、AIは状況に応じて適切なメッセージを自動生成します。メッセージ組み立て用の複雑なComposeアクションやテンプレート管理が不要になり、メッセージフォーマットの変更もAgent Instructionsを修正するだけで完結します。


5. ツール実装と「単一責任の原則」

各ツールは 「一つの役割だけを完璧にこなす」 という単一責任の原則を遵守させます。これによりAIの迷いがなくなり、精度が向上します。

今回用意した5つのツールは以下の通りです。

ツール名 役割(単一責任) Agent Parameters
Parse Message メッセージから必要な文字列を構造化データとして抽出する messageContent
Get Logic App Info 名前からAzureリソースIDを特定する workflowName
Get Trigger Name 管理APIから対象のトリガー名を取得する subscription, resourceGroupName, workflowName, runName
Resubmit Workflow 指定されたIDに対して再実行APIを実行する subscription, resourceGroupName, workflowName, triggerName, runName
Send Teams Reply AIが生成した文章をTeamsに投稿する message

Send Teams Replyツールの特徴:

  • Agent Parameterはmessageの1つだけ
  • messageの内容はAIが自動生成
  • メッセージをそのまま送信するだけのシンプルな構造

6. 実装深掘り:Get Logic App Info

ここでは、エージェントが「名前」から「リソースの実体」を特定する重要なツールをご紹介します。

・ Agent Parameter の役割

エージェントはツールを呼び出す際、Agent Parameter を介して情報をやり取りします。
Zennの記事でも紹介されている通り、これは「AIがそのツールを使うために必要な引数」を定義するものです。

Agent Parameter

ここでは workflowName というパラメーターを定義し、AIが「ユーザーのメッセージから見つけた名前」をここに入れるよう指示しています。

・ 内部ロジック:Azure Resource Graph

ツールの内部では、AIから渡された名前を使って Azure Resource Graph をクエリします。

image.png

「Compose - ResourceGraphQuery」アクションで使用したKQLクエリ

resources
| where type == 'microsoft.logic/workflows' and name == '@{agentParameters('workflowName')}'
| project id, name, resourceGroup, subscriptionId

このクエリにより、AIは「名前」という断片的な情報から、API実行に必要な「完全なリソースID」へと情報を補完することができます。

なぜComposeアクションを使うのか?

  1. 保守性: クエリの変更が容易
  2. 可読性: デザイナー上で処理フローが明確
  3. デバッグ: 各ステップの出力を実行履歴で確認可能

7. Agent のデバッグ方法

「AIがなぜその行動をとったのか?」は、右側の実行履歴 Agent Log から詳細に確認できます。

image.png

ログを見ると、AIが「まずメッセージを解析し、次にリソース情報を探し……」というステップを順次踏んでいることがわかります。最後に「Logic App実行の再送信が完了しました」というメッセージをAIが自ら生成し、Send Teams Replyを叩いている様子まで一目瞭然です。

・ Agent Logで確認すべきこと

  1. ツール実行順序: 期待通りの順序でツールが呼ばれているか
  2. Agent Parameter: 各ツールに渡されたパラメータが適切か
  3. AIが生成したメッセージ: messageパラメータの内容が適切か

・ メッセージが期待と異なる場合

原因: Agent Instructionsの「出力フォーマット」が不十分

解決策:

  1. Agent Instructionsの「出力フォーマット」セクションをより詳細に
  2. 含めるべき情報を明示的に列挙
  3. 複数のシナリオ(成功、各種エラー)の例を追加

例:

## 出力フォーマット

成功時:
✅ Logic App実行の再送信が完了しました

📋 詳細:
- Logic App: {workflowName}
- 実行名: {runName}
- ステータス: 再送信受付完了(202 Accepted)

新しい実行が開始されました。

失敗時(権限不足):
❌ Logic App実行の再送信に失敗しました

📋 詳細:
- エラー: 権限が不足しています。Logic App Contributor以上の権限が必要です
- ステータスコード: 403

対処方法:
- IT管理者に権限付与を依頼してください

失敗時(リソース未検出):
❌ Logic App実行の再送信に失敗しました

📋 詳細:
- エラー: Logic App '{workflowName}' が見つかりませんでした
- ステータスコード: 404

対処方法:
- Logic App名のスペルを確認してください
- Logic Appが削除されていないか確認してください

8. 設計のポイントまとめ

・ 単一責任の原則

各ツールは1つの役割のみ担当。

Good:
ツール 1: Parse Message → メッセージ解析のみ
ツール 5: Send Teams Reply → メッセージ送信のみ

Bad:
ツール: Parse and Generate and Send
→ 解析 + メッセージ生成 + 送信 = 3つの責任

・ AIへの委譲の原則

可能な限りAIに判断・生成を委譲することで、Logic Appsの構成をシンプルに保ちます。

AIに委譲していること:

  1. ツール実行順序の判断 - 次にどのツールを呼ぶか
  2. エラーハンドリング - どの段階で失敗したか判断
  3. メッセージ生成 - 状況に応じた適切なメッセージ作成

開発者が定義すること:

  1. ツール定義 - 各ツールの責任と処理内容
  2. Agent Instructions - AIの行動指針と出力フォーマット
  3. Agent Parameter - ツールへの入力仕様

・ Agent Instructionsの重要性

メッセージ生成をAIに任せる場合、Agent Instructionsが極めて重要になります。

必須要素:

  1. 出力フォーマットの明確な例 - 成功時・失敗時の具体的なメッセージ
  2. エラーケースごとのメッセージ内容 - 403, 404, その他
  3. 含めるべき情報の指定 - workflowName, runName, statusCodeなど

おわりに

Consumption Logic App で自律型エージェントを構築する最大のメリットは、「ロジックの管理をAIに丸投げできる」 点にあります。

  • 各ツールを 単一責任 で作成する。
  • Agent Parameter を適切に定義してAIとツールを繋ぐ。
  • メッセージ生成すらAIに任せて、アクション数を減らす。

これらを意識することで、メンテナンス性が高く、かつ自然言語の揺らぎに強い強力な運用Botが完成します。皆さんもぜひ、ポータルを開く手間をAIに肩代わりさせてみてください!


参考資料


1
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
1
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?