UiPath AIエージェント活用ガイド ~ Agent Builderの使い方

# 2025年は「AIエージェント元年」！

最近、さまざまな場面で耳にするフレーズです。

AIエージェント（AI Agent）とは、人工知能（AI）を活用し、ユーザーの指示や意図を理解した上で、自律的にタスクを遂行するソフトウェアエージェントを指します。

従来のルールベースの自動化とは異なり、AIエージェントは大規模言語モデル（LLM）を活用し、環境に適応しながら意思決定を行うことが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/d115d47e-e482-4e87-b29a-dcdc79d39e10.png)

上記のGoogleトレンドのデータからもわかるように、「AI Agent」への関心は2024年後半から急速に高まっています。特に2025年に入ると検索数が大幅に増加し、AIエージェントが市場で重要なトピックとなっていることが伺えます。

こうした流れの中で、UiPathは、エージェンティックAI（Agentic AI）を活用した新たな戦略を展開しています。この戦略の中心は、**AIエージェント、ロボット、人間、モデルを組み合わせ、エンタープライズ全体でエンドツーエンドのプロセスにおけるAI変革を実現する「エージェンティックオートメーション」** です。 

詳細については、以下の記事をご参照ください。

https://www.uipath.com/ja/ai/agentic-ai

# この記事から得られること

**本記事では、UiPath Agent Builderを活用した業務自動化の実践方法** について詳しく解説します。記事は少し長めですが、実践することで以下のメリットを得ることができます。  

✅ これまで1週間かかっていた業務自動化の開発が、たった2時間以内で完了する可能性があります。
- Agent Builderを活用することで、複雑な業務フローの自動化が簡単かつ迅速に実現可能。

✅ 人間しかできなかった判断を含むプロセスも自動化でき、業務の自動化レベルが飛躍的に向上します。

✅ 従来のRPAでは対応が難しかった業務の「最後の一マイル」まで自動化できるようになります。  
- 従来のRPAでは処理が難しかった「例外処理」や「エスカレーション」もスムーズに自動化。

# UiPath Agent Builder とは？

AIエージェントの活用が進む中、UiPathは「Agentic Automation」の概念を推進し、企業がより高度な自動化を実現できるよう取り組んでいます。その中心となるのが Agent Builder です。

Agent Builder は、**エージェント、ロボット、人間が協調しながら業務を遂行できるようにする開発ツールであり**、UiPath Cloudプラットフォームと密接に統合されています。

本記事では、UiPath Agent Builderやその他のUiPath製品を活用し、実際の業務において Agentic Automation をどのように実現できるのかをご紹介します。

:::note info
**ライセンスについて**
本記事で紹介する製品を利用するには、ライセンスやAI Unitが必要になる場合があり、Community版では使用できません。
また、**一部の機能は現在Preview段階のため**、ライセンスが揃っていても使用できない場合があります。
**導入を検討される際は、事前に貴社のUiPath管理者へご確認ください。**
:::

# 自動化する業務の概要、課題及びAI Agentによる解決策

以下では、具体的な業務シナリオの概要を説明します。

このシナリオでは、設備保守管理者が保守が必要な設備を特定し、適切な保守要員を選定・アサインする業務を行います。
もし適切な要員が見つからない場合は、設備保守責任者へエスカレーションし、手動で調整を行います。
最後に、アサイン結果を社内のTeamsで通知します。

以下のフロー図は、この業務プロセスの流れを示しています。(`#FFDDC1`：保守管理者 作業； `#D1E8FF`：保守責任者 作業)

```mermaid
graph TD;
    A[設備保守管理者が作業開始] -->|保守管理システムをチェック| B(保守が必要な設備を特定)
    B -->|保守要員リストを確認| C(保守要員を選定)
    C -->|適切な要員が見つかった？| D{Yes}
    C -->|見つからない| E{No}
    
    D -->|要員A・Bを決定| F(要員をアサイン)
    F -->|Teamsで通知| G[通知完了]
    
    E -->|保守責任者にエスカレーション| H(手動で要員を調整)
    H -->|要員を確保| F

    style A fill:#FFDDC1,stroke:#FF5733,stroke-width:2px;
    style B fill:#FFDDC1,stroke:#FF5733,stroke-width:2px;
    style C fill:#FFDDC1,stroke:#FF5733,stroke-width:2px;
    style D fill:#FFD1E8,stroke:#D90057,stroke-width:2px;
    style E fill:#FFD1E8,stroke:#D90057,stroke-width:2px;
    style F fill:#FFDDC1,stroke:#FF5733,stroke-width:2px;
    style G fill:#FFDDC1,stroke:#FF5733,stroke-width:2px;
    style H fill:#D1E8FF,stroke:#0057D9,stroke-width:2px;
```

✅ **業務フローの詳細説明：**

