MENU
目次

【RPA×生成AI】Uipathで生成AI「Gemini」をAPI呼び出しする方法を徹底解説【ChatGPTやClaudeとの比較もあり】

生成AIとRPAを連携しよう
目次

RPA×生成AIの可能性

迷える子羊

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

現役エンジニア

RPAで自動化できる範囲が広がったり、より複雑な業務に対応できるようになります

例えば・・・

  • 問い合わせ対応の自動化:問い合わせメール内容をAIが自動判定・返信作成し、RPAがメール返信を実行
  • 請求書処理の自動化:請求書の画像をAIで読み取り、RPAがシステムに自動入力
  • 議事録の作成と共有:会議音声からAIで文字起こしし、RPAがデータを共有・記録する

このように生成AI単体でもRPA単体でも実現が難しい自動化も、2つを組み合わせる事で実現できるのです。

この記事では、生成AIとRPAを連携させる最初の1歩として、RPAから生成AIに簡単な命令文(プロンプト)を送信する方法をご紹介します。

あわせて読みたい
RPAとは?現役RPAエンジニアが出来ることや導入事例、導入手順まで徹底解説!中小企業向け業務自動化の... この記事を読むと RPAとは何か理解できる RPAの導入メリットが分かる RPAツールの選び方が分かる 具体的なRPA導入ステップを理解できる 本記事では、RPAの基本から具体...

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

https://ai.google.dev/gemini-api/docs/rate-limits?hl=ja

笑顔の子羊

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にサインインする画像

GoogleAIStudioでAPIキーを取得する

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

Get API keyをクリックする

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

APIキーを作成をクリックする

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

GoogleCloudプロジェクトを選択してAPIキーを作成する

まだGoogleCloudプロジェクトが無い場合は、以下の記事を参考に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に渡すパラメーターを設定する

以下のようにパラメーターを設定しましょう。

VB
geminiModel = "gemini-2.0-flash"
apiKey = "{APIキーを入力}"
endPointURL = "https://generativelanguage.googleapis.com/v1beta/models/" + geminiModel +":generateContent?key=" + apiKey
promptText = "こんにちは、Gemini API!"

完成イメージは以下の通りです。

変数の値を設定した完成イメージ

今回は「Gemini 2.0 Flash」を指定していますが、他のモデルを指定したい場合は「geminiModel」変数の値を変更ください。モデル名は公式ドキュメントを参考にしてください。

生成AIに渡すJSON文字列を作成する

生成AIにAPI経由でプロンプトや各種設定を渡す際は、JSON形式文字列を使用します。

簡単にJSON文字列を扱うには、テキストファイルに記載したJSON文字列を読み込むのが良いです。以下のJSON文字列を適当なテキストファイルに書き込んで保存しましょう。
私は「JsonPayload.txt」というテキストファイルを、プロジェクトフォルダに作成しました。

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 に近いほど、よりランダムで創造的な応答になります。

generationConfig以降は省略可能です。

続いて作成したテキストファイルの内容を読み込みます。
「テキストファイルを読み込み」アクティビティを配置し、プロパティを設定します。

  • ファイル名:作成したテキストファイル名
  • 出力先:最初に作成した「JObject型変数」を指定
Json文字列を含むテキストファイルを読み込み、プロンプトを置換する

読み込んだテキストのうち「{{PROMPT_TEXT}}」の部分を「promptText」変数に置換します。

VB
jsonPayload = jsonPayload.Replace("{{PROMPT_TEXT}}",promptText)

Replaceメソッドの詳細は、以下の記事を参考にしてください。

HTTPリクエストを送信して生成AIと会話する

「HTTP要求」アクティビティを配置します。(Uipath.WebAPI.Activitiesパッケージ v25.2.1を使用)

「設定」をクリックして、以下のパラメーターを設定します。設定後はOKボタンで保存します。

  • エンドポイント:「endPointURL」変数を指定
  • 要求メソッド:POSTを指定
HTTP要求アクティビティを配置し、設定ボタンからエンドポイントと要求メソッドを設定する

次に「HTTP要求」アクティビティのプロパティを設定します。

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

これでGeminiとのAPI連携は完了です!

実行して結果を確認する

「メッセージをログ」アクティビティで「responseContent」変数を出力してみましょう。
以下のようなJSON文字列が表示されたらOKです!

