【業務改善】Google Apps ScriptでGeminiを使ってみる【GPTs】

みなさまこんにちは。今回は昨年12月にGoogleが公開したGeminiというAIをGoogleのサービス内で活用してみようと思います。
当然私はプログラムコードなどは書けないのでOpenAIのChatGPTに全力で手伝ってもらいます笑
余談ですが1月11日にGPT Storeが公開されましたね!せっかくなのでGeminiのコードを作成するGPTsを作って、手伝ってもらおうと思います。

最終的に出来上がったコードは以下です。Google AppsScriptで実行できます。

function generateContentWithParameters() {
  var apiKey = 'your_api_key'; // あなたのAPIキーを設定
  var apiUrl = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent';

  var payload = {
    contents: [{
      parts: [{
        text: "「神田川」という曲名でBUCK-TICKっぽく作詞する"
      }]
    }],
    // パラメータの設定
    generationConfig: {
      stopSequences: ["The End"], // ストップシーケンス
      temperature: 0.9, // ランダム性の度合い(0から1)
      maxOutputTokens: 150, // 最大トークン数
      topP: 0.9, // 生成の多様性
      topK: 40 // 生成の多様性
    },
    safetySettings: {
      category: "HARM_CATEGORY_DANGEROUS_CONTENT",
      threshold: "BLOCK_ONLY_HIGH"
    }
  };

  var options = {
    'method' : 'post',
    'contentType': 'application/json',
    'payload' : JSON.stringify(payload),
    'muteHttpExceptions': true
  };

  try {
    var response = UrlFetchApp.fetch(apiUrl + '?key=' + apiKey, options);
    var content = JSON.parse(response.getContentText());
    Logger.log(content); // レスポンス内容をログに記録
  } catch (error) {
    Logger.log(error.toString());
  }
}


//temperature:

//最低値: 0
//最高値: 1
//説明: 生成されるテキストのランダム性を制御します。0は完全に決定論的な出力(非常に予測可能)、1は最大のランダム性を意味します。

//maxOutputTokens:

//最低値: 1
//最高値: Gemini APIの限界に依存(ドキュメントによれば、通常の上限は2048トークン)
//説明: 生成される出力の最大トークン数(単語数)を制限します。この値が大きいほど、より長いテキストが生成されます。

//topP (nucleus sampling):

//最低値: 0
//最高値: 1
//説明: 生成時に考慮される次の単語の確率質量の累積閾値。高い値はより多様なテキストを生成し、低い値はより予測可能なテキストを生成します。

//topK:

//最低値: 0
//最高値: 任意の正の整数
//説明: 次の単語の候補として考慮される最高の単語数。高い値は多様性を高め、低い値は一貫性を高めます。

生成結果(BUCK-TICKを指定してみましたが、沢田研二っぽい。。。)

神田川のほとり
雨の降る夜
街灯に照らされた
二人の影

(Chorus)
抱きしめたい
あなたを強く
離さないよ
永遠に

(Verse 2)
思い出の場所
二人で過ごした日々
あの頃に戻りたい
もう二度と

(Chorus)
抱きしめたい
あなたを強く
離さないよ
永遠に

(Bridge)
時が経っても
あなたのことを忘れない
ずっと心に
あなたがいる

(Chorus)
抱きしめたい
あなたを強く
離さないよ
永遠に

(Outro)
神田川のほとり
雨の降る夜
二人の
目次

はじめに

Geminiとは何か?

私も詳しくはわかってませんが、ChatGPTのようなAIのGoogle版です。GoogleにはBardというAIチャットがありますが、その裏側で動いている言語モデルがGeminiだそうです。よくわかんない説明ですね笑

詳しいことはGoogleさんの解説記事に任せます!

詳しいことはさておき、どんなことができるのかを実行して学ぶのが私のスタンスなので早速実行しましょう。

Geminiを使うサポートしてくれるGPTsを作る

準備

今回はGPTsを作ってGeminiをGoogleサービス(スプレッドシートとかドキュメントなど)で活用できるようになることが目標です。
※GPTsを使用するためにはChatGPTの有料プランを契約する必要があります。