1. 設備保守管理者が設備保守管理システムをチェックし、保守が必要な設備を特定します。
2. Excelの保守要員リストから、該当設備に対応可能な要員を選定します。
3. 要員が見つかった場合：
   - 要員A・Bを決定し、アサインします。
4. 要員が見つからない場合：
   - 設備保守責任者へエスカレーションし、手動で対応要員を調整します。
5. 最終的なアサイン結果をTeamsで通知します。

✅ **保守要員リストの補足説明：**

保守要員リストには、単に要員のスキルや対応可能な設備情報だけでなく、**要員同士の関係性など、ルール化が難しい情報も含まれています。**
例えば、「要員AとBが過去に対立したことがある」「要員DとFが元恋人である」など、人間関係に関わるデータも記載されています。そのため、単純なスキルマッチングだけでなく、チームの円滑な運用を考慮した判断が求められます。

## 従来型 RPA の課題

従来の RPA では、定型的な業務の自動化は可能ですが、ルール化が難しい判断が求められる業務 や、人間による介入が必要なケース に対応するのが困難です。今回の業務においても、以下のような課題がありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/fe9cced1-ee9c-4651-bb9f-4fb96dc2fe06.png)

1. **選定する際に、ルール化が難しい情報を考慮する必要がある**
    - 保守要員のアサイン時には、スキルマッチングだけでなく、人間関係や過去のトラブル履歴 なども考慮しなければなりません。
    - こうした情報は単純なルールベースでは処理が難しく、従来の RPA では自動化が困難でした。
2. **選定できなかった場合の対応が手作業**
    - 適切な保守要員が見つからない場合、責任者が判断し、手動で調整を行う必要があります。 
    - この際、責任者への連絡、要員の調整結果の受け取り、情報の整理などが手作業で行われるため、煩雑になりやすい という課題がありました。

## AI エージェントによる解決策

これらの課題を解決するために、UiPath Agent Builder を活用した AI エージェント を導入し、以下の 3 つのステップで業務を自動化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/fb407ac5-b4a9-4a3f-bffc-a9b0c0a82187.png)


1. **保守要員の選定**  
   - 保守要員リストと、特定された保守が必要な設備リストを参照し、大規模言語モデル（LLM）を活用して最適な要員を選定します。  
   - これにより、従来のルールベースの RPA では考慮できなかった要素を AI が判断可能になります。  

2. **要員選定ができなかった場合の対応**  
   - LLM が適切な要員を選定できない場合、自動的にエスカレーション用のタスクを作成し、保守責任者に通知します。  
   - これにより、手作業での連絡や管理の負担を大幅に削減できます。  

3. **結果の整理・整形**  
   - LLM が選定した要員リストと、保守責任者が手動で選定した要員リストを統合し、HTML のテーブル形式に変換 します。  
   - これにより、関係者への情報共有がスムーズになり、管理の効率化が図れます。 

# 業務で利用するシステムとファイル

