RPA×生成AIの可能性

RPAと生成AIを組み合わせると、どうなるんですか?



RPAで自動化できる範囲が広がったり、より複雑な業務に対応できるようになります
例えば・・・
- 問い合わせ対応の自動化:問い合わせメール内容をAIが自動判定・返信作成し、RPAがメール返信を実行
- 請求書処理の自動化:請求書の画像をAIで読み取り、RPAがシステムに自動入力
- 議事録の作成と共有:会議音声からAIで文字起こしし、RPAがデータを共有・記録する
このように生成AI単体でもRPA単体でも実現が難しい自動化も、2つを組み合わせる事で実現できるのです。
この記事では、生成AIとRPAを連携させる最初の1歩として、RPAから生成AIに簡単な命令文(プロンプト)を送信する方法をご紹介します。


RPAで呼び出す生成AIの選定:ChatGPT vs Gemini vs Claude



生成AIは色んな種類があるけど、どれを使うのが良いの?



テストする場合は、無料枠があるGoogleの「Gemini」がおすすめです
主要な生成AI「ChatGPT」「Gemini」「Claude」を比較してみましょう。
価格と性能比較:ChatGPT vs Gemini vs Claude
各生成AIのうち、メジャーなモデルを比較してみます。
ざっくりまとめると
- ChatGPT-4o:精度が高く、リアルタイムで翻訳や音声対話が可能だが、ややコストが高い。
- Claude 3.5 Haiku:応答速度が非常に早く、安価で文書処理に優れているが、テキストしか扱えない。
- Gemini 2.0 Flash:精度はやや劣るが、非常に安価でテキスト・音声・画像・動画を扱える。
特徴 | ChatGPT-4o | Claude 3.5 Haiku | Gemini 2.0 Flash |
---|---|---|---|
扱える情報 | テキスト、画像、音声 | 主にテキスト | テキスト、画像、動画、音声 |
API料金 | 入力:$2.5 出力:$5.0 | 入力:$0.8 出力:$4.0 | 無料枠あり 入力:$0.1 出力:$0.7 |
速度 | 高速 | 非常に高速 | 高速 |
精度 | 非常に高い | 高い | 高い |
対応テキスト量 | 32Kトークン | 200Kトークン | 1000Kトークン |
得意なこと | リアルタイム翻訳、リアルタイム音声対話 | 高速な情報検索・要約、長文処理 | 大量のデータ処理・分析、ツール連携 |
※API料金は100万トークン(日本語で60-70万文字)あたりの価格です
どれも一長一短あるわけですが、今回は無料枠があり性能のバランスの取れたGeminiを使っていきます。



画像や音声データを使った自動化をするなら、ChatGPTかGeminiですね
Gemini 2.0 Flashの無料枠について解説



Geminiの無料枠って実際どれくらいですか?



テストはもちろん、実際の運用でも使い方によっては無料枠に収まる勢いです
Gemini 2.0 Flashの無料枠は以下の通りです。
- 1 分あたりのリクエスト数:15回
- 1 日あたりのリクエスト数:1,500回
- 1 分あたりのトークン数:1,000,000トークン(日本語で60-70万文字程度)
上限を超えた場合、Geminiはエラー(429 RESOURCE_EXHAUSTED)を返します。
つまり勝手に課金されることはありません。
レート制限 | Gemini API | Google AI for Developers



1日1500回使えて、1分あたり60-70万文字も処理できるのは凄いですね



他の生成AIは無料枠すらないので、Googleの本気を感じます
RPAツールは好きなものを使ってください。私は使い慣れたUipathを使っていきます!
生成AIを呼び出す2つの方法:APIキー VS アクセストークン
生成AIをAPI実行する場合、APIキーかアクセストークン(OAuth2.0)を使います。



ちょっと難しいですね



