【UiPath】AI Trust Layerによる個人情報のマスキング

# はじめに
本記事ではUiPath製品を使用して、入力テキストに含まれる個人情報を自動的に識別してマスキングする方法について説明します。マスキングには **UiPath AI Trust Layer** に含まれる `個人情報および機密情報のフィルタリング(PII and sensitive data filtering)` 機能を利用します。この機能は **UiPath GenAI アクティビティ** によって容易に実装することができます。

:::note warn
UiPath GenAI アクティビティは2024年4月時点ではプレビューリリースです。
現在は無料でお使いいただけますが、今後の正式リリースではAI Unitsなどのライセンスが必要となる可能性がありますのでご注意ください。
最新情報は [UiPath GenAI アクティビティ コネクタについて](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/uipath-uipath-airdk) をご確認ください。
:::

## UiPath AI Trust Layerとは？

![UiPath AI Trust Layer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/eec8abd6-a5d2-f06d-e7e3-fa83daffc8f2.png)

UiPath AI Trust Layerは、企業のデータプライバシーポリシーと責任あるAI原則にソフトウェア定義のガバナンスを追加することで、ユーザーが生成AIによる自動化を責任を持って拡大できるよう支援するものです。その基本原則には「信頼性」「透明性」「コントロール」があります。
|原則|概要|
|---|----|
|信頼性|UiPathは、UiPath 製品およびサードパーティLLMとやり取りするデータを最高レベルで保護します。生成AI機能を使用したデータの監査記録は、倫理的かつコンプライアンスの基準を維持するために重要です。|
|透明性|UiPathのユーザーは、生成AI機能、モデルの使用、および UiPath プラットフォームからサードパーティLLMへのデータ転送の使用状況を完全に把握できるようになります。ダッシュボード監査ツールとコストコントロールツールを通じて、責任あるAI駆動の自動化の価値を拡大します。|
|コントロール|UiPathのユーザーは、LLMに送信される可能性のある機密データや有害なデータの軽減に対する管理制御と、生成AI機能の開発者への適切なアクセスを管理するロールベースのポリシーを備えている必要があります。|

UiPath AI Trust Layerは以下の機能を提供します。

|機能|概要|
|--|----|
|生成AI機能のコントロール|サードパーティLLMのトレーニングポリシーをデフォルトでオプトアウトする組織レベル・テナントレベルでの生成AI機能へのアクセスと管理コントロールを提供します。|
|**PII/機密データのフィルタリング**|個人を特定できる情報(PII)はマスクされ、データは保存時および転送時に暗号化され、サードパーティLLMの改善には使用されません。<br>**※本記事ではこの機能を使用します。**|
|使用状況の監査とコスト管理|UiPath が管理する 生成AIモデルと接続されたモデルを通じて、生成AI機能のコストと使用状況の分布を可視化します。|
|Context Grounding|検索拡張生成(RAG)を通じてビジネスコンテキストの基盤をプロンプトに提供することで、企業がLLMの精度を向上させるのに役立ちます。|
|LLMゲートウェイ|すべての顧客データの機密性を保ちながらLLMに送信する、一元化されたセキュアなプロキシサービスを提供します。|
|UiPath LLMs|文書処理に特化した **DocPATH**、コミュニケーションに特化した **CommPATH** などUiPath製品用にトレーニングされたモデルと連携します。|

詳細は次のサイト(英語)を参照してください。
- https://www.uipath.com/blog/product-and-updates/announcing-uipath-ai-trust-layer
- https://www.uipath.com/newsroom/uipath-unveils-new-family-of-llms-at-ai-summit

## PIIとは？
PIIとは **Personally Identifiable Information** の略で個人情報を意味します。氏名・生年月日・住所・電話番号・メールアドレス・クレジットカード番号など、個人を特定する情報および個人に関連する情報が該当します。

# PIIマスキング実装手順
- 実際に個人情報のマスキングを実装する手順について説明します。

## 前提条件
- この機能を利用するには UiPath Automation Cloud (Community版でもOK) が必須となります。
- ワークフローの開発環境はAutomation Cloudの一部として利用可能なStudio Web、もしくはStudioが使用できます。

## Automation Cloudの設定

### Automation Opsの設定
既定値ではStudio Webにてプレビューリリースのアクティビティが非表示となっていますので、Automation Opsで有効化します。
- [Automation Cloud](https://cloud.uipath.com) に管理者権限でサインインします。
- 左メニューで **Automation Ops** を選択します。
    ![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/80623376-8f15-aa91-14be-cc047622c648.png)

- ガバナンス > **製品ポリシーを追加** をクリックします。
    ![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/1dc99c7d-166d-ddf3-abf6-d3b387147d86.png)

- ポリシー名を入力し、製品として **Studio Web** を選択し [追加] をクリックします。
    ![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/b953012a-66dd-a8cc-744d-330e00ed506e.png)

- [アクティビティ] タブを選択し、**プレビュー パッケージとアクティビティを有効化** をオンにして [保存] をクリックします。
    ![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/3f848143-5c8e-83a5-70d5-d1331feaa4b8.png)

- [デプロイ] タブを選択し、ポリシーを適用するテナントを選択します。
    ![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/5e509bbc-f985-568e-d79a-8c3050bea233.png)

- No License > Studio Web にて、先ほど作成したポリシーを選択し [保存] をクリックします。
    ![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/2cf35157-e7c2-2e37-0b08-b1a2052eac6f.png)

以上で Automation Opsの設定は完了です。

### Integration Serviceの設定
次にIntegration Serviceにて **UiPath GenAI アクティビティ** のコネクタ設定を行います。
- Automation Cloudの左メニューにて **Integration Service** を選択します。
    ![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/89a38b7b-a412-2d43-626f-d53c0d538a78.png)

- コネクタとして **UiPath GenAI アクティビティ** を選択します。
    ![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/10a008e7-f5c4-406b-669e-9fe0396dbe65.png)

- **UiPath GenAI アクティビティに接続** をクリックします。
    ![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/309ccae0-0348-919c-f86d-8e38073d1358.png)

- **接続** をクリックします。
    ![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/fd9e3a99-8fbf-c2c9-e729-a5f9fa1e5a2a.png)
- コネクタ作成後、編集アイコンをクリックして名前を適切に変更します。
    ![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/8ed9675a-e390-5af5-9097-03bd289ff83d.png)

以上で Integration Serviceの設定は完了です。

## Studio Webでのワークフロー作成
Studio Webにて個人情報をマスキングするワークフローを作成します。

- Automation Cloudの左メニューにて **Studio**を選択します。
    ![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/342b907f-cc94-5562-0fc9-93708395b91c.png)

- プロジェクト > **新しいプロジェクト** をクリックします。
    ![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/31b70ac8-717b-b5c9-6ccb-560c8ffea714.png)

- オートメーションのトリガーとして **手動トリガー** を選択します。
    ![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/db5d9044-1daa-a39f-8a5e-69621fba7658.png)

- 手動トリガー > **引数を追加** をクリックします。
    ![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/1576e9a5-4999-437a-2e58-ce75113c5510.png)

- 引数の名前 (例: `in_text`) を入力し、既定値としてマスキング検証用にダミーの個人情報を含む文章を入力して [作成] をクリックします。
    ![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/8fdd5d15-b622-7715-1a44-27d751ebed36.png)

- 今回はサンプルとして下記のような注文依頼のメール文面を使用します。(※この内容はフィクションです)

    ```
    川越屋 ご担当者様
    
    平素より大変お世話になっております。仙台藩の伊達政宗でございます。
    この度は貴社ECサイトを拝見し、甲冑一式を注文させていただきたくメールを送信いたします。
    まずはお見積りのほどお願いできますでしょうか？
    
    以下、注文内容でございます。
    
    【注文内容】
    商品名: 豪華絢爛 特製甲冑一式
    カラー: 黒と金の輝き
    サイズ: 特注（身長180cm、体重75kg、肩幅50cmに合わせて)
    数量: 1
    
    【配送先】
    〒980-0862 宮城県仙台市青葉区一番町1-1-1
    伊達政宗宛
    
    【連絡先】
    masamune.date@example.com
    
    【備考】
    甲冑は本格的な合戦にも使用する予定ですので、耐久性に優れたものを希望します。
    この度は特別な注文となりますが、川越屋の高い技術とおもてなしに期待しております。
    何卒、宜しくお願い申し上げます。返信を心よりお待ちしております。
    
    伊達政宗拝
    ```

- 次に (+) をクリックしてアクティビティを追加します。
    ![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/81202895-70cb-4b7f-2712-c816e1e1b0fc.png)

- **個人情報 (PII) のフィルター処理** アクティビティを選択します。
    ![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/56969ea0-c610-1476-037a-0f8877d5e3f8.png)

- アクティビティのプロパティを設定します。
    - **Text**: マスキング対象の文章 (`in_text`)
    - **言語**: 文章の言語 (`Japanese`)
    ![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/4b9afc8f-5f0c-cb1f-46d6-5e563897ca8c.png)

- 次に (+) をクリックして **メッセージをログ** アクティビティを追加します。
    ![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/042243a8-da38-dd96-f31c-24e91af5c224.png)

- アクティビティ内のメッセージプロパティに個人情報フィルター処理の出力変数 `Masked text` を選択し、左上の [テスト] をクリックしてワークフローをテスト実行します。
    ![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/43aa3cc7-0375-814e-5c83-f1ce37a20f51.png)

- 出力されたログの内容を確認します。
    ![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/92f506a2-e7cc-f1a6-2475-7a8ba5bdcfcd.png)
- 下記のように個人情報が一部マスキングされていることが確認できます。
    ```
    Organization-0 ご担当者様
    平素より大変お世話になっております。仙台藩のPerson-32でございます。
    この度は貴社ECサイトを拝見し、甲冑一式を注文させていただきたくメールを送信いたします。
    まずはお見積りのほどお願いできますでしょうか？
    以下、注文内容でございます。
    【注文内容】
    商品名: 豪華絢爛 特製甲冑一式
    カラー: 黒と金の輝き
    サイズ: 特注（身長180cm、体重75kg、肩幅50cmに合わせて)
    数量: 1
    【配送先】
    〒PhoneNumber-213 宮城県仙台市青葉区一番町1-1-1
    Person-32宛
    【連絡先】
    mEmail-252
    【備考】
    甲冑は本格的な合戦にも使用する予定ですので、耐久性に優れたものを希望します。
    この度は特別な注文となりますが、Organization-0の高い技術とおもてなしに期待しております。
    何卒、宜しくお願い申し上げます。返信を心よりお待ちしております。
    Person-32拝
    ```

- このように個人情報の種類に応じてそれぞれマスキング(別の文字に置換)されていることが分かります。
    - 氏名 → `Person-XX`
    - 会社名 → `Organization-XX`
    - メールアドレス → `Email-XX`

- 残念ながら現時点では郵便番号が電話番号として認識されたり、住所がマスキングされていなかったり、不十分な箇所がありますので今後の精度向上に期待したいと思います。

### マスキング処理の調整
- アクティビティにて **その他のオプションを表示** をクリックし、下記オプションにてマスキングの度合いを調整することができます。
    ![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/6b2a01e9-426b-80f6-d1fb-a461c9b8a906.png)
    
    - **PII/PHI カテゴリ**: マスキングを行う個人情報のカテゴリを指定します。何をしていない場合にはすべてのカテゴリがマスキングされます。カテゴリ一覧は [UiPathドキュメントポータル](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-uipath-airdk-pii-filtering) には現時点では記載がありませんが、おそらく [Azure AI LanguageのPIIカテゴリ](https://learn.microsoft.com/ja-jp/azure/ai-services/language-service/personally-identifiable-information/concepts/entity-categories) が使用されているものと思われます。(※ あくまでも筆者の勝手な推測です)
    - **Minimum confidence score**: 個人情報と判定しマスキングするための信頼度スコアで0~1の値を指定します。0に近づくほどマスキングが多くなり偽陽性(False Positive)の可能性が高まります。1に近づくほどマスキングが少なくなり偽陰性(False Nagative)の可能性が高まります。値を増減しながら何度か検証を繰り返して調整することをお勧めします。

## Studioでのワークフロー作成
Automation Cloudに接続されたUiPath Studioで同様のワークフローを作成することもできます。
- Studio v2023.10以降を使用します。
- アクティビティ > 利用可能 > UiPath GenAI Activities > UiPath GenAI アクティビティ > **個人情報 (PII) のフィルター処理** をワークフローに追加します。自動的に依存関係のあるアクティビティとして `UiPath.IntegrationService.Activities` 1.4.0 以降がプロジェクトに追加されます。
- アクティビティの利用方法はStudio Webと同様です。
    ![24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/6a7afc4d-0e3c-8e37-c304-8b9503f18f98.png)

# おわりに
- このようにUiPath GenAIアクティビティを使用すると個人情報のマスキングを容易に実装して、自動化処理に組み込むことが可能となりますので、ぜひお試しください。今後も責任あるAIを実現するUiPath AI Trust Layerのアップデートに期待したいと思います。