本業務には、以下の2つの主要なシステムとファイルを活用します。
**① 設備管理システム**
設備の保守状況を一元管理する社内のWebシステム([設備管理システム](https://junli-web-host.s3.ap-northeast-1.amazonaws.com/setsubi.html))です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/d4532c7e-9c1e-400c-a3f8-c78e349ea3a7.png)

**② 保守要員リスト（Excelファイル）**
設備保守を担当する要員の一覧を管理する社内のExcelファイル([保守要員リスト](https://junli-web-host.s3.ap-northeast-1.amazonaws.com/%E4%BF%9D%E5%AE%88%E8%A6%81%E5%93%A1%E3%83%AA%E3%82%B9%E3%83%88_20250207.xlsx)) です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/6dd0cae6-47c1-4a48-a429-98964eea3f91.png)

# 使用するUiPath製品

Agent Builder は、AIエージェントを活用して業務プロセスを自動化する強力なツールです。他のUiPath製品と組み合わせることで、さらに高度な自動化を実現できます。

本業務の自動化には、UiPathの複数の製品を組み合わせて活用します。以下に、各製品の役割と活用ポイントを一覧で紹介します。


| 製品名                 | 用途 |
|------------------------|----------------------------------------------------------------|
| **UiPath Agent Builder**  | 保守未対応設備一覧を基に、保守要員リストを参照し、適切な要員をアサインするAIエージェントを開発します。 |
| **UiPath Studio Web**     | 保守管理システムから未対応設備一覧を取得し、Agentに渡した後、アサイン結果をTeamsに通知するワークフローを開発します。 |
| **UiPath Action Center**  | 保守責任者へのエスカレーション処理を行い、手動対応が必要なケースを管理します。 |
| **UiPath Apps**          | エスカレーション用のインターフェースを開発し、保守責任者が対応できる専用画面を構築します。 |
| **UiPath Orchestrator**  | ストレージバケットを利用し、保守要員リストや業務関連データを安全に保存・管理します。 |
| **UiPath AI Trust Layer** | ストレージバケットに保存された保守要員リストのファイルを基に、データ検索や参照のためのインデックスを作成します。 |

:::note info
**権限について**
本業務の自動化に使用するUiPath製品の一部機能は、特定の権限が必要となる場合があります。
そのため、**権限が不足していて実施できない場合は、貴社のUiPath管理者へご相談ください。**
:::



# 業務自動化の開発

本記事は Agent Builder に関する内容であり、以下の設定手順の詳細は省略しています。設定方法については、それぞれのリンクを参照し、**設定がうまくいかない場合は、記事のコメント欄にてご質問ください。**

- **Integration Service**
   - 今回のワークフローでは、Teamsでのメッセージ送信を利用するため、事前に Integration Service で当該プロセス内で必要となる接続情報を設定してください。
   - 詳細な手順については、以下の公式ドキュメントをご参照ください。 

https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/connections


- **Automation Ops**
   - 「エージェントを実行」アクティビティは現在プレビュー版であるため、Studio Web からアクティビティを使用するには、Automation Ops上のポリシー変更が必要となります。  
   - ポリシー変更の方法については、以下の公式ドキュメントをご参照ください。  

https://docs.uipath.com/ja/automation-ops/automation-cloud/latest/USER-GUIDE/settings-for-studio-web-policies

次に、以下の手順で設備保守業務の自動化を開発します。
| 手順 | 内容 |
|------|----------------------------------------------------------------|
| **保守要員リストを Orchestrator のストレージバケットにアップロード** | 保守要員リスト（Excelファイル）を **UiPath Orchestrator** のストレージバケットに保存します。 |
| **UiPath AI Trust Layer でインデックスを作成** | ストレージバケット内の保守要員リストのインデックスを作成します。これにより、Agent がデータを効率的に参照できるようになります。 |
| **UiPath Apps でエスカレーション用画面を開発** | エスカレーション用のインターフェースを **UiPath Apps** で作成し、保守要員が見つからなかった場合に設備保守責任者が対応できる仕組みを構築します。 |
| **UiPath Agent Builder でエージェントを作成** | 設備管理システムのデータを基に、最適な保守要員を選定しアサインするエージェントを開発します。 |
| **UiPath Studio Web でワークフローを開発** | 1. 設備管理システムから未対応設備の情報を取得し、Agent に渡す。<br>2. Agent の結果を受け取り、Teams に通知するワークフローを作成。 |

## 1. Orchestratorのストレージバケットにアップロード

今回は、Sharedフォルダ内にストレージバケットを作成し、ファイルを格納する設定にします。
- ストレージバケット名：保守設備関連情報
- ファイル名：保守要員リスト_20250207.xlsx ([ファイルリンク](https://junli-web-host.s3.ap-northeast-1.amazonaws.com/%E4%BF%9D%E5%AE%88%E8%A6%81%E5%93%A1%E3%83%AA%E3%82%B9%E3%83%88_20250207.xlsx))

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/2a5faad1-bcd3-42d5-a58d-4120861b6624.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/a6302c8a-a66e-42d8-980f-e83932121e64.png)

## 2. UiPath AI Trust Layerでインデックスを作成

管理画面から、**コンテキストグラウンディングの利用**に必要なインデックスを追加します。  

**手順：**  
1. Admin > AI Trust Layer > コンテキストグラウンディング タブを開く。  
2. テナントとフォルダーを選択する。  
3. [新規追加] をクリックする。  
3. インデックス名とストレージバケットを入力し、[今すぐ同期] をクリックします。<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/fa2ae73d-a61b-4fcd-80b6-e29d29317e36.png"  width="280">

## 3. 自動化の全体設計

エージェントを設計する際は、単一機能に特化した小規模なエージェントを作成することがベストプラクティス とされています。
また、Agentの呼び出しはワークフローが行い、エスカレーション（Apps画面）を起こすのがAgentの役割です。

ベストプラクティスを基に、該当業務の自動化の全体像は以下の通りです。（`#FFDDC1`：ロボット(従来型RPA) 作業；`#FFD1E8`：Agent 判断・作業； `#D1E8FF`：人間介入(エスカレーション)）

```mermaid
graph TD;
    A[設備一覧を抽出] --> B[アサインAgent 作動]
    B --> C[アサイン結果を取得]
    C -->|アサインできなかった場合| D[エスカレーションAgent 作動]
    D --> E[手動で要員をアサイン]
    E --> F[手動アサイン結果を取得]
    
    C -->|アサインできた場合| G[アサイン済み要員を統合]
    F --> G

    G --> H[HTML文整形用Agent 作動]
    H --> I[整形されたHTML文を取得]
    I --> J[Teamsへ送信]


    style A fill:#FFDDC1,stroke:#FF5733,stroke-width:2px;
    style B fill:#FFD1E8,stroke:#D90057,stroke-width:2px;
    style C fill:#FFDDC1,stroke:#FF5733,stroke-width:2px;
    style D fill:#FFD1E8,stroke:#D90057,stroke-width:2px;
    style E fill:#D1E8FF,stroke:#0057D9,stroke-width:2px;
    style F fill:#FFDDC1,stroke:#FF5733,stroke-width:2px;
    style G fill:#FFDDC1,stroke:#FF5733,stroke-width:2px;
    style H fill:#FFD1E8,stroke:#D90057,stroke-width:2px;
    style I fill:#FFDDC1,stroke:#FF5733,stroke-width:2px;
    style J fill:#FFDDC1,stroke:#FF5733,stroke-width:2px;
```

## 4. ワークフロー開発：① 設備一覧を抽出

UiPath Cloud で Studio Web を起動し、[新規作成] → [オートメーション] をクリックします。
トリガーの選択 で、[手動のオートメーション] を指定します。

以下の手順でワークフローを作成します。

1. [設備管理システム](https://junli-web-host.s3.ap-northeast-1.amazonaws.com/setsubi.html)を開きます。
1. 「アクティビティを追加」 アイコンの➕ をクリックします。
1. 検索欄に 「表データを抽出」 と入力し、「表データを抽出」 アクティビティを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/f7bd9c35-87f7-4506-8cc2-098ce9e565aa.png)

1. 「アプリケーション/ブラウザーを使用」 アクティビティの作業スコープ内で、「設備管理システム」 を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/f5e3f517-e644-4656-8ecf-3db742f76bd3.png)

1. 「表データを抽出」 アクティビティの 「画面上でターゲットを指定」 をクリックし、「設備管理システム」 内の設備一覧の表を指定します。（＊「表データを抽出」 アクティビティの設定方法が不明な場合は、[表抽出](https://docs.uipath.com/ja/activities/other/latest/ui-automation/table-extraction)ページをご参照ください。）
1. Agent にデータを渡すため、データテーブルをテキストに変換します。
    - 「データテーブルをテキストとして出力」 アクティビティを追加し、「表データを抽出」 アクティビティの出力データをテキストに変換します。
1. ワークフローの可読性を向上させるため、適宜アクティビティの名前を修正してください。

## 5. エージェント作成：① アサインAgent

UiPath Cloud で Agents (Preview) を起動し、[New Agent] をクリックします。
以下の手順で Agent を作成します。
1. 該当AgentのNameとDescriptionを設定します。
    - Name: 保守要員アサインAgent
    - Description: 未対応設備一覧を抽出し、保守要員リストを参照して、保守要員をアサインします。
1. 「Contexts」で、[Add context] をクリックし、上記で作成したインデックスを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/a2aa7893-ea3b-42e5-ac81-de7718b2daac.png)
1. 「Prompt」 セクションで、[Arguments] ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/97c55284-2d93-4f17-b88d-1c225dfe30e7.png)
4. [引数] ページ が表示されます。ここでは、UiPath Studio / Robot がエージェントを呼び出す際に渡すことができる入力引数と出力引数を指定します。
4. [Edit raw schema] トグルを有効化すると、直接 JSON 形式で入力することも可能です。
    - Input schema （入力データ：テキスト型の設備一覧データ）
        ```json
        {
          "type": "object",
          "properties": {
            "MaintainList": {
              "type": "string",
              "properties": {},
              "required": [],
              "description": "設備名と保守状態（未対応、対応済）の一覧です"
            }
          },
          "required": [
            "MaintainList"
          ]
        }
        ```

4. 出力スキーマがなくても、エージェントは出力を返すことができますが、スキーマを指定するとより便利になります。
    - Output schema（出力データ：未対応設備とアサインした保守要員データ）
        ```json
        {
          "type": "object",
          "properties": {
            "NeedToMaintainMemberList": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "EquipmentName": {
                    "type": "string",
                    "description": "設備名"
                  },
                  "Deadline": {
                    "type": "string",
                    "description": "保守期限"
                  },
                  "Status": {
                    "type": "string",
                    "description": "ステータス"
                  },
                  "MaintenancePersonnel_A": {
                    "type": "string",
                    "description": "保守要員A"
                  },
                  "MaintenancePersonnel_B": {
                    "type": "string",
                    "description": "保守要員B"
                  },
                  "AssignmentReason": {
                    "type": "string",
                    "description": "アサイン理由"
                  }
                },
                "required": [
                  "EquipmentName",
                  "Deadline",
                  "Status",
                  "MaintenancePersonnel_A",
                  "MaintenancePersonnel_B",
                  "AssignmentReason"
                ]
              },
              "description": "未対応設備一覧とアサインされたメンバーの一覧です。"
            }
          },
          "required": [
            "NeedToMaintainMemberList"
          ]
        }
        ```
4. 次に、Agent へ指示を出すために、System Prompt と User Prompt を設定します。プロンプトのベストプラクティスについては、[効果的なプロンプトを記述する](https://docs.uipath.com/ja/autopilot/other/latest/overview/effective-prompts)ページをご参照ください。
    - System Prompt (エージェント向けの手順)
        ```
        #役割:
        あなたは設備保守期限のチェックと要員アサインをするエージェントです。
        
        #手順
        以下の手順を1つずつ実行します。
        1. 保守設備一覧から、ステータスが「未対応」の設備を抽出します。
        2. 抽出した未対応一覧から、CONTEXT "MaintainManagementIndex"を参照して、該当設備の保守資格を持っている保守要員を探してください。探すときに、以下のルールを守ってください。
        　- 一つの設備に二人の保守要員をアサインしてください。最低一名は保守資格を持つ必要があります。該当保守資格を持っている要員を保守要員Aに格納してください。
        　- 二人の保守要員をアサインする際に、チームの円滑な運用するため、備考欄を参照してアサインしてください。
        　- 保守要員が見つからなかったら、「該当者なし」と記載してください。
        　- アサインする理由もアサイン理由に記載してください。
        ```
    
    - User Prompt:(エージェントを呼び出す人またはロボットへの指示。)
        ```
        保守設備一覧 : {{MaintainList}}
        ```
4. これで、アサイン Agent の作成が完了しました。右側の MaintainList に以下の入力データを入力し、[Run] をクリックして検証します。
    ```
    設備名,保守期限,ステータス,操作 タービン発電機 TG-1000EX,2023-12-31,未対応,編集 削除 送配電システム TDS-5000X,2023-11-15,対応済み,編集 削除 産業用モーター IM-750AX,2023-09-12,期限切れ,編集 削除 産業用ロボット IR-300MZ,2024-01-05,未対応,編集 削除 SCADAシステム SCADA-X9000,2023-10-20,対応済み,編集 削除 UPS UPS-2000FX,2024-03-15,未対応,編集 削除 ストレージソリューション ES-8500R,2023-12-01,期限切れ,編集 削除 インフラ監視システム IMS-780EX,2024-05-10,対応済み,編集 削除 鉄道用電力機器 RP-4500TX,2024-02-28,未対応,編集 削除 原子炉施設,2024-02-16,未対応,編集 削除 風力発電機,2024-03-12,未対応,編集 削除 信号システム RSS-300L,2023-11-30,期限切れ,編集 削除
    ```
5. しばらく待ち、実行結果を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/db86f380-c44b-4c9e-a4a6-07c32306f0c1.png)

## 6. ワークフロー開発：② アサイン結果を取得

次に、上記で作成した [アサイン Agent] を呼び出し、出力データを取得した後、保守要員のアサインができなかった設備があるかを確認します。

1. 「データテーブルをテキストとして出力」アクティビティの下に、「エージェントを実行」アクティビティを追加します。
    -  エージェント: 作成したアサインAgentを選択
    -  MaintainList：「データテーブルをテキストとして出力」アクティビティの出力データを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/70ef54b8-06ca-4e36-a3eb-63a8193377e6.png)

2. アサイン Agent の出力データは Array 型のため、繰り返し処理を行う必要があります。
そのため、「繰り返し (コレクションの各要素)」アクティビティ を追加します。
    - 次のコレクション内の各要素： Agentの出力の「NeedToMaintainMemberList」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/96c6caa3-328b-4a4b-a048-7b616dfebc85.png)

3. 項目名も分かりやすい名前に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/24de6185-f994-431e-a82b-344215f1da5f.png)