私はコードを書けないし、理解もできませんがGPTはわかってくれると思いますので、Googleが提供しているGeminiの情報を探してみましょう。
検索してみるとこのサイトAPIに関するドキュメントがありました。Read API docsを見てみましょう!

GoogleのサービスなのでGoogle AppsScriptに関するドキュメントがあるだろうと思っていましたが、、、なんとありませんでした!
残念ですがChatGPTならなんとかしてくれるかと聞いてみます。

APIのドキュメントを解説してほしいんだけど、Google AppsScriptで使いたいのね。でもGoogle AppsScript用のドキュメントがないのよ。。。 REST APIのドキュメントならあるんだけど君はこれをGoogle AppsScript用に読み替えて解説できるかい?

もちろん、Google Apps ScriptでREST APIを使用する方法について説明できます。Google Apps Script(GAS)はJavaScriptベースのスクリプト言語で、Googleのサービスと連携して動作します。REST APIをGASで使用する場合、主にUrlFetchAppサービスを使用してHTTPリクエストを行います。
一般的なREST APIの使用方法は以下のステップに分けられます:
エンドポイントの特定: APIのエンドポイント(URL)を特定します。
HTTPメソッドの選択: GET、POST、PUT、DELETEなどのHTTPメソッドを選択します。
ヘッダーの設定: 認証やコンテンツタイプなど、必要なヘッダーを設定します。
リクエストボディの準備: POSTやPUTメソッドを使用する場合、送信するデータをリクエストボディに設定します。
リクエストの実行とレスポンスの処理: UrlFetchAppを使ってリクエストを実行し、レスポンスを受け取ります。

言ってることの意味はわからないけど、とりあえずできるっぽいのでGPTsを作っていきましょう。

Gemini用GPTs作り

ナレッジファイル

GPTsではナレッジファイルを読み込ませて生成される回答の品質を上げることができるようです。
まずはナレッジファイルを作成しましょう!と、言ってもGoogleの提供してるドキュメントを全部コピペしてPDF作るだけですが。。。

このファイルはGoogleのAIであるGeminiAPIの使い方について書かれています。内容を読み込んでください。
”’
GoogleのAI「Gemini」をGoogle Apps Scriptで使用するためのサポートを提供します。このモデルは、ユーザーのニーズを理解し、それに対して質問を提示してニーズを明確化します。そして、ユーザーの要求に応じて適切なGoogle Apps Scriptコードを作成します。特に重要なのは、コード作成時にナレッジファイル(REST APIのリファレンス)を常に参照することです。このリファレンスはREST API用ですが、Google Apps Scriptで使用できるように修正して提供します。
”’

ドキュメントを提供していただきありがとうございます。このドキュメントは、GoogleのAIであるGeminiAPI、特にGoogle Apps Scriptの使用方法について概説しています。このドキュメントでは、Geminiモデルはユーザーのニーズを理解し、明確な質問を行い、ユーザーのリクエストに応じて適切なGoogle Apps Scriptコードを生成するように設計されていると説明されています。重要な点は、コード生成時にナレッジファイル(REST APIリファレンス)を使用することである。このリファレンスは主にREST API用のものですが、Google Apps Scriptで使用するために適応されています。

この理解に基づいて、Google Apps ScriptでGeminiAPIを使用するための日本語サポートを提供するGPTを作成するお手伝いをすることができます。このGPTは、ユーザがGeminiモデルを理解し、効果的に利用することを支援し、特に、REST APIドキュメントを必要に応じて参照しながら、Google Apps Script用のコードを生成し、適応させることを支援します。

このGPTの具体的な動作や機能を定義することから始めましょう。このGPTに特にどのような機能や特徴を持たせたいですか?

ちょっと不思議なところもあるけどだいたい理解してくれた様子ですね。
ここからより具体的な振る舞いなどを設定していきます。

GPTへの入力

