🦝

社内用AIチャットアプリ② GAS + Gemini API

2024/06/11に公開

生成AIを業務で使うため、API経由だと学習利用しないということだったので、APIをつかったチャットアプリを作成します。
もともとGWS環境なので、GCP + GAS + Geminiで作成を進めていきます。

前回はオウム返しのアプリを作成したので、今回はgeminiへ接続していきます。

Google AI Studioの準備

GASを使ったREST版での使用の仕方の情報は少ないです。
数少ない情報の提供者様、ありがとうございました。

GCPで自分でモデルを準備するパターンとAI STUDIOを使うパターンと2通り出来るようです。
AI STUDIOではv1とv1betaが準備されているようです。(2024/06/10現在)
APIバージョン説明

一般的にWEBで公開されているものはv2のようで、URLを入力するとyoutubeを参照したりしてくれるのですが、そういったweb情報の取得がv1では出来ないようです。
早く、v2を使えるようになりたいですね。

早期アクセスアプリの有効化

GWS環境下で組織のルールに従っている場合、早期アクセスアプリを禁止にしている場合があります。
GWS管理者に設定を確認してもらい、禁止になっている場合は許可してもらうようお願いしてください。

参考までに、許可ポイントはGWS管理コンソール内の
「アプリ」>「その他のGoogleサービス」>「早期アクセスアプリ」
です。一番最後の方に表示されると思います。

APIキーを取得する

AI STUDIOにアクセスしてAPIキーを発行します。
リンク先からGoogle AI Studioにログインします。

すると通知が出てくるので、一番上だけチェックするとログインできるようになります。
必要に応じて2、3番目もチェックしてください。

ログイン出来たら「Get API Key」>「APIキーを作成」をクリックします。

どのGCPプロジェクトで作成するかの選択画面が出てきたら、前回作成したGCPプロジェクトを選択します。
「Google Cloudプロジェクトを検索」ボックスをクリックすると選択肢が現れます。

しばらくするとAPIキーが作成されるので、コピーして控えておいてください。
ちなみに、このAPIキーを使うためには課金情報が必要になってきます。プロジェクトの課金設定を行ったうえで作業を行ってください。

GASを変更する

前回作成したGASを変更します。

コードの変更

コード.gs
const GEMINI_API = "{APIキー}";

/**
 * Geminiにメッセージを送信し、答えを受け取る
 * 
 * @param {string} uText - 送信するメッセージ
 */
function fetch2Gemini(uText){

  // メッセージ作成
  const contentsStr = `{
    "role": "user",
    "parts": [{
      "text": ${JSON.stringify(uText)}
    }]
  }`;

  // GEMINIに送信する
  const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro-latest:generateContent?key=${GEMINI_API}`;
  const payload = {
    'contents': JSON.parse(`[${contentsStr}]`)
  };
  const options = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(payload)
  };
  const res = UrlFetchApp.fetch(url, options);

  // 受信メッセージをJSONに変換する
  const resJson = JSON.parse(res.getContentText());

  // 送受信のログを残す
  Logger.log(resJson);

  // 結果処理
  if(resJson && resJson.candidates && resJson.candidates.length > 0){
    return resJson.candidates[0].content.parts[0].text;
  }
  else{
    return '回答を取得できませんでした。';
  }
}

/**
 * Responds to a MESSAGE event in Google Chat.
 *
 * @param {Object} event the event object from Google Chat
 */
function onMessage(event) {
  let message = "";

  // イベントにメッセージが含まれていれば処理実行
  if(event.message.text){
    // メッセージ取得
    const uText  = event.message.text;

    // GEMINIに接続
    message = fetch2Gemini(uText);
  }

  return { "text": message };
}
  1. APIキーの設定
    スクリプトの最初にGEMINI_APIキーを設定しておきます。
    先ほど控えたAPIキーをここに入力しておいてください。

  2. fetch2Gemini関数の作成
    GEMINIに接続してお返事をもらう関数です。

  const contentsStr = `{
    "role": "user",
    "parts": [{
      "text": ${JSON.stringify(uText)}
    }]
  }`;

ここでgeminiに投げるコンテンツを作成します。詳細はこちらのチュートリアルをお読みください。
roleは"user"または"model"となります。userは質問者、modelはgeminiの回答となります。
partsの中身はメッセージ電文となり、textにメッセージ文字列を入力します。

urlに関してはこちらのRESTの中身をお読みください。
主に関係があるのは、v1betaのモデルの欄になるかと思います。今回はmodels.generateContentを使用したのですが、models.listを使用することでv1betaの中でも使用できるモデル一覧の取得などを行うことが出来ます。
今回のチャレンジでは、v1betaのgemini-1.5-pro-latestモデルを使用しています。

設定が終わればfetchを行い、回答のjsonを取得します。結果があればテキスト情報を返し、うまく行かなかった場合にはエラーを返します。

  1. onMessageの変更
    メッセージ取得時にオウム返しを行っていましたが、fetch2Gemini関数を実行するように変更します。

変更を行ったら上書き保存をしてください。

テストしてみる

前回のチャットに話しかけてみてください。
あいさつをするとちゃんと挨拶をし返してくれるはずです。かわいいですね。

公開してみる

せっかく作ったからには自分だけで使っておらず、社内全体に使ってもらいたいものです。
ただし、geminiに限らず生成系AIのAPIは従量課金制なので、使用者が増えると料金も上がっていきます。ご注意を。

Google Workspace Marketplace SDKを有効にする

GCPのコンソールに移動し、左上のナビゲーションメニューを開き、「APIとサービス」>「有効なAPIとサービス」をクリックします。
上部に「+ APIとサービスを有効にする」があるのでクリックし、検索バーで「
Google Workspace Marketplace SDK」を検索します。見つかったら
Google Workspace Marketplace SDKを開きAPIを有効にします。

アプリの構成の設定

APIを有効にしたら、「アプリの構成」タブを開き、必要な項目を入力していきます。

  • アプリの公開設定
    • 社内限定にするのであれば「限定公開」にチェックを付けます。
  • インストールの設定
    • 個別インストールと管理者によるインストールのままで大丈夫です。
    • インストールを管理したい場合、管理者のみに変更してください。(GWSの設定でインストール者を限定することもできます)
  • アプリの統合
    • Chat向けアプリにチェックをつけておきます。
    • ほかはチェックを外しておきます。
  • OAuthスコープ
    • emailとprofileが記入されてると思います。記載がない場合は下記画像を参考にしてください。
  • デベロッパー情報
    • 必須項目をすべて入力してください。おそらく、下図の3ヶ所。
      すべて入力したらば保存を押してください。

ストアの掲載情報の設定

  • アプリの詳細
    • 「言語1」を開き、「簡単な説明」の項目を埋めてください
    • 「料金」を「無料」にしてください
    • 「カテゴリ」は好きなものを選択してください。
  • 画像および映像
    • 32x32と128x128のアイコン、220x140のバナー画像を登録してください
  • スクリーンショット
    • チャット画面のサンプルを登録しておいてください
  • サポートのリンク
    • 準備できればそれぞれの情報を書いたもののURLを書いてください。
    • 利用規約、プライバシーポリシー、サポートが必須項目です。
  • 配布
    • すべてのリージョンにチェックを付けてください

アプリの構成も正しく設定できていれば「公開」ボタンを押せるようになっているはずです。
これでマーケットプレイスでの公開が開始されます。

GWSの設定

組織管理のGWSを使っている場合、管理者によってインストールできるアプリが制限されている場合があります。
また、インストールさせたい部署、させたくない部署など、条件をわけることも出来ます。
詳細はこちらをご覧ください。

Discussion