4. 保守要員のアサインができなかった設備があるかを確認するため、「条件分岐 (If)」アクティビティ を追加します。条件欄の右側のアイコンをクリックし、条件ビルダー を選択します。(条件：保守要員Aが「該当者ない」 OR 保守要員Bが「該当者ない」) ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/5b13d4f6-d5c7-41b9-8dfb-9d92df83e80a.png)
4. ここまでで、保守要員のアサインができなかった設備のフィルタリングが完了しました。
次に、エスカレーション用 Agent を呼び出すため、UiPath Apps でエスカレーション用の保守要員確認画面を開発します。

## 7. Apps 開発とデプロイ：保守要員確認

UiPath CloudでAppsを起動し、[新しいアプリを作成]をクリックします。名前に「保守要員アサイン確認」に入力し、「作成」をクリックします。

Appsに関する詳細な使い方は以下のページよりご参照ください。

https://docs.uipath.com/ja/apps/automation-cloud/latest/user-guide/introduction

### Appsの開発

以下の手順でAppsを開発します。
1. 「空のページ」を選択します。
1. 「コントロールを追加」 の右側をクリックし、「アクション」 を選択します。（この Apps は、エスカレーション用の Action の一部として使用します。）![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/fd67e3c7-2ae7-42c3-a10f-4d96eb751e05.png)
1. ActionSchema にて、アクションのプロパティを以下のように設定します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/358535ca-1fce-45d8-9382-1d2db87ca49e.png)
1. 「コントロールを追加」 の右側をクリックし、「コントロール」 を選択します。設備名や保守要員 A、保守要員 B を表示・入力できるテキストボックスを追加します。
1. 「テキストボックス」 を右側の設計パネルにドラッグ＆ドロップします。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/78eccb06-6388-4cbe-8337-a6c7d9ce2df5.png)
1. 該当テキストボックスの右側の属性パネルにて、以下の設定を行います。
    - ラベル：設備名
    - 既定のテキスト：アクションの入力プロパティ（EquipmentNameInput）
     ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/fda15001-e34e-4486-a20b-4c4b3f870b6e.png)
    - 必須：True
    - 無効化：True (設備名が修正不可のため)
