Azure Logic Apps での AI エージェントとモデルを使用したワークフロー を試す

Azure Logic Apps に新登場したエージェント ワークフローで遊んでみた記録です。このワークフローのポイントとしてはエージェント自身が指示に従い、取るべきアクションを考えて遂行してくれるところのようです。

およそこちらのドキュメントに従います。
[AI エージェントとモデルを使用してワークフローを作成する - Azure Logic Apps | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/logic-apps/create-agent-workflows)


## エージェント ワークフローとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/31d2bcf0-5f28-49aa-a94f-6ab468e2657e.png)
> All the benefits of Stateful, plus the option to build AI agents.

[AI エージェントとモデルを使用したワークフロー - Azure Logic Apps | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/logic-apps/agent-workflows-concepts)

> エージェントを使用するワークフローは、エージェント以外のワークフローに課せられる制限を超えて進化する可能性があります。 


## ワークフローを作成してみる

Workflow type が Agentic になります。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/c43e1006-704d-4855-8f77-9960a1ec4ffd.png)

デザイナー上はこんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/f2ca8999-6833-48fd-9a31-464e4d664bc7.png)

コードはこんな感じです。まっさらです。

```json
{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {},
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "triggers": {}
    },
    "kind": "Agentic"
}
```

## エージェントに接続する

エージェントを動かすために、接続を作成します。以下があらかじめ必要です。

> Azure OpenAI サービス リソース。
> Azure OpenAI サービス リソース用にデプロイされた Azure OpenAI サービス モデル。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/d0c3a4ec-1adc-4688-bb7e-409253a30e51.png)

[AI エージェントとモデルを使用してワークフローを作成する - Azure Logic Apps | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/logic-apps/create-agent-workflows)

詳細は上記ドキュメントにありますが、以下ではマネージド ID を使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/560760d5-313d-4e60-9ca1-ce3b234f02ec.png)


> マネージド ID 認証を使用するには、Standard ロジック アプリ リソースでシステム割り当てマネージド ID を有効にする必要があります。 既定では、システム割り当てマネージド ID は Standard ロジック アプリで有効になっています。 現在、このリリースでは、ユーザー割り当てマネージド ID の使用はサポートされていません。

> システム割り当て ID が無効になっている場合は、 ID を再び有効にします。
システム割り当て ID には、 最小特権の原則に基づいて、Microsoft Entra ロールベースのアクセス (RBAC) に対して次のいずれかのロールが必要です。

> - Cognitive Services OpenAI ユーザー (最小特権)
> - Cognitive Services OpenAI 共同作成者


## エージェントに指令する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/cc652704-d4d2-40f8-bbb3-7fb2a9f5c4cf.png)

### チャットに投稿するよう設定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/f76ff4cf-6489-42b4-9616-1b64239a021c.png)

ここでは以下をパラメータとして送ってみます。

```json
{"text":"おなかがすいたよ"}
```

### 実行する

ペイロードで実行してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/ca408e36-8e3e-4aa9-802f-a80cc0cd8083.png)

入力文が見えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/8829f527-58ef-415a-b063-d34535d98cc5.png)

以下のように投稿してくれました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/f391eb76-da70-416a-bda2-6ba41d69bd2b.png)

「アイスが食べたいよ」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/db56008f-39df-4919-a2b6-06042e1bf3b2.png)

無事 文 と合わせて 絵文字 を投稿してくれました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/a7eae99f-9bcd-4cf2-b9ae-d006345c1de4.png)


## コード

コード全文は以下のようになりました。