JSON
{
  "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)を取り出す場合は、以下のように記述しましょう。

VB
jsonObj("candidates")(0)("content")("parts")(0)("text").ToString

上記の実行結果はこちらです。

VB
こんにちは!Gemini APIをご利用いただきありがとうございます。何かお手伝いできることはありますか? どんな質問でも、どんなタスクでも、お気軽にお申し付けください。
笑顔の子羊

簡単に生成AIとRPAを連携できましたね

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

現役エンジニア

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

今回作成したAPIキーを使ったプロセスの全体イメージ
APIキーを使った実装
現役エンジニア

続いてアクセストークンを使った実装方法です

STEP③:アクセストークン・リフレッシュトークンを取得

アクセストークンを使ってGeminiAPIと連携する場合、まずはリフレッシュトークンを用意する必要があります。

最終的な完成イメージを先に共有します。

アクセストークンを使ってUipathからGeminiを呼び出すフローの完成イメージ

リフレッシュトークンを取得する

リフレッシュトークンの取得方法は以下の記事にまとめています。手順通りに進めてリフレッシュトークンを取得してください。

以下の記事で準備すること

  • リフレッシュトークンのコード
  • GoogleCloudConsoleのクライアントID
  • GoogleCloudConsoleのクライアントシークレット
あわせて読みたい
サルでも分かるアクセストークン/リフレッシュトークンを取得する方法【GoogleCloudConsoleでのOAuth2.0... この記事ではサルでも分かるように解説します リフレッシュトークンやアクセストークンの違いが分かる リフレッシュトークンやアクセストークンを取得できる よくあるエ...

記事の手順通りに進めると、アクセストークンとリフレッシュトークンが取得できるはずです。
アクセストークンは有効期限が短いので、リフレッシュトークンを使って毎回アクセストークンを再取得することで、持続的に認証することが出来ます。

RPA(Uipath)でアクセストークンを取得する

API連携にて作成したプロセスの先頭に追加していきます。

HTTPリクエストを送信

HTTPリクエストを送信して、アクセストークンを取得します。

「HTTP要求」アクティビティを配置します。「設定」ボタンをクリックし、以下のように設定します。

アクセストークンを取得するために、HTTP要求アクティビティの設定を行うイメージ
  • エンドポイント:”https://www.googleapis.com/oauth2/v4/token” を設定する
  • 要求メソッド:POSTを設定する
  • grant_type:”refresh_token”を設定する
  • refresh_token:リフレッシュトークンを設定する
  • client_id:GoogleCloudConsoleのクライアントIDを設定する
  • client_secret:GoogleCloudConsoleのクライアントシークレットを設定する

※③④⑤⑥は「パラメーターを追加」ボタンから追加できます

またプロパティも一部変更します。

HTTP要求アクティビティのプロパティ設定値のイメージ
  • 本文形式:「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と設定。
アクセストークンをJSON文字列から抽出するアクティビティイメージ

これでアクセストークンを「accessToken」変数に格納できました。
これを使ってGeminiとAPI連携していきます。

現時点のUipath画面イメージ(API連携のプロセスの先頭に追加しましょう)

ここまでのUipath完成イメージ_新規追加箇所のみ
現時点でのUipath画面イメージ(新規追加箇所のみ)

STEP④:アクセストークンを使ってRPA(Uipath)でGeminiを呼び出す

API連携プロセスとの差分のみ解説します。

APIキー連携プロセスからの変更点

以下の点を変更します。

  • APIキーの代入アクティビティを削除(apiKey変数を削除)
  • 「endPointURL」の中身を"https://generativelanguage.googleapis.com/v1beta/models/" + geminiModel +":generateContent"に変更

HTTP要求アクティビティの設定変更

Gemini用の「HTTP要求」アクティビティの設定を開き、以下の手順を実施ください。

  • ヘッダーを追加をクリック
  • 名前:Authorization
  • 値:”Bearer ” + accessToken
UipathにてHTTPリクエストでアクセストークンを使ってGeminiにプロンプトを送信するイメージ
アクセストークンを使ってGeminiにプロンプトを送信する

実行して結果を確認する

以下のように結果が返ってくれば成功です!

JSON
{
  "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を導入したい企業向けの記事をアップロードしていますので、ぜひ参考になさってくださいね!

あわせて読みたい
RPAエンジニアはやめとけ?現役RPAエンジニアが年収やキャリアのリアルな実態と将来性を徹底解説! 現役RPAエンジニアが以下の内容を解説します。 RPAエンジニアの基本的な仕事内容と役割 RPAは「やめとけ」と言われる具体的な理由と実態 年収相場とキャリアパスの可能...
Ueda
フリーランスエンジニア
RPAエンジニアです。
UipathやVBAを使用した開発を得意としています。優れた可読性と効率的な設計を併せ持つRPA開発を心がけています。
RPA初心者向けの教育経験多数あり。RPAの開発サポートも承ります。

Wordpressを用いたHP制作のお仕事も経験があります。本サイトもWordpressを用いて制作しております。

ペットのチワプーと暮らしてます。
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次