1. 上記の手順と同様に、保守要員 A と保守要員 B のテキストボックスを追加します。
    - 保守要員 A および保守要員 B は修正可能なため、無効化の設定はデフォルトの False のままとし、変更不要です。
1. 最後に、保守要員を指定した後、確定するためのボタンを追加します。
    -  確認ボタンの 「イベント」 → 「ルールを作成」 をクリックします。
1. ➕ アイコンをクリックし、以下の操作を行います。
    - 「値を設定」 を 3 つ追加し、コントロールに入力した値をアクションプロパティの出力として設定します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/9d2442fd-8574-4990-a834-ccccea2fac54.png)
    - Submit 後に、テキストボックスの値も更新されるように、2 つの「値を設定」を追加し、コントロールに入力した値をテキストボックスに反映します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/93c9f2f6-d35b-43c9-982c-f2681bfe872b.png)
    - 「アクションを送信」 を追加し、アクションの結果を 「Submit」 に設定します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/9d797542-dae0-4be4-be9c-c9b7e11f813d.png)

1. これで、エスカレーション用 Apps の開発が完了しました。

### Appsの開発がうまくできない場合

Appsの開発がうまくできない場合は、開発済みの [保守要員アサイン確認.uiapp ](https://junli-web-host.s3.ap-northeast-1.amazonaws.com/%E4%BF%9D%E5%AE%88%E8%A6%81%E5%93%A1%E3%82%A2%E3%82%B5%E3%82%A4%E3%83%B3%E7%A2%BA%E8%AA%8D.uiapp)ダウンロードをし、UiPath Apps にインポートしてアプリを作成してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/5f19240e-7b77-4e7c-a504-577bad7c3d4e.png)

### 作成済Appsのデプロイ

該当AppsがAgentから呼び出せるために、パブリッシュをして指定フォルダにデプロイをする必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/c819e615-56e2-44fb-88e9-6c7912dd5b64.png)


