【UiPath】生成AIサービスとの連携まとめ

# はじめに
本記事ではUiPath製品と下記の生成AIサービスを連携する方法について説明します。
- OpenAI
- Azure OpenAI Service
- Anthropic Claude
- Amazon Bedrock
- Amazon SageMaker
- Google Vertex AI
- IBM watsonx.ai

:::note warn
それぞれの連携において現時点(2024年7月)で利用可能・利用不可のモデルについてもまとめておりますが、今後のリリースによって変更となる可能性が高いと思われます。最新情報は [UiPathドキュメントポータル](https://docs.uipath.com/ja) をご参照ください。
:::

# 連携パターンの検討
現在利用中のUiPath製品や生成AIサービスによって連携方法が異なります。大まかに下記の3つのパターンあります。

1. UiPath Automation Cloudにて **Integration Service** を利用する
2. UiPath Automation Cloudにて **UiPath GenAI アクティビティ** を利用する
3. **UiPath Studio単独** でREST APIを直接コールする

![01a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/17ade5a4-8426-946e-1db6-cee213a8a6a4.png)

連携パターンを決定する上で考慮すべきは次の2点です。
- Automation Cloudが利用可能か？
- 自前の生成AIサービスが利用可能か？(APIキーなどによるアクセス・モデルのデプロイなど)

![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/709ecce4-760b-caa2-928f-b7d77afdf53f.png)

それぞれの連携パターンにおけるメリット・デメリットは次の通りです。最終的にはこれらを考慮して連携パターンを決定します。

|連携パターン|メリット|デメリット|
|:-|:-|:-|
|[1. Integration Service](#1-integration-service)|- ユーザーが自前で準備した環境の生成AIモデルを利用できる<br>- APIキーなどの生成AIサービスのアカウント情報はIntegration Service側で管理されるためワークフローに保持しなくて良い|- 複数ベンダーのモデルを利用するにはそれぞれ準備が必要<br>- 利用可能なモデルが限定的<br>- マルチモーダルの対応が限定的|
|[2. UiPath GenAIアクティビティ](#2-uipath-genai-アクティビティ)|- Automation Cloud接続とAIユニット ライセンスがあれば、ユーザーが自ら生成AIサービスを準備しなくても利用可能 (UiPathが管理する [UiPath AI Trust Layer](https://qiita.com/hidecha/items/f40f64afcccdf4a64eb9#uipath-ai-trust-layer%E3%81%A8%E3%81%AF) 上で動作)<br>- 複数ベンダーのモデルを使い分けて利用可能|- 利用可能なモデルが限定的<br>- マルチモーダルは未対応|
|[3. UiPath Studio単独](#3-uipath-studio単独)|- REST APIに対応した任意の生成AIサービスと連携可能<br>- マルチモーダルにも対応可能|- APIコールをHTTP要求アクティビティにて自前で実装する必要あり<br>- APIキーなどのアカウント情報を保持する方法について考慮が必要|

:::note info
本記事において、**マルチモーダル** とは入力値として画像とテキストをモデルに渡し、テキストを出力することを指しております。
:::

# 実装手順
次にそれぞれの連携パターンでの実装手順について説明します。

## 1. Integration Service
Integration Serviceにて生成AIサービスと連携する手順について説明します。
- Integration Serviceを利用するには [Automation Cloud](https://cloud.uipath.com) に管理者アカウントにてサインインし、Integration Serviceメニューをクリックします。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/8c4c9c0c-dad7-bfa3-35b2-930618868377.png)

- ワークフローを作成するフォルダーを選択し、連携する生成AIサービスに応じて下記のいずれかのコネクタを選択します。   
    - [OpenAI](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/uipath-openai-openai)
    - [Microsoft Azure OpenAI](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/uipath-microsoft-azureopenai)
    - [Anthropic Claude](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/uipath-anthropic-claude)
    - [Amazon Bedrock](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/uipath-aws-bedrock)
    - [Amazon SageMaker](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/uipath-amazon-sagemaker)
    - [Google Vertex](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/uipath-google-vertex)
    - [watsonx.ai](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/uipath-ibm-watsonx)

![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/ef84e415-4e12-a5de-2a63-94b622f1cdbc.png)

- コネクタの設定には生成AIサービス側でAPIキー発行などの手順が必要となりますので事前に準備しておきます。たとえばAmazon Bedrockと連携するにはAWS IAMにてアクセスキー・シークレットキーを発行する必要です。
- 詳細はそれぞれの生成AIサービスのWebサイトなどをご参照ください。

![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/203a664a-b4c0-7200-c89f-31ce3a7bb2ff.png)

### 各コネクタの利用可能・利用不可モデルの状況
現時点では各コネクタ(生成AIサービス)で利用可能・利用不可のモデルは次の表の通りです。最新の対応状況は [Integration Serviceのリリースノート](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/2024) などをご参照ください。

|コネクタ|利用可能|利用不可|
|:-|:-|:-|
|OpenAI|GPT-3.5, GPT-4, GPT-4V, GPT-4o| |
|Microsoft Azure OpenAI|- GPT-3.5, GPT-4, GPT-4o<br>- 各種Embeddingモデル (text-embedding-ada-002など)|GPT-4V|
|Anthropic Claude|Claude 2.1|Claude 3, Claude 3.5|
|Amazon Bedrock|Claude 2.1, Jurassic-2, Titan Text, Llama 2|Claude 3, Claude 3.5, Llama 3など左記以外|
|Amazon SageMaker|Falcon, Llama 2, カスタムモデルなど| |
|Google Vertex|Gemini 1.5 Pro, PaLM ２(bison, unicorn)|左記以外|
|IBM watsonx.ai|Granite, Llama 2|左記以外|

### 各アクティビティの利用
現時点で利用可能なアクティビティは次の表の通りです。最新の対応状況は [Integration Serviceのリリースノート](https://docs.uipath.com/ja/integration-service/automation-cloud/latest/user-guide/2024) などをご参照ください。

|コネクタ|アクティビティ|注意点|
|:-|:-|:-|
|OpenAI|[チャット補完を生成](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-openai-openai-generate-chat-completion)|マルチモーダル(GPT-4V)も利用可能|
|OpenAI|[テキスト補完を生成](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-openai-openai-generate-text-completion)|GPT-3.5で利用可能。GPT-4では利用不可のため **チャット補完を生成** を使用する|
|Microsoft Azure OpenAI|[チャット補完を生成](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-microsoft-azureopenai-generate-chat-completion)|マルチモーダル(GPT-4V)は利用不可|
|Microsoft Azure OpenAI|[テキスト補完を生成](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-microsoft-azureopenai-generate-text-completion)|GPT-3.5で利用可能。GPT-4では利用不可のため **チャット補完を生成** を使用する|
|Microsoft Azure OpenAI|[埋め込みを作成](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-microsoft-azureopenai-generate-embeddings)|RAG(検索拡張生成)アーキテクチャにて文章をベクトル化する際に使用 (実装例は [こちらの記事](https://qiita.com/hidecha/items/c4e79e36115d69ddbfff) を参照)|
|Anthropic Claude|[テキスト補完を生成](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-anthropic-claude-generate-text-completion)|マルチモーダルは利用不可|
|Amazon Bedrock|[Anthropic を使用してテキスト補完を取得](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-aws-bedrock-text-completion-using-anthropic)|マルチモーダルは利用不可|
|Amazon Bedrock|[AI21 Labs を使用してテキスト補完を取得](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-aws-bedrock-text-completion-using-ai21labs)| |
|Amazon Bedrock|[Amazon Titan を使用してテキスト補完を取得](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-aws-bedrock-text-completion-using-amazon)| |
|Amazon Bedrock|[Llama2 を使用してテキスト補完を取得](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-aws-bedrock-get-text-completion-using-llama-2)| |
|Amazon SageMaker|[推論を取得](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-amazon-sagemaker-get-inference)|`ContentType` は `application/x-text`, `application/x-image`, `text/csv`, `audio/wav` に対応|
|Google Vertex|[Gemini を使用してテキスト補完を生成](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-google-vertex-generate-text-completion-using-gemini)|マルチモーダル(Gemini Pro Vision)も利用可能|
|Google Vertex|[チャット補完を生成](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-google-vertex-generate-chat-completion)| |
|Google Vertex|[テキスト補完を生成](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-google-vertex-generate-text-completion)| |
|watsonx.ai|[テキスト補完を生成](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-ibm-watsonx-generate-text-completion)| |

- 上記の通り現時点ではまだ最新モデルやマルチモーダルには未対応のアクティビティがあります。今後の機能拡張に期待したいと思います。

### Azure OpenAI Serviceとの連携手順
Azure OpenAI Serviceとの連携手順の詳細については [こちらの記事](https://qiita.com/hidecha/items/774f009ddda1f760402a) を参考にしてください。ここでは要点のみ記載します。
1. [Azureポータル](https://portal.azure.com/) にてAzure OpenAI Serviceのリソースを作成し、リソース名とAPIキーをメモします。
    ![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/894647dd-3a07-8417-acbf-598cce85b6b2.png)
    - 最新の `gpt-4o` モデルは主にUSリージョンで利用可能です。リージョンごとの利用可能なGPTモデルは [Azureのサイト](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/concepts/models#model-summary-table-and-region-availability) をご参照ください。

2. [Azure OpenAI Studio](https://oai.azure.com/portal) にてモデルをデプロイします。
    ![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/8e62d071-1ec8-310c-bb55-02b239637b89.png)

3. Integration Serviceにて **Microsoft Azure OpenAI** コネクタを作成します。
    ![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/69f95518-360b-30f4-6c6f-964f21fc55a6.png)

4. StudioまたはStudio WebにてMicrosoft Azure OpenAIの **チャット補完を生成** アクティビティを使用し、Azure OpenAI Serviceのモデルが利用できることを確認します。
    ![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/0644d576-1a39-7137-34eb-aa0c00d5b2ac.png)

## 2. UiPath GenAI アクティビティ
別の連携パターンとして、UiPath GenAI アクティビティにて生成AIサービスを利用する手順について説明します。

:::note warn
UiPath GenAI アクティビティを利用するにはAIユニットが必要となります。プレビュー段階では無料でご利用いただけていましたが、2024年7月に一般提供(GA)されてからはアクティビティ実行ごとにAIユニットが消費されます。
:::

- [Automation Cloud](https://cloud.uipath.com) に管理者アカウントにてサインインし、Integration Serviceメニューをクリックします。
    ![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/8c4c9c0c-dad7-bfa3-35b2-930618868377.png)

- ワークフローを作成するフォルダーを選択し、**UiPath GenAI Activities** コネクタを選択して接続します。**UiPath GenAI アクティビティ (プレビュー)** は別のアクティビティとなり、今後の機能拡張 (Context Groundingなど) で使用されます。

    ![10a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/87e6420a-6591-5f9a-69e2-bd8351ab6f27.png)

- 利用可能なアクティビティは次の表の通りです。各アクティビティ共通で利用可能なモデルは `gpt-35-turbo-0125` および `gpt-4o-2024-05-13` となります。

|アクティビティ|概要|注意点|
|:-|:-|:-|
|[コンテンツ生成](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-uipath-airdk-content-generation)|チャット補完モデルを使用して、指定された要求に対するチャット応答を生成|- 利用可能なモデルは `gpt-35-turbo-0125`, `gpt-4o-2024-05-13` に加えて `gemini-1.0-pro`, `gemini-1.0-pro-001`<br>-マルチモーダルは利用不可|
|[テキストを要約](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-uipath-airdk-summarize-text)|言語モデルによるテキスト要約| |
|[PII をフィルター処理](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-uipath-airdk-pii-filtering)|入力テキストに含まれる個人を識別できる情報 (PII) または保護された医療情報 (PHI) を識別してマスキング|詳細は [こちらの記事](https://qiita.com/hidecha/items/f40f64afcccdf4a64eb9) をご参照ください|
|[翻訳](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-uipath-airdk-translate)|入力テキストとターゲット言語を指定して翻訳されたテキストを出力||
|[言語を検出](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-uipath-airdk-language-detection)|指定したテキストの言語を検出| |
|[書き換え](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-airdk-airdk-rewrite)|指定した指示に沿ってテキストを書き換え |
|[メールを生成](https://docs.uipath.com/ja/activities/other/latest/integration-service/uipath-airdk-airdk-generate-email)|特定のスタイルに合ったメールの下書きを作成| |

- たとえば **コンテンツ生成** ではUiPathが管理しているモデルを選択し、入力されたプロンプトに対して応答を返します。ユーザーがモデルをデプロイする必要はなく、すぐに利用が可能です。
    ![11a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/9e697c38-6da6-81d8-c083-9a784c643995.png)

- それぞれの利用方法やパラメーターの詳細などは各アクティビティにリンクされたWebガイドをご参照ください。

## 3. UiPath Studio単独
UiPath Studio単独で生成AIサービスを利用するには **HTTP要求アクティビティ** によってそれぞれのサービスのREST APIを直接コールします。このため、まずは利用するサービスのAPIリファレンスを参照します。下記に代表的なサービスのリファレンスを記載します。
- [OpenAI API Reference](https://platform.openai.com/docs/api-reference/introduction)
- [Azure OpenAI Service の REST API リファレンス](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/reference)
- [Anthropic API Reference](https://docs.anthropic.com/ja/api/getting-started)

:::note warn
Amazon BedrockやSageMakerのAPIをコールするためには認証情報として [AWS API リクエストの署名](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_aws-signing.html) を生成する必要があります。アルゴリズムが煩雑なため自前で実装するよりも [AWS SDK](https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/sdk-general-information-section.html) などを利用した方が良いでしょう。
:::

### ワークフロー実装手順
大まかな実装の流れは次の通りです。
1. 生成AIサービス側で認証情報となるAPIキーなどを発行する。
2. APIリファレンスを参照し、チャット補完など処理内容に応じてエンドポイント・ヘッダー・ボディの仕様を確認する。
3. 質問内容などをパラメーターで受け取り、ボディとなるJSONを組み立てる。あらかじめテンプレートをテキストファイルとして保存して文字列置換すると実装しやすい。
4. HTTP要求アクティビティを実行して生成APIサービスのREST APIをコールし、応答を変数に格納する。
5. ステータスコードを確認し、正常な応答(200 OK)か確認する。
6. 応答をJSONとして逆シリアル化(デシリアライズ)し、必要なパートのみ取り出す。

### ワークフロー実装例
では実際にAzure OpenAI Serviceでの実装例で説明してみます。生成AIサービスの呼び出しではUI操作などは不要なためクロスプラットフォームでの実装も可能です。

1. Azure OpenAI Serviceのリソースを作成し、リソース名とAPIキーをコピーしてメモします。([Azure OpenAI  Service連携手順](#azure-openai-serviceとの連携手順)の1と同じ)
2. Azure OpenAI Studioを開き、モデルをデプロイし、デプロイ名をメモします。([Azure OpenAI Service連携手順](#azure-openai-serviceとの連携手順)の2と同じ)
3. Azure OpenAI ServiceのAPIリファレンスのうち、[チャット入力候補](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/reference#chat-completions) を参照します。
    - エンドポイントは次のような形式になっています:
    ```
    POST https://{your-resource-name}.openai.azure.com/openai/deployments/{deployment-id}/chat/completions?api-version={api-version}
    ```
    - `{your-resource-name}`→リソース名、`{deployment-id}`→デプロイ名、`{api-version}`→`2024-05-01-preview`に置き換え、ワークフロー内で代入アクティビティを使用して `endpoint` 変数としてセットします。

    ![12a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/1d73adaf-ffd2-2e62-b4c0-cadd19ea8345.png)

    - ヘッダーは次のような形式です。
        - `Content-Type: application/json`
        - `api-key: {YOUR_API_KEY}`
    - ボディはさまざまなパラメーターを指定することができます。詳細はAPIリファレンスをご参照ください。今回は次のようなJSON形式のテンプレートを使用します。あらかじめテキストファイル `request.json` として保存しておきます。
    ```json:request.json
    {
        "messages": [
            {
                "role": "system",
                "content": [
                    {
                        "type": "text",
                        "text": "You are an AI assistant that helps people find information."
                    }
                ]
            },
            {
                "role": "user",
                "content": [
                    {
                        "type": "text",
                        "text": "{{prompt}}"
                    }
                ]
            }
        ],
        "temperature": 0.3,
        "top_p": 0.8,
        "max_tokens": 4000
    }
    ```
    ![13a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/2732ad88-c7c2-b21f-7e6b-1491e00fc563.png)

4. ワークフロー内ではJSON形式のテンプレートを読み込み、 `{{prompt}}` 部分を入力引数として受け取った質問内容 `in_question` で置換し、`req_body` 変数にセットします。
    ![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/760db28c-4354-5bd5-3290-1391b73ee984.png)

5. **HTTP要求アクティビティ** を実装します。
    - 要求メソッド: `POST` を指定
    - エンドポイント: 手順3で組み立てた `endpoint` 変数を指定
    - ヘッダー: `Content-Type` と `api-key` を指定
    - ボディ: 手順4で組み立てた `req_body` 変数を指定
    - タイムアウト: `60000` (1分間) に変更
    - 本文形式: `application/json` に変更
    - 応答コンテンツ: `res_content` 変数にセット
    - 応答ステータスコード: `res_status` 変数にセット

    ![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/ba3f8acc-4657-1247-5632-98b5f1815566.png)

    :::note warn
    ここではAPIキーを直接ヘッダーに保存しましたが、他のユーザーと共有しないようにするためにはOSの環境変数に格納するなど保存場所について考慮が必要です。

6. 後続の処理は次の通りです。
    - ステータスコード `res_status` をチェックし、200であれば処理を継続し、200以外であればエラーを返します。
    - 応答のコンテンツ `res_content` を逆シリアル化してJSONオブジェクト `json_content` にセットします。
    - `json_content("choices")(0)("message")("content").ToString` によってJSONオブジェクトから応答メッセージ部分を取り出してString型に変換します。 
    - 出力パラメーター `out_answer` にセットします。
    ![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178312/9d12d9ce-a385-11ba-469d-68ede8c58d55.png)

7. デバッグ実行して正常に実行されることを確認します。

# おわりに
本記事ではUiPath製品から生成AIサービスを呼び出す方法について連携パターンごとに実装手順を説明しました。ぜひ様々な業務フローの中で生成AIサービスを組み込んで自動化領域の拡大にチャレンジしていただければと思います！