```json
{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Default_Agent": {
                "type": "Agent",
                "inputs": {
                    "parameters": {
                        "agentModelType": "AzureOpenAI",
                        "deploymentId": "gpt-4o",
                        "messages": [
                            {
                                "role": "system",
                                "content": "以下に入力された文に従って感情を判断してそれを絵文字のみで表現し Teams で投稿してください。@{triggerBody()?['text']}"
                            }
                        ],
                        "agentModelSettings": {
                            "agentHistoryReductionSettings": {
                                "agentHistoryReductionType": "maximumTokenCountReduction",
                                "maximumTokenCount": 128000
                            },
                            "deploymentModelProperties": {
                                "name": "gpt-4.1",
                                "format": "OpenAI",
                                "version": "2025-04-14"
                            }
                        }
                    },
                    "modelConfigurations": {
                        "model1": {
                            "referenceName": "agent"
                        }
                    }
                },
                "tools": {
                    "Tool": {
                        "actions": {
                            "チャットまたはチャネルでメッセージを投稿する": {
                                "type": "ApiConnection",
                                "inputs": {
                                    "host": {
                                        "connection": {
                                            "referenceName": "teams-1"
                                        }
                                    },
                                    "method": "post",
                                    "body": {
                                        "recipient": {
                                            "groupId": "<Teams の Group ID>",
                                            "channelId": "<Teams の Channel ID>"
                                        },
                                        "messageBody": "<p class=\"editor-paragraph\">@{triggerBody()?['text']} @{agentParameters('メッセージ')}</p>"
                                    },
                                    "path": "/beta/teams/conversation/message/poster/Flow bot/location/@{encodeURIComponent('Channel')}"
                                }
                            }
                        },
                        "description": "Agent の答えをチャットに渡します",
                        "agentParameterSchema": {
                            "type": "object",
                            "properties": {
                                "メッセージ": {
                                    "type": "string",
                                    "description": "Agent の出力"
                                }
                            },
                            "required": [
                                "メッセージ"
                            ]
                        }
                    }
                },
                "runAfter": {},
                "limit": {
                    "count": 100
                }
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "triggers": {
            "When_a_HTTP_request_is_received": {
                "type": "Request",
                "kind": "Http",
                "inputs": {
                    "schema": {
                        "text": "<text>"
                    }
                }
            }
        }
    },
    "kind": "Agentic"
}
```

## まとめ

[AI エージェントとモデルを使用してワークフローを作成する # エージェントのシステム指示を設定する](https://learn.microsoft.com/ja-jp/azure/logic-apps/create-agent-workflows#set-up-system-instructions-for-the-agent) に以下説明があります。

>エージェントには、エージェントが実行できるロールと、エージェントが実行できるタスクを記述する システム命令 が必要です。 エージェントがこれらの責任を学習して理解できるように、次の情報を含めることもできます。

> - ワークフロー構造
> - 使用可能なアクション
> - 制限または制約
> - 特定のシナリオまたは特殊なケースの相互作用

> 最良の結果を得るには、システム命令が規範的であり、複数の反復でこれらの命令を調整する必要がある

命令がテキトウだったり、関連するアクションが用意されていなかったりすると、エージェントさんはアクションを遂行できません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/3eb13efa-5885-42ac-abce-1095a154979e.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/e6073bb4-9090-425e-9043-320131a1c632.png)


[AI エージェントとモデルを使用してワークフローを作成する # エージェントとツールのベスト プラクティス](https://learn.microsoft.com/ja-jp/azure/logic-apps/create-agent-workflows#best-practices-for-agents-and-tools) にもあるように "Compose" アクションを使用してプロトタイプの形から作っていくのが良さそうです。

### その他関連

[📢Announcing agent loop: Build AI Agents in Azure Logic Apps 🤖 | Microsoft Community Hub](https://techcommunity.microsoft.com/blog/integrationsonazureblog/%F0%9F%93%A2announcing-agent-loop-build-ai-agents-in-azure-logic-apps-%F0%9F%A4%96/4415052)
[🤖 Agent Loop Demos 🤖 | Microsoft Community Hub](https://techcommunity.microsoft.com/blog/integrationsonazureblog/%F0%9F%A4%96-agent-loop-demos-%F0%9F%A4%96/4414770)
[AI プレイブック、例、サンプル - Azure Logic Apps | Microsoft Learn](https://learn.microsoft.com/ja-jp/azure/logic-apps/ai-resources#ai-agent-and-model-powered-workflows-preview)


以上お試しのまとめでした！