次に、デプロイを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/ed5339c3-66db-4aeb-ac23-bf175c5f845d.png)

指定したフォルダで、[アプリをデプロイ] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/befcbaf7-5ae7-4410-87bd-4d2fcd1d66fe.png)

これで、Agent のエスカレーション時に、この Apps を使用できるようになりました。

## 8. エージェント作成：② エスカレーションAgent

### エージェントの作成

上記の アサイン Agent と同じ作成方法のため、詳細な説明は省略します。
設定する項目は以下の通りです。
- Name: エスカレーションAgent
- Description: 保守要員が見つからなかった場合、設備保守責任者へエスカレーションを行い、保守要員を手動で指定します。
- Argument(Input schema):
    ```json
    {
      "type": "object",
      "properties": {
        "Input_EquipmentName": {
          "type": "string",
          "description": "設備名"
        },
        "Input_A_MaintenancePersonnel": {
          "type": "string",
          "description": "保守要員A（手動指定待ち）"
        },
        "Input_B_MaintenancePersonnel": {
          "type": "string",
          "description": "保守要員B（手動指定待ち）"
        }
      },
      "required": [
        "Input_EquipmentName",
        "Input_A_MaintenancePersonnel",
        "Input_B_MaintenancePersonnel"
      ]
    }
    ```
- Argument(Output schema):
    ```json
    {
      "type": "object",
      "properties": {
        "Output_A_MaintenancePersonnel": {
          "type": "string",
          "description": "手動指定した保守要員A"
        },
        "Output_B_MaintenancePersonnel": {
          "type": "string",
          "description": "手動指定した保守要員B"
        }
      },
      "required": [
        "Output_A_MaintenancePersonnel",
        "Output_B_MaintenancePersonnel"
      ]
    }
    ```
- System prompt: 
    ```
    #役割:
    あなたは、設備保守の担当者として、保守要員が見つからなかった場合に、関連情報を設備保守責任者へエスカレーションするエージェントです。
    
    #手順
    以下の手順を順番に実行します。
    1. 以下の情報を設備保守責任者へエスカレーションします。
    　- 設備名
    　- 保守要員A（手動指定待ち）
    　- 保守要員B（手動指定待ち）
    2. エスカレーションで、設備保守責任者が、保守要員Aと保守要員Bを手動で指定し、指定した結果を出力します。
    ```
- User prompt: 
    ```
    - 設備名： {{Input_EquipmentName}}
    - 保守要員A（手動指定待ち）： {{Input_A_MaintenancePersonnel}}
    - 保守要員B（手動指定待ち）： {{Input_B_MaintenancePersonnel}}
    ```
- Escalationsで、デプロイしたAppsを選択します。以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/ab77cfdb-6d15-4630-a68a-86c2bc8437fe.png)

### 作成済エージェントの検証

作成した Agent を検証します。
以下の手順で Input を入力し、[Run] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/77d3d7de-e9b1-465d-8f1a-451672646f62.png)

実行を開始すると、以下のような Action Center のタスクが作成され、設備保守責任者へエスカレーションされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/ceb6f8d8-ce7f-4ac7-863a-6d1c57d621b0.png)

[Open] をクリックすると、Action Center に遷移します。
設備保守責任者は、手動で保守要員を指定し、[確認] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/9eee28a6-2d95-462a-a30e-f3abdf73d027.png)

Action Center でのタスクが完了すると、Agent 側の実行も完了し、出力を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/00197e8e-dedc-4366-a8cc-5b0443cffc3f.png)

## 9. ワークフロー開発：③ 手動アサイン結果を取得

[ワークフロー開発：② アサイン結果を取得](https://qiita.com/utanesuke/private/0ddb7decc495b9c3391d#%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E9%96%8B%E7%99%BA-%E3%82%A2%E3%82%B5%E3%82%A4%E3%83%B3%E7%B5%90%E6%9E%9C%E3%82%92%E5%8F%96%E5%BE%97)では、保守要員のアサインができなかった設備をフィルタリングしました。

次に、以下の手順で エスカレーション Agent からの出力（手動アサイン結果）を取得し、自動アサイン結果と統合します。
1. Studio Web の右側にある データマネージャー を開き、以下の 3 つの変数を追加します。
    - 手動保守要員A：テキスト（エスカレーション前後の保守要員Aを保存）
    - 手動保守要員B：テキスト（エスカレーション前後の保守要員Bを保存）
    - 最終アサイン結果一覧：テキスト（自動アサイン結果と手動アサイン結果を統合したものを保存）
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/2706aa5b-4602-42a9-b8d2-5d547620cbe8.png)
2. 変数 「最終アサイン結果一覧」 にヘッダー（設備名、保守期限 など）を最初に記入するため、**「繰り返し (コレクションの各要素) 設備アサインアイテム」 アクティビティの前に**、「変数の値を設定」 アクティビティを追加します。
    - 変数：最終アサイン結果一覧
    - 設定する値（[式エディター]を開く）： `"設備名,保守期限,ステータス,保守要員A,保守要員B,アサイン理由" + System.Environment.NewLine`　
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/9947841d-e032-4cc8-b8da-319f361846ea.png)
3. 引き続き、**「繰り返し (コレクションの各要素) 設備アサインアイテム」 アクティビティの内部**に、変数「手動保守要員 A」 と 「手動保守要員 B」 を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/45263b24-e58a-4834-b89f-b674ce31c0a8.png)
4. 次に、エスカレーション Agent を呼び出します。入力および出力の変数を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/a147e382-d6df-4fb1-824e-7a806ec8e4c9.png)
5. エスカレーション Agent 側からの出力を受け取るため、再度 2 つの「変数の値を設定」 を追加し、変数「手動保守要員 A」 と 「手動保守要員 B」 を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/11f593bc-6237-470b-aa3d-2f7c8e4969af.png)
6. 最後に、これらの結果を 「最終アサイン結果一覧」 に追加します。
    - 変数：最終アサイン結果一覧 
    - 設定する値（[式エディター]を開く）：
        ```
        最終アサイン結果一覧 + 設備アサインアイテム.EquipmentName + "," + 設備アサインアイテム.Deadline + "," + 設備アサインアイテム.Status + "," + 手動保守要員A.ToString + "," +手動保守要員B.ToString+ "," + "設備保守の責任者から手動アサイン" + System.Environment.NewLine
        ```
7. 「条件分岐 (If)」 アクティビティの Else ブランチでは、自動アサインが成功した場合の結果を処理します。
これらのデータも 「最終アサイン結果一覧」 に追加します。
    - 変数：最終アサイン結果一覧 
    - 設定する値（[式エディター]を開く）：
        ```
        最終アサイン結果一覧 + 設備アサインアイテム.EquipmentName + "," + 設備アサインアイテム.Deadline + "," + 設備アサインアイテム.Status + "," + 設備アサインアイテム.MaintenancePersonnel_5F_A + "," + 設備アサインアイテム.MaintenancePersonnel_5F_B + "," + 設備アサインアイテム.AssignmentReason + System.Environment.NewLine
        ```
8. また、適宜 「メッセージをログ」 アクティビティを挿入し、途中の結果を随時確認してください。

## 10. エージェント作成：③ HTML文整形用Agent

上記の アサイン Agent と同じ作成方法のため、詳細な説明は省略します。
設定する項目は以下の通りです。
- Name: HTML文整形用Agent
- Description: 入力からもらったテキストをHTMLのテーブルに整形します。
- Argument(Input schema):
    ```json
    {
      "type": "object",
      "properties": {
        "FinnalyAssignmentResult_Text": {
          "type": "string",
          "description": "最終アサイン結果一覧_テキスト"
        }
      },
      "required": []
    }
    ```
- Argument(Output schema):
    ```json
    {
      "type": "object",
      "properties": {
        "FinnalyAssignmentResult_HTML": {
          "type": "string",
          "description": "最終アサイン結果一覧_HTML文"
        }
      },
      "required": []
    }
    ```
- System prompt:
    ```
    #役割:
    あなたは、入力からもらったテキストをHTMLのテーブルに変換するエージェントです。
    
    #手順
    以下の手順を順番に実行します。
    1. 入力からもらった最終アサイン結果のテキストをHTMLのテーブルに変換します。
    ```
- User prompt:
    ```
    最終アサイン結果のテキスト:{{FinnalyAssignmentResult_Text}}
    ```


## 11. ワークフロー開発：④ 整形されたHTML文の取得及びTeams送信

次に、HTML 文整形用 Agent を呼び出し、HTML の出力を取得して、Teams のグループチャット にメッセージを送信します。

1. 「エージェントを実行」 アクティビティを追加し、HTML 文整形用 Agent を呼び出します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/d06659c0-fe51-4af3-b38a-ad74bc459194.png)
1. 「グループ チャット メッセージを送信」アクティビティを追加し、以下のように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/7c0bbbe5-9466-4cd5-9124-5155ea0c7adc.png)

:::note info
上記の Teams 送信アクティビティ を使用するには、Microsoft Teams のコネクションを作成する必要があります。作成方法は[Integration Service ユーザー ガイド
](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/introduction)ページをご参照ください。

また、メンション時の User ID は、[Azure のユーザーページ](https://portal.azure.com/?quickstart=true#view/Microsoft_AAD_UsersAndTenants/UserManagementMenuBlade/~/AllUsers)より取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/f77e9c68-abe4-4bfa-b605-2fa178828b1a.png)
:::
ここまでで、ワークフロー開発が完了しました。

参考までに、開発済みのワークフローは[保守要員アサイン自動化.uip](https://junli-web-host.s3.ap-northeast-1.amazonaws.com/%E4%BF%9D%E5%AE%88%E8%A6%81%E5%93%A1%E3%82%A2%E3%82%B5%E3%82%A4%E3%83%B3%E8%87%AA%E5%8B%95%E5%8C%96.uip) からご確認いただけます。

# 全体動作確認

ここまでで、ワークフローの開発が完了しました。  
次に、**全体の動作確認** を行い、各プロセスが正しく機能することを検証します。  
- 保守要員の自動アサインが正常に行われるか  
- エスカレーションが適切に実行されるか  
- Teams への通知が正しく送信されるか  
- 全体の処理フローが期待通りに進むか  

検証手順に従い、一連の処理を実際に実行し、動作を確認します。
1. ワークフローを実行します。
1. しばらく待つと、保守要員のアサインができなかった設備があり、ワークフローの実行が一時停止され、UiPath Action Center に以下のようなタスクが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/bcf44f53-4315-4050-8526-8be9553a4a95.png)
1. 保守責任者は、このタスクを確認し、手動で保守要員 A および保守要員 B を指定し、[確認] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/74f83e26-f1a9-4652-9a90-6fb6fd99cf45.png)
1. すべてのタスクを完了すると、最後に Teams に以下のような通知が届きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177240/cc41bd99-502c-48ce-a14d-cb6bdfcb14f3.png)

これで、全体の処理フローが期待通りに進んだことを確認できました。

# 次のステップ：AIエージェントの精度と安定性を向上させる

ワークフローの基本的な動作が確認できたら、次の段階として、**AI エージェントの精度と安定性を高める工夫** を行うことで、より実用的なシステムへと進化させることができます。  

✅ **プロンプト文の最適化**
エージェントの判断や出力のばらつきを減らし、より厳密で安定した結果を得るために、プロンプト文の改善を行います。  

✅ **Agent Builder の評価機能を活用**
Agent Builder には評価機能が備わっており、作成したエージェントの実行結果を評価することができます。

これらを活用し、エージェントが期待通りの動作をしているか、誤差や改善点を分析することで、さらなる品質向上が可能になります🚀