実装が簡単なのはAPIキーですが、セキュリティが強固なのはアクセストークンです
結論:最初は実装が簡単なAPIキーでテストして、本番運用はセキュリティが強固なアクセストークンを使うのが良いでしょう。
APIキーとアクセストークンの違いを簡単に解説します。
APIキーのメリットデメリット
- メリット
-
- 設定が簡単:GoogleCloudConsoleで簡単に生成でき、実装も比較的容易です。
- 手軽に試せる:開発初期段階や簡単な用途で手軽にAPIを試すことができます。
- デメリット
-
- セキュリティリスクが高い:APIキーは比較的容易に漏洩する可能性があります。漏洩した場合、悪用されるリスクがあります。
- 監査が難しい:API利用者の追跡が難しく、利用状況の監査が困難になる場合があります。
- 権限管理の柔軟性が低い:APIキーを特定ユーザーやアカウントに紐付けることが難しいです。
アクセストークン(OAuth2.0)のメリットデメリット
- メリット
-
- セキュリティが高い:アクセストークンは有効期限が短く、漏洩リスクを低減できます。
- きめ細かい権限管理が可能:権限範囲を指定して、アプリが必要な機能にのみアクセスできるよう制御できます。
- 監査が容易:特定ユーザーに紐付けてアクセストークンを発行できるため、API利用者の追跡や監査が容易になります。
- デメリット
-
- 実装が複雑:APIキーに比べて複雑で手間がかかります。
- トークンの管理が必要:アクセストークンの取得・保存・有効期限の管理などを行う必要があります。
この記事ではAPIキー/アクセストークン両方の実装方法を解説します。



以下の流れで進めていきます
- GeminiのAPIキーを取得
- GeminiとUipathをAPIキーで連携
- アクセストークン/リフレッシュトークンを取得
- GeminiとUipathをアクセストークンで連携
STEP①:GeminiのAPIキーを取得する【APIキー】
GoogleAIStudioにサインアップ
GeminiのAPIキーを取得するためには、GoogleAIStudio にアクセスする必要があります。
アクセスできたら「Sign in to Google AI Studio」からサインインしましょう。ご自身のGoogleアカウントでOKです。


GoogleAIStudioでAPIキーを取得する
サインインすると以下の画面が表示されます。画面中央または画面右上の「Get API key」をクリックします。


画面右上の「APIキーを作成」をクリックします。


以下のポップアップが表示されるので、GoogleCloudプロジェクトを選択してください。


以下のポップアップが表示されたら、APIキーの作成は完了です。コピーボタンでAPIキーをコピーして控えておきましょう。





APIキーが漏洩するとセキュリティリスクがあるので気をつけてください
後からAPIキーを取得する場合は、以下のような表の「APIキー」をクリックすると、もう一度表示することができます。


STEP②:RPA(Uipath)でGeminiを呼び出す【APIキー】
それではRPA(Uipath)で生成AI Geminiを呼び出していきましょう。
前準備:変数を用意する
まず以下の変数を用意してください。変数名はサンプルなので、好きな名前にしてください。
- geminiModel(String):Geminiのモデル名を格納します
- apiKey(String):APIキーを格納します
- endPointURL(String):GeminiのエンドポイントURLを格納します
- promptText(String):AIに渡すプロンプト(命令文)を格納します
- jsonPayload(String):AIに渡す各種設定情報(Json形式)を格納します
- jsonObj(JObject):Geminiの戻り値をJsonオブジェクトに変換する際に使用します
※()内は変数の型です
完成イメージは以下の通りです。


生成AIに渡すパラメーターを設定する
以下のようにパラメーターを設定しましょう。
geminiModel = "gemini-2.0-flash"
apiKey = "{APIキーを入力}"
endPointURL = "https://generativelanguage.googleapis.com/v1beta/models/" + geminiModel +":generateContent?key=" + apiKey
promptText = "こんにちは、Gemini API!"
完成イメージは以下の通りです。


生成AIに渡すJSON文字列を作成する
生成AIにAPI経由でプロンプトや各種設定を渡す際は、JSON形式文字列を使用します。
簡単にJSON文字列を扱うには、テキストファイルに記載したJSON文字列を読み込むのが良いです。以下のJSON文字列を適当なテキストファイルに書き込んで保存しましょう。
私は「JsonPayload.txt」というテキストファイルを、プロジェクトフォルダに作成しました。
{
"contents": [
{
"parts": [
{
"text": "{{PROMPT_TEXT}}"
}
]
}
],
"generationConfig": {
"responseModalities": [
"TEXT"
],
"maxOutputTokens": 10000,
"temperature": 0.2
}
}
上記Json文字列のパラメーターについて、簡単に解説します。
- text
-
生成AIに対するプロンプト(命令文)を指定します。
- responseModalities
-
AIの応答形式を指定する配列です。TEXTは文字列での回答となります。
- maxOutputTokens
-
生成する応答の最大トークン数を指定します。トークン数を制限することで、API呼び出しのコストを管理できます。
- temperature
-
モデルの出力のランダムさを制御するパラメータです。
- 0.0 に近いほど、より確定的で予測可能な応答になります。
- 1.0 に近いほど、よりランダムで創造的な応答になります。
続いて作成したテキストファイルの内容を読み込みます。
「テキストファイルを読み込み」アクティビティを配置し、プロパティを設定します。
- ファイル名:作成したテキストファイル名
- 出力先:最初に作成した「JObject型変数」を指定


