Google Apps ScriptからBard API(Gemini)?で質問してみた

かつては様々なAI分野では先を行っていたハズのGoogle。コロナ禍が明けてみたら、周回遅れもいいところみたいな感じでわずか数年でChatGPTStable DiffusionといったAIプログラムに大きく差を付けられてしまいました。そんな中焦って表に出したGoogle Bardですが、大爆死して株価急落というのは記憶に新しい所です。

ここから巻き返すのはかなりの大変だと思いますが、Google Workspaceアカウントでも使えるようになり、またまだ表沙汰になっていないのですが、Google Bard APIがどうも叩けるらしいという情報を得て、Google Apps Scriptで挑戦してみました。

※2024年2月8日、これまでGoogle Bardと呼ばれていたサービスをGoogle Geminiに改称しパワーアップしました。Webでテストする場合はこちらから利用可能です。

2023年アップデート Google Workspaceの新機能

今回利用するサンプルスプレッドシート

但し、2023年現在、まだAPIからの実行では日本語が使えない為、日本語の質問は一度英語に翻訳し質問=>返答を再度日本語に翻訳といったまどろっこしい手順を踏む必要があるため(Bardそのものは既に日本語が使えるのですが)、翻訳のスクリプトも併用が必要です。

図:ウェブで使ってみた事例

Google Apps Scriptでは簡単に翻訳できる【GAS】

事前準備

概要

2023年7月現在、Google Bard APIというものがリリースされているわけではなく、Bard APIで利用されてるVertex AI APIというRest APIがリリースされたことで利用が可能になっています。これをGoogle Apps Scriptから叩きに行くわけです。ただこのAPIはChatGPTのようなシンプルなチャットの為のAPIというわけじゃなく、様々な言語モデルと方向性、トレーニングなどが重なり合ってるAPIで、チャットはその1部分に過ぎないといった感じです。

利用料金

ChatGPTと比較すると非常に料金体系がわかりにくいものになっています。前述のように単純なAPIではないので、テキスト、画像、動画、それに伴うディスクやCPUなどでも大きく変わってきます。今回は単純にテキストでリクエストして簡単に返してもらうだけなのでそこまで気にするような金額にならないと思いますが・・・

APIを有効化

GCP側で今回利用するAPIを有効化する必要性があります。

  1. GCPを開き、サイドバーからAPIとサービスを開きます。
  2. 上部にある「APIとサービスの有効化」をクリック
  3. 「Vertex」を検索し、Vertex AI APIクリックします。
  4. 有効化をクリックします。

図:今回はこのAPIを有効化する

プロジェクトを移動する

Google Apps ScriptのプロジェクトをGCP側と連結する手順は以下の通り

  1. Google Cloud Consoleを開く
  2. 左上にある▼をクリックする
  3. ダイアログが出てくるので、新規プロジェクトを作るか?既存のプロジェクトを選択する。この時、Google Workspaceであれば選択元は「自分のドメイン」を選択する必要があります。
  4. プロジェクト情報パネルから「プロジェクト番号」をコピーする
  5. 同じくプロジェクトIDもコピーしておく(こちらはコード内で利用します)
  6. 対象のGoogle Apps Scriptのスクリプトエディタを開く
  7. サイドバーからプロジェクト設定を開く
  8. プロジェクトを変更ボタンをクリック
  9. GCPのプロジェクト番号に、4.の番号を入れてプロジェクトを設定をクリック

図:プロジェクト番号をコピーしておきます

図:プロジェクト変更画面

appsscript.jsonに記述を追加する

スクリプトエディタの左サイドバーから「プロジェクト設定」を開き、「appsscript.json」マニフェスト ファイルをエディタで表示するにチェックを入れて、appsscript.jsonを表示する。その後そのファイルを開き、以下のように記述を行います。必須の作業です。これをしてしまうと、今後メソッドを追加したときに追加の認証は手動で、Scopeを入れてあげないと認証されないので要注意。

これを入れてあげないと403などのエラーになってしまうので要注意。GCPのAPIを叩く場合には必須の作業です。

初回認証をしておく

ここまでの準備で適当な関数を用意して実行すると認証が始まります。これをやっておかないと、スコープが足らないであったり、コードが初回で旨く動かないことが稀にあるので必ず実行しておきましょう。

クイックスタートを覗いてみる

Vertex AI APIクイックスタートと様々なユースケースを網羅してるVertex Model Gardenを覗いてみます。今回はChatGPTに対するBardの比較ということなので、テキストチャットの項目を調べてみたい。チャットプロンプトを試してみるという項目があるので、見てみるとAPIのエンドポイントやら追加するパラメータに関しての情報が記載されているので、これをもとにGASで組み立ててあげます。

また、Vertex Model Gardenに於いては、ものすごい色々な情報が記載されていて圧倒するのですが、モデル検索で「chat」と入れて絞り込むと出てくる「PaLM 2 for Chat」というものがそれに該当するので、開いてみる。クイックスタート同様に詳細な内容が出てきます。プロンプト設計を開くをクリックすると、実際のチャット画面とプロンプト項目が出てきて、微妙なバランスを調整しながらの最終的なコードを出力してくれます。

但し日本語に対応してるわけじゃないので、日本語対応のGoogle Bardと違ってローカルすぎる質問だと焼肉がBBQのメニューとしてアメリカンな答えが返ってきますので要注意。コードはPythonとCurlで叩いたときのものが出てくるので、Google Apps Scriptで参考にする場合は後者のcurlの構文を取得しましょう。

以下が得られた今回のサンプルコードです。bearer tokenが使えるようなので、OAuth2認証でもいけそうですね。というより、GASで叩くならばScriptApp.getOAuthToken()で行けるのではないかと。GCPは身内なんだし。

なお、parametersの様々な要素に関してクイックスタートにも記載がありますが、こちらにもドキュメントが用意されています。

図:質問内容がローカルすぎた事例

ソースコード

前述のVertex AI API Model Garden等のサンプルコードをもとにGASでアクセストークンを使って叩いてみようと思います。

GAS側コード

  • 予め前述で控えておいたGCPのプロジェクトIDを変数に入れておくことを忘れずに
  • Vertex Model Gardenで出力したcurlのコードをベースにPOSTでリクエストするコードに書き換えています。
  • apiendpointは他のリージョンのエンドポイントでも動くのではないだろうか?
  • payloadのcontentがチャットでこちらから問い合わせる文章になります。parameterが回答に対するランダム性などのオプション項目
  • 認証はGAS上で済ませてるので、ScriptApp.getAuthTokenでアクセストークンはすぐに取得出来る。便利。
  • POSTで投げて、resultの中のcontentが返り値。これをLanguageAppで翻訳すると日本語になって出力される。
  • Vertex AI APIのベースエンドポイントは複数リージョンあるので、上記のus-central以外でもリクエストは投げられるのではないかと。

10回もリクエスト投げてしまったけれど、果たしていくらくらい請求くるかな?

返り値

  • Contentの中に回答が入っています。英語ですが・・・
  • また、metadataの中にはリクエストで送ったトークンと、回答で返ってきたトークン数が記録されているので、だいたいの料金とかが想像できそうです。

動画

Chat GPT vs Google Bard for JavaScript, Apps Script Code

関連リンク

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)