ユーザーはGeminiをGoogle AppsScriptで使用したいです。
あなたはユーザーの希望を叶えるコードを書いてください。
ユーザーのインプット情報は抽象的で必要十分な要件を満たしていない可能性があります。 その場合あなたはユーザーからのインプットを引き出すための質問をしてください。
ユーザーが回答しやすいように質問だけでなく回答のサジェストもしてください。 番号を割り振るなどしてユーザーの入力手間を最小限になるように工夫してください。

素晴らしい!さて、このGPTの名前を決めよう。Gemini Script Assistant」はどうでしょう?この名前を確認しますか、それとも別の名前を提案しますか?

もう少し聞かれると思いきやすんなり次のステップに進みましたね。ここからは名前とサムネイル画像を決める感じです。
これが決まると更に詳細な情報をGPTに伝えていきます。

ファンタスティック!Gemini Script Assistantの動作をさらに洗練させましょう。

お客様のニーズをよりよく理解するために、ユーザーがこのGPTとやりとりする典型的なシナリオについて詳しく教えてください。これは、GPTの応答をより効果的に調整するのに役立ちます。

最も重要なことはナレッジファイルを参照することです。回答する内容がコードに関する場合は必ずナレッジファイルを参照してください。

会話サンプル
”’
ユーザー:こんにちは
GPT:どのようなコードを書きましょうか?
ユーザー:スプレッドシートにGPTを入れたい
GPT:{必要十分な要件が定義されるまでユーザーに質問する}
”’

Gemini Script Assistantの動作を改良しましたので、プレイグラウンドで操作してみてください。そうすることで、Gemini Script Assistantが皆さんの期待に応えているかどうか、さらに改良が必要かどうかを確認することができます。

いったん完成したようなので試してみます。

GPTsを試してみる

サンプルコード生成

こんにちは

GPT
こんにちは!Gemini Script Assistantです。Google Apps ScriptとGoogleのGemini AIに関するサポートを提供しています。どのようにお手伝いしましょうか?

なんかサンプルコードを書いてください。

GPT
Gemini Script Assistant
もちろんです。サンプルコードを作成しますが、どのような機能や目的を持つコードをご希望ですか?例えば、特定のAPI機能の使用方法、データ処理、ユーザーインターフェースの作成など、具体的な要求を教えていただけると助かります。それにより、より適切なサンプルコードを提供できます。

Geminiを使ってみたいなるべく簡単のでよろしく

GPT
Gemini Script Assistant
了解しました。GoogleのGemini APIを使用して、Google Apps Scriptで簡単な機能を実装するサンプルコードを作成します。このサンプルでは、Gemini APIを呼び出してテキストコンテンツを生成し、その結果をログに記録する機能を実装します。

function generateContentWithGemini() {
  var apiKey = 'your_api_key'; // あなたのAPIキーを設定
  var apiUrl = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent';

  var payload = {
    contents: [{
      parts: [{
        text: "ここにプロンプトを書く"
      }]
    }]
  };

  var options = {
    'method' : 'post',
    'contentType': 'application/json',
    'payload' : JSON.stringify(payload),
    'muteHttpExceptions': true
  };

  try {
    var response = UrlFetchApp.fetch(apiUrl + '?key=' + apiKey, options);
    var content = JSON.parse(response.getContentText());
    Logger.log(content); // レスポンス内容をログに記録
  } catch (error) {
    Logger.log(error.toString());
  }
}

APIキーをGoogle AI Studioで取得してpromptを入力して結果を見てみます。

生成結果

昔々、あるところに、勇気のある小さな女の子が住んでいました。その女の子は、勇気の花を咲かせるという伝説を知っていました。勇気の花は、勇気のある人が命を吹き込むことができる特別な花です。 女の子は、勇気の花を咲かせることを夢見ていました。そしてついに、彼女はその花を育てる方法を見つけました。彼女は、勇気の花の種を彼女の家の裏庭に植え、毎日水をあげました。そしてある日、花はついに咲いたのです。 勇気の花は、とても美しく、女の子はとても嬉しく思いました。彼女は、勇気の花を守り、決して離さないように誓いました。 ある日、女の子が学校に行っている間に、嵐がありました。嵐は、女の子の家を破壊し、勇気の花も傷つけてしまいました。女の子は、家に帰ってその光景を見て、とても悲しく思いました。 しかし、女の子はあきらめませんでした。彼女は、勇気の花を復活させるために、必死で看病しました。そしてついに、花は復活したのです。 女の子は、勇気の花が復活したことをとても喜びました。彼女は、勇気の花を守り、決して離さないように誓いました。そして、彼女は、勇気の花から勇気を得て、どんな困難にも立ち向かうことができるようになりました。

まさかの一撃でサンプルコードができました!!!
もう少し文章の感じなどを調整できると聞いたことがあるのでGPTに聞いてみます。

サンプルのコードはちゃんと動いてましたさすがですね もう少しGeminiの表現を規制したいんだけどできる?ナレッジ参照してパラーメータをすべて読み込んだ上でコードを修正してみて

Gemini APIでは、レスポンスの生成方法を制御するためにいくつかのパラメーターが利用できます。私のナレッジソースによると、次のようなパラメーターが存在します:
Temperature: 生成されるテキストの創造性や予測不可能性を制御します。値が高いほど、より創造的で予測不可能なテキストが生成されます。逆に、値が低いと、より予測可能で安定したテキストが生成されます。
topP: このパラメーターは、次のトークンの選択における確率のしきい値を設定します。高い値を設定すると、より多様なトークンが選択される可能性が高まります。
topK: このパラメーターは、次のトークンの候補として考慮されるトップのトークンの数を制御します。値が高いほど、より多くのトークンが候補として考慮されます。

function generateContentWithParameters() {
  var apiKey = 'your_api_key'; // あなたのAPIキーを設定
  var apiUrl = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent';

  var payload = {
    contents: [{
      parts: [{
        text: "ここにプロンプトを書く"
      }]
    }],
    // パラメータの設定
    generationConfig: {
      stopSequences: ["The End"], // ストップシーケンス
      temperature: 0.9, // ランダム性の度合い(0から1)
      maxOutputTokens: 150, // 最大トークン数
      topP: 0.9, // 生成の多様性
      topK: 40 // 生成の多様性
    },
    safetySettings: {
      category: "HARM_CATEGORY_DANGEROUS_CONTENT",
      threshold: "BLOCK_ONLY_HIGH"
    }
  };

  var options = {
    'method' : 'post',
    'contentType': 'application/json',
    'payload' : JSON.stringify(payload),
    'muteHttpExceptions': true
  };

  try {
    var response = UrlFetchApp.fetch(apiUrl + '?key=' + apiKey, options);
    var content = JSON.parse(response.getContentText());
    Logger.log(content); // レスポンス内容をログに記録
  } catch (error) {
    Logger.log(error.toString());
  }
}


//temperature:

//最低値: 0
//最高値: 1
//説明: 生成されるテキストのランダム性を制御します。0は完全に決定論的な出力(非常に予測可能)、1は最大のランダム性を意味します。

//maxOutputTokens:

//最低値: 1
//最高値: Gemini APIの限界に依存(ドキュメントによれば、通常の上限は2048トークン)
//説明: 生成される出力の最大トークン数(単語数)を制限します。この値が大きいほど、より長いテキストが生成されます。

//topP (nucleus sampling):

//最低値: 0
//最高値: 1
//説明: 生成時に考慮される次の単語の確率質量の累積閾値。高い値はより多様なテキストを生成し、低い値はより予測可能なテキストを生成します。

//topK:

//最低値: 0
//最高値: 任意の正の整数
//説明: 次の単語の候補として考慮される最高の単語数。高い値は多様性を高め、低い値は一貫性を高めます。

パラメータを調整できるコードの完成です!!!

まとめ

今回はスプレッドシートやドキュメントまでは手が出ませんでしたが、GPTsを作ったおかげでなんとかなりそうな気がしてきました!
今回使用したGPTsは公開してあるので興味のある方は使ってみていただければと思います。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

目次