読み込んだテキストのうち「{{PROMPT_TEXT}}」の部分を「promptText」変数に置換します。
jsonPayload = jsonPayload.Replace("{{PROMPT_TEXT}}",promptText)
Replaceメソッドの詳細は、以下の記事を参考にしてください。
HTTPリクエストを送信して生成AIと会話する
「HTTP要求」アクティビティを配置します。(Uipath.WebAPI.Activitiesパッケージ v25.2.1を使用)
「設定」をクリックして、以下のパラメーターを設定します。設定後はOKボタンで保存します。
- エンドポイント:「endPointURL」変数を指定
- 要求メソッド:POSTを指定


次に「HTTP要求」アクティビティのプロパティを設定します。
- 本文:「jsonPayload」変数を指定(テキストファイルの中身を格納した変数です)
- 本文形式:「application/json」を指定
- 応答コンテンツ:「responseContent」変数を指定(戻り値を格納するString型変数)





これでGeminiとのAPI連携は完了です!
実行して結果を確認する
「メッセージをログ」アクティビティで「responseContent」変数を出力してみましょう。
以下のようなJSON文字列が表示されたらOKです!
{
"candidates": [
{
"content": {
"parts": [
{
"text": "こんにちは!Gemini APIをご利用いただきありがとうございます。何かお手伝いできることはありますか? どんな質問でも、どんなタスクでも、お気軽にお申し付けください。\n"
}
],
"role": "model"
},
"finishReason": "STOP",
"avgLogprobs": -0.16208763683543487
}
],
"usageMetadata": {
"promptTokenCount": 5,
"candidatesTokenCount": 34,
"totalTokenCount": 39,
"promptTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 5
}
],
"candidatesTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 34
}
]
},
"modelVersion": "gemini-2.0-flash"
}
主要なパラメーターについて、解説します。
- text
-
生成AI(Gemini)によって生成されたテキスト応答です。
- finishReason
-
モデルが応答の生成を完了した理由を示します。
- STOP:モデルが自然に生成を完了した
- MAX_TOKENS:トークン上限(maxOutputTokens)に達した
- SAFETY:有害なコンテンツの生成を避けるためのフィルタリングによって停止
- RECITATION:既存の著作物からの引用や言及が必要である可能性が高い
- promptTokenCount
-
リクエストで送信したプロンプトに含まれるトークンの数です。
- candidatesTokenCount
-
生成された回答(text)に含まれるトークンの合計数です。
- totalTokenCount
-
プロンプトと生成された回答(text)のトークン数の合計です。
- modality
-
プロンプトや回答のデータの種類を示します。ここでは「TEXT」なのでテキストデータです。画像などの他の種類のデータが含まれる場合は、別の要素が追加されます。
- tokenCount
-
modality
のデータのトークン数です。 - modelVersion
-
この回答を生成したGeminiのモデルのバージョンです。



TokenCountで使用したトークン数が分かるので、1分あたりのトークン制限に引っかかるか判断できるのは良いですね



でもJson文字列からAIの回答だけ取り出すにはどうすれば良いですか?



次は回答だけ取り出していきましょう
JSON文字列から生成AIの回答を抽出する
JSON文字列から特定の項目を取り出す場合は、まずJSON文字列をJsonオブジェクトに変換します。
「JSONを逆シリアル化」アクティビティを配置し、JSON文字列プロパティに「responseContent」変数を設定しましょう。


JSONオブジェクトから特定の値(text)を取り出す場合は、以下のように記述しましょう。
jsonObj("candidates")(0)("content")("parts")(0)("text").ToString
上記の実行結果はこちらです。
こんにちは!Gemini APIをご利用いただきありがとうございます。何かお手伝いできることはありますか? どんな質問でも、どんなタスクでも、お気軽にお申し付けください。



簡単に生成AIとRPAを連携できましたね
APIキーを使った実装はセキュリティリスクがあるので、本番ではアクセストークンを使った実装にしてください。アクセストークンを使った実装方法はこの後解説します。



今回作成したプロセスの全体像を共有しておきます





続いてアクセストークンを使った実装方法です
STEP③:アクセストークン・リフレッシュトークンを取得
アクセストークンを使ってGeminiAPIと連携する場合、まずはリフレッシュトークンを用意する必要があります。
最終的な完成イメージを先に共有します。


リフレッシュトークンを取得する
リフレッシュトークンの取得方法は以下の記事にまとめています。手順通りに進めてリフレッシュトークンを取得してください。
以下の記事で準備すること
- リフレッシュトークンのコード
- GoogleCloudConsoleのクライアントID
- GoogleCloudConsoleのクライアントシークレット


記事の手順通りに進めると、アクセストークンとリフレッシュトークンが取得できるはずです。
アクセストークンは有効期限が短いので、リフレッシュトークンを使って毎回アクセストークンを再取得することで、持続的に認証することが出来ます。
RPA(Uipath)でアクセストークンを取得する
API連携にて作成したプロセスの先頭に追加していきます。
HTTPリクエストを送信
HTTPリクエストを送信して、アクセストークンを取得します。
「HTTP要求」アクティビティを配置します。「設定」ボタンをクリックし、以下のように設定します。


- エンドポイント:”https://www.googleapis.com/oauth2/v4/token” を設定する
- 要求メソッド:POSTを設定する
- grant_type:”refresh_token”を設定する
- refresh_token:リフレッシュトークンを設定する
- client_id:GoogleCloudConsoleのクライアントIDを設定する
- client_secret:GoogleCloudConsoleのクライアントシークレットを設定する
※③④⑤⑥は「パラメーターを追加」ボタンから追加できます
またプロパティも一部変更します。


- 本文形式:「application/x-www-form-urlencoded」を設定する
- 応答コンテンツ:「responseContent」変数を設定する(JObject型変数)
アクセストークンが返ってくるのを確認する
この状態で実行すると、以下の結果が「responseContent」変数に格納されます。
{
"access_token": "{アクセストークン}",
"expires_in": 3599,
"scope": "https://www.googleapis.com/auth/generative-language.tuning",
"token_type": "Bearer",
"refresh_token_expires_in": 351669
}



access_tokenにアクセストークンコードが入っていますね



この応答からアクセストークンだけを抽出して変数に格納しましょう
JSON文字列からアクセストークンを抽出する
手順はAPIキーで実行した時と同じです。
- 「JSONを逆シリアル化」アクティビティを配置し、JSON文字列プロパティに「responseContent」変数を設定。
- 「代入」アクティビティで「accessToken」変数(String型)に
jsonObj("access_token").ToString
と設定。


これでアクセストークンを「accessToken」変数に格納できました。
これを使ってGeminiとAPI連携していきます。
現時点のUipath画面イメージ(API連携のプロセスの先頭に追加しましょう)


STEP④:アクセストークンを使ってRPA(Uipath)でGeminiを呼び出す
API連携プロセスとの差分のみ解説します。
APIキー連携プロセスからの変更点
以下の点を変更します。
- APIキーの代入アクティビティを削除(
apiKey
変数を削除) - 「endPointURL」の中身を
"https://generativelanguage.googleapis.com/v1beta/models/" + geminiModel +":generateContent"
に変更
HTTP要求アクティビティの設定変更
Gemini用の「HTTP要求」アクティビティの設定を開き、以下の手順を実施ください。
- ヘッダーを追加をクリック
- 名前:Authorization
- 値:”Bearer ” + accessToken


実行して結果を確認する
以下のように結果が返ってくれば成功です!
{
"candidates": [
{
"content": {
"parts": [
{
"text": "こんにちは!Gemini APIをご利用いただきありがとうございます。何かお手伝いできることはありますか? どんな質問でも、どんなタスクでも、お気軽にお申し付けください。\n"
}
],
"role": "model"
},
"finishReason": "STOP",
"avgLogprobs": -0.16208763683543487
}
],
"usageMetadata": {
"promptTokenCount": 5,
"candidatesTokenCount": 34,
"totalTokenCount": 39,
"promptTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 5
}
],
"candidatesTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 34
}
]
},
"modelVersion": "gemini-2.0-flash"
}
続きはAPIキーの連携プロセスと同じになるので、こちら をご覧ください。



これでセキュリティが強固なアクセストークンを使ったAPI連携が実現できました



これでもっとAIを活用できそうです!
まとめ:生成AI×RPAはめちゃ便利
いかがだったでしょうか。意外と簡単に生成AIとRPAを連携できましたね。
生成AIとRPAを掛け合わせることで、単体では難しかった自動化が簡単に実現できるようになりました。
アイデア次第で無限の可能性がありますので、ぜひトライしてみてください!
RPAエンジニアを目指す方や、RPAを導入したい企業向けの記事をアップロードしていますので、ぜひ参考になさってくださいね!


コメント