【UiPath】Azure OpenAI Serviceと連携して安全にGPTを利用する手順

# はじめに
- 本記事ではUiPath Automation CloudとAzure OpenAI Serviceを連携する手順について説明します。
- この連携によって生成AIによる自然言語処理を自動化ワークフローに安全に組み込むことが可能になります。
- Azure OpenAI Serviceの既定値ではすべてのネットワークからアクセスが許可されていますが、クライアントからのGPTモデルの利用要求はAutomation Cloudによってプロキシできますので、必要な接続のみを許可することによって安全性を高めることができます。

# 構成図とIntegration Service概要
- 本記事での構成図を示します。

![00a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/398e17c2-f898-f805-35a1-50ca9520d280.png)

- GPTモデルを利用するクライアントとしてUiPath StudioまたはUiPath Studio Webを使用します。
- [Integration Service](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/introduction) はUiPathがAutomation Cloud上で提供するiPaaS(Integration Platform as a Service)です。さまざまなサードパーティアプリケーションやSaaSの認証と認可を標準化してAPI接続の管理を行い、容易に連携することが可能になります。
- Integration Serviceを利用するメリットは下記の通りです。
    - Azure OpenAI Serviceの認証情報となるAPIキーをサーバー側で保管するため、クライアント側にAPIキーを保存することによって生じる漏洩リスクを軽減できます。またこのAPIキーはAutomation Cloudに接続しているクライアントのみ利用可能となるため、管理者によって利用ユーザーを制御することができます。
    - クライアントからのGPTモデルの利用要求はIntegration Serviceによってプロキシされるため、Azure OpenAI Serviceのネットワーク設定ではIntegration Serviceからのアクセスのみを許可(IPフィルター)することによって安全性を高められます。

# Azure OpenAI Serviceの設定
- まずAzure OpenAI Serviceを利用するための準備を行います。既にAzureサブスクリプションが準備されていることが前提となります。

## 事前準備
1. ブラウザーで [Azureポータル](https://portal.azure.com/) にサインインします。
2. 次にAzure OpenAI Serviceにアクセスします。 (上部の検索フィールドに "openai" と入力してジャンプします)

    ![01a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/ceeb947c-9d3b-cc8b-f209-f6332835b55f.png)

3. **作成** をクリックします。

    ![01b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/15f785f1-4e97-2313-2a86-a02958d12b0a.png)

4. もし作成できない場合には利用するAzureサブスクリプションごとに利用申請が必要となります。https://aka.ms/oai/access のフォームから申請して承認されるまで数日～数週間ほど待ちます。

## Azure OpenAI Serviceのリソース作成手順
- Azure OpenAI Serviceが利用可能であることが確認できましたら実際にリソースを作成します。
1. Azureポータル > Azure OpenAI Serviceにアクセスし、**作成** をクリックします。
2. 各設定項目を入力します。

    ![02b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/ffe43150-ecb3-97fb-27f2-b8ccab093f49.png)

    - 既存の **リソースグループ** を選択するか、新規で作成します。
    - Azure OpenAI Serviceの **リージョン** を選択します。一般的にはクライアントマシンに近いリージョンとしてJapan Eastなどを選択しますが、リージョンごとに利用できるサービスやモデルが異なります。詳細は [Azure OpenAI Service モデル](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/concepts/models) をご参照ください。
    - **名前** はグローバルで一意な名前を入力します。このリソース名は後ほど使用しますのでメモします。
    - **価格レベル** として Standard S0 を選択し、**次へ** をクリックします。

3. ネットワーク設定は既定値のまま **次へ** をクリックします。(後ほど特定IPのみ許可するように変更します)

    ![03a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/adbf1a97-22e4-ba3c-d97e-6ba7b8dcf7b5.png)

4. 必要に応じてタグを指定し、**次へ** をクリックします。

    ![04a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/1cca4a9d-55e9-fb6e-4855-6564ccce7b8f.png)

5. レビューおよび送信にてチェックが走ります。エラーが発生した場合には内容を確認して修正します。問題なければ　**作成** をクリックしてリソースを作成します。

    ![05b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/32dad8fa-ae23-7f21-87dd-967df0c6a678.png)

6. デプロイが成功することを確認します。 **リソースに移動** をクリックします。

    ![06a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/da75582a-9e60-d159-4c08-a542b8e20d11.png)

7. 左メニューの **キーとエンドポイント** をクリックし、**キー 1** をクリップボードにコピーしてメモします。

    ![07b.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/1aafbadb-dcab-7429-79e7-d2c77dcdbb21.png)

## Azure OpenAI Serviceの簡易動作確認
1. 簡易的な動作確認のためにブラウザーで [Azure OpenAI Studio](https://oai.azure.com/portal) にアクセスします。サブスクリプションとリソースを選択して **リソースの使用** をクリックします。

    ![08b.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/2277252d-b010-04dc-99f3-441a4c98ff19.png)

2. 左メニューの 管理 > **デプロイ** をクリックし、**新しいデプロイの作成** をクリックします。

    ![09b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/03fe9b11-3256-ed2d-225b-94f4a0a63904.png)

    - モデルを選択します。今回は **gpt-4** を使用します。
    - モデルバージョンを選択します。今回は **0613** を使用します。
    - デプロイ名を入力し、**作成** をクリックします。

    ![10b.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/f0da2870-d533-16d3-f05d-8572eb44e3f8.png)

3. 正常に作成されましたら左メニューの プレイグラウンド > **チャット** をクリックします。構成として先ほど作成したデプロイが選択されていることを確認します。
4. チャットセッションにて質問(例: 「自己紹介をして」)を入力して、応答が返ってくることを確認します。

    ![11b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/9e97aee2-5dc9-cd77-e2ad-4c4db247ad3a.png)

# Automation Cloudの設定
- Automation CloudにてAzure OpenAI Serviceと連携する設定を行います。
1. ブラウザーで [Automation Cloud](https://cloud.uipath.com) にサインインします。
2. 左メニューにて **Integration Service** のアイコンをクリックします。

    ![11b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/c4be5e38-e602-181c-2702-a5c0073f94cf.png)

3. 作業対象のOrchestratorフォルダーを選択し、コネクタとして **Microsoft Azure OpenAI** をクリックします。

    ![12a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/7dd6c730-0f04-929d-fa24-ba05258c3359.png)

4. **Microsoft Azure OpenAI に接続** をクリックします。
5. 先ほどメモしたAzure OpenAI Serviceのキーとリソース名を入力して、**接続** をクリックし、正常に接続できることを確認します。

    ![12b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/de805627-962b-5e8f-1a69-47878746e2ea.png)

- エラーが発生する場合にはキーとリソース名を再確認します。またAzure OpenAI Serviceのリソース作成直後には接続できない場合がありますのでしばらく時間をおいてから再接続します。

## Azure OpenAI Serviceのネットワーク設定
- Azure OpenAI Serviceの既定値ではすべてのネットワークからアクセスが許可されていますので、セキュリティ強化のためAutomation Cloudからのアクセスのみに制限します。
1. [オンプレミス アプリケーション コネクタのサポート](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/whitelisting) にて該当するAutomation CloudのリージョンのIPアドレスを確認し、メモします。コミュニティユーザーの場合には欧州のIPアドレスが使用されます。
2. Azureポータル > 作成したAzure OpenAI Serviceリソース > **ネットワーク** をクリックし、**選択したネットワークとプライベートエンドポイント** を選択します。

    ![13b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/90d25373-f559-9f34-280c-0c7e7e9b1638.png)

3. 先ほどメモしたIPアドレスをすべて入力し **Save** をクリックして保存します。

    ![14b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/263559d1-21de-9efd-4182-cef918a26bcd.png)

4. 設定変更が反映されるまで数分ほど待ちます。Automation Cloudにて先ほどコネクションを作成したフォルダーを選択し、コネクションの縦三点リーダー > **コネクションを確認** をクリックし、正常に接続できることを確認します。

    ![20a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/bea597b3-a58e-d800-bcd5-0121f84dcf25.png)

    - エラーが発生する場合には Azure OpenAI Serviceのネットワーク設定にて [Integration Serviceの送信IP](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/whitelisting) が正しく追加されているかを再確認します。

# Studio WebからのGPT利用
- ここまでで準備が整いましたのでUiPath Studio WebからGPTモデルを利用してみましょう！
1. Automation Cloud の左メニューにて **Studio** のアイコンをクリックします。

    ![21a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/8d4abb27-064c-49a2-f6aa-7676ce2dd933.png)

2. プロジェクト > [新しいプロジェクト] をクリックします。

    ![22a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/1c911dfc-e40e-09ea-0607-527f40c9ed53.png)

3. プロジェクト名と説明を入力して [作成] をクリックします。

    ![23a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/f7c5fd37-5d04-fe33-7d31-1028bfb5d964.png)

4. プロジェクトが作成されましたら (+) をクリックしてアクティビティを追加します。
5. **チャット補完を生成** を選択します。

    ![24a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/49ded1d5-0a33-2172-bb97-9cecb2652c10.png)

    - **テキスト補完を生成** はGPT-3, GPT-3.5では使用できますがGPT-4では使用できません。代わりに **チャット補完を生成** を使用します。
6. アクティビティの各項目を設定します。

    ![15b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/05cf727f-76db-3fa8-e45a-80c39765a1b5.png)

    - **プロンプト** に質問内容を記述します。(例: 「UiPath Integration Serviceについて教えて」)
    - **モデル** はAzure OpenAI Serviceのデプロイ名を選択します。
    - [その他のオプション] にてより細かいパラメーターを指定できます。詳細は [チャット補完を生成](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-openai-openai-generate-chat-completion) や [Azure OpenAI Service の REST API リファレンス](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/reference) をご参照ください。

    ![26a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/fa05348a-38a3-593e-826d-9a8665d34903.png)
    
7. GPTモデルからの応答を出力するために (+) をクリックし、**メッセージをログ** アクティビティを追加します。

    ![27a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/81c3304f-9900-a9fe-827e-c9aaaa644d83.png)

8. **チャット補完を作成** の出力変数 `上位の生成テキスト` を選択します。ログレベルは `Info` を選択します。

    ![28a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/65f9799f-7442-3c9c-93eb-1b4a02658bad.png)

9. **テスト** をクリックし、ワークフローをテストします。

    ![16c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/8a219c1e-d157-c49b-4d9c-c77d7c569dd9.png)

10. 質問に対する回答が正常に表示されることを確認します。

    ![17b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/4f54952a-f51c-5846-41bc-ed431967c518.png)

# StudioからのGPT利用
- 次にUiPath StudioからGPTモデルを利用してみます。あらかじめStudioをAutomation Cloudに接続しておきます。
1. Studioを起動しプロジェクトを作成します。対応OSはWindowsまたはクロスプラットフォームを選択します。

    ![32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/6b2f6ba4-4174-54a5-4fb1-62c598482075.png)

2. アクティビティの依存関係を右クリック > **管理** をクリックし、
**Microsoft Azure OpenAI** アクティビティをインストールします。

    ![33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/d6734d3e-e49b-2166-76bc-acca0c18b667.png)

3. **Generate Chat Completion(チャット補完を生成)** アクティビティを追加し、既定のAzure Open AI コネクションが表示されることを確認します。

    ![31a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/ce9b36b3-a211-4afc-83af-ca0056bb4cf2.png)

4. アクティビティの各項目を設定します。

    ![18d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/d2a13116-da56-4102-e490-fc6305fdb2d9.png)

    - **モデル** はAzure OpenAI Serviceのデプロイ名を選択します。
    - **プロンプト** に質問内容を記述します。(例: 「UiPath Automation Cloudについて教えて」)
    - [プロパティ] にてより細かいパラメーターを指定できます。詳細は [チャット補完を生成](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-openai-openai-generate-chat-completion) や [Azure OpenAI Service の REST API リファレンス](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/reference) をご参照ください。
    - GPTモデルからの応答を出力するために出力 > **上位の生成テキスト** に変数(例: `genText`)を設定します。
5. **メッセージをログ** アクティビティを追加し、変数 `genText` を出力します。

    ![19c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/d7feb57e-4cc7-54e5-09bf-769cb2f9afe2.png)

6. デバッグ実行して質問に対する回答が正常に表示されることを確認します。

    ![20b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/04445097-6f52-21ac-3d02-7badf7ac92c1.png)

7. 汎用化するために質問文を入力値の引数として渡し、回答文を出力値の引数として受け取ります。またそれぞれをログ出力することによって利用状況を記録することができます。

    ![22b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/869d4398-bdfd-9e95-f110-e05d61771f68.png)

    ![40a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/34ff9d6c-d696-827c-30df-fa0c5f8a03c2.png)

# おわりに
- このようにAzure OpenAI ServiceとUiPath Automation Cloudを組み合わせて使用することによって、企業向けに安全にGPTモデルを利用し、自動化処理に組み込みできるようになります。ぜひお試しください！