フォーム読み込み中
生産性向上は、個人や企業にとって永遠のテーマです。多くの人は、より効率的に仕事を進め、成果を上げたいと考えています。もちろん多くの企業も生産性をあげるためにさまざまな取り組みを行っています。社員のモチベーション管理、スキル向上やツールの活用がその取り組みの例となります。
生成AI の時代が来ていて、さらに生成AI を活用して何かを取り組もうと考えているが、どの生成AI を使えばよいのか、どのモデルがいいのか、どのように比較してみればいいのかよくわからない、といった場面がありませんか。
今回はGoogle スプレッドシートで簡単にさまざまな生成AI モデルの生成結果を比較してみるGoogle Apps Script(以下、GAS)を書いてみたので、その方法を紹介します。
今回取り上げる生成AI モデルは、Google 社とMicrosoft 社の生成AI モデルです。料金についてはここでは触れませんので、ご興味がありましたらお気軽に弊社までお問い合わせください。
構成はとても簡単です。スプレッドシートの指定したセルにプロンプトを記載、そのプロンプトをもとに各生成AI モデルが返したレスポンスをスプレッドシートに書き込むといった流れになります。
まず、各生成AI モデルを利用するための事前準備を行います。
Gemini と PaLM 2 モデルを利用するために、Google Cloud プロジェクトとモデルにアクセスするための認証(アクセストークン)が必要です。
参考:Gemini API / テキスト用のPaLM 2
ちなみに、Google AI Studio からAPIキーを発行してモデルにアクセスする方法もあります。
参考:Google AI Studio のクイックスタート
GPT-4 とGPT-3.5 を利用するためには、Azure 上でリソースを作成し、モデルをデプロイする必要があります。
参考: Azure OpenAI Service リソースを作成してデプロイする
Gemini と GPT-4 にリクエスト送信しレスポンスを取得する流れを参考例として記載します。PaLM 2 と GPT-3.5 も同じ方法ですので、ここでは割愛します。
Gemini 実装例
function requestGemini(prompt) {
if (!prompt) {
return "回答取得できませんでした"
}
const url = `https://{REGION}-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/{REGION}/publishers/google/models/gemini-1.0-pro:streamGenerateContent`; //REGIONとPROJECT_IDを適切な値に変更してください
requestBody = {
"contents": [
{
"role": "user",
"parts": [
{
"text": prompt
}
]
},
],
"generationConfig": {
"temperature": number, //numberを適切な値に変更してください
"topP": number, //numberを適切な値に変更してください
"topK": number, //numberを適切な値に変更してください
"candidateCount": integer, //integerを適切な値に変更してください
"maxOutputTokens": integer, //integerを適切な値に変更してください
"stopSequences": [
string, //stringを適切な値に変更してください
]
}
}
const requestOptions = {
"method": "post",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer " + アクセストークン //アクセストークンを必要な値に変更してください
},
"payload": JSON.stringify(requestBody),
"muteHttpExceptions": true,
}
const obj = JSON.parse(UrlFetchApp.fetch(url, requestOptions).getContentText());
let answer = "";
if (obj.candidates.length > 0 && obj.candidates[0].content.parts.length > 0) {
for (let data of obj) {
answer += data.candidates[0].content.parts[0].text;
}
}
else {
answer = "回答取得できませんでした"
}
return answer
}
GPT-4 実装例
function requestGPT4(prompt) {
if (!prompt) {
return "回答取得できませんでした";
}
const url = `https://{リソース名}.openai.azure.com/openai/deployments/{モデルデプロイ名}/chat/completions?api-version=2023-05-15`; //リソース名とモデルデプロイ名を適切な値に変更してください
requestBody = {
"model": model,
"messages": [
{
"role": "user",
'content': prompt
}
],
"temperature": number, //numberを適切な値に変更してください
"top_p": number, //numberを適切な値に変更してください
"max_tokens": integer, //integerを適切な値に変更してください
}
const requestOptions = {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"api-key": APIキー
},
"payload": JSON.stringify(requestBody)
};
const obj = JSON.parse(UrlFetchApp.fetch(url, requestOptions).getContentText());
let answer = obj.choices[0].message.content.trim();
return answer;
}
動かす前に、まず今回スプレッドシートで実装した動作仕様を簡単に紹介します。
A列〜C列は入力値です。
| Input | |
|---|---|
| A列 | カテゴリ(通常/翻訳) 翻訳以外は、通常を選択 |
| B列 | プロンプト 例:以下の文書を日本語に翻訳してください |
| C列 | プロンプト補足文書 例:B列プロンプトで示している「以下の文書」を記入 |
E列〜I列は生成AI から取得したレスポンスです。
スプレッドシートの【実行】>【レスポンス取得】 ボタンをクリックすると、Outputの値がスプレッドシートの該当列に書き込まれるように実装しています。
| Output | |
|---|---|
| E列 | レスポンス(Gemini) |
| F列 | レスポンス(PaLM2) |
| G列 | レスポンス(GPT-4) |
| H列 | レスポンス(GPT-3.5) |
| I列 | レスポンス(Google翻訳) ※A列の値が「翻訳」の場合のみ、C列の言語を判定の上、日本語の場合は英語へ、英語の場合は日本語へ翻訳 |
それでは実際のスプレッドシートで動かしてみたいと思います!
今回は以下の条件でリクエスト送信し、レスポンスを取得します。
<条件>
・カテゴリ:翻訳
・プロンプト:
以下の文書をわかりやすい日本語に表現してください
SDGs Actions: Providing Connectivity from the Sky to Enhance Education in Africa(*)
(*) 引用元:SoftBank Newsのタイトル
<結果>
スプレッドシートの実行>レスポンスを取得 ボタンをクリックするとE列〜から順次生成AI より取得した値が書き込まれます。
今回はカテゴリを「翻訳」にしたので、I列にGoogle翻訳を使った文書も書き込まれました。
いかがでしょうか。
生成AI に「わかりやすい日本語に表現してください」というリクエストをしたところ、単純な翻訳だけでなく、追加の説明文書も生成してくれましたね。
個人的な所見ではありますが、試してみた中で、わかりやすい日本語に表現する能力は、Gemini に比べPaLM 2 の方がよかったり、GPT-4 に比べGPT-3.5 の方がよかったりする場合も結構ありました。
世の中どんどん新しいモデルや、最新モデルが日々出ていく中、これからは複数のモデルを上手に使い分ける時代です。必ずしも最新モデルがどの領域でも優秀とは限らないので、必ず自分の要件で事前検証することが一番重要だと思います。
もちろん、コンシューマ向けのGemini(旧Bard)やChatGPT 、そしてエンタープライズ向けのVertex AI Studio 等からも、同じプロンプトを投げるとそれぞれレスポンスを取得できます。
ですが、今回のようにさまざまな生成AI でレスポンスを得て簡単に結果や精度を試してみたい時は、それぞれのツールで複数回実行しないといけない点は手間がかかりますね。
ほかにも、生成AI は適切な指示を与えなければ、望む結果を得られない可能性があるため、プロンプトエンジニアリングを行う際も、本仕組みが役に立つのではと思っています。
生成AI の利用を検討しているが、どのモデルがよいか、どんなプロンプトがよいか迷っているなら、ぜひ試してみてはいかがでしょうか。
当社で新たにリリースした「Vertex AI DIYプラン」をご紹介して終わりにします。Vertex AI Search では生成AI を使った検索を体験できるほか、どのモデルを使うかも選ぶことができます。
Vertex AI Search を使って社内文書を検索する生成AIを構築してみませんか?
ソフトバンクのエンジニアが構築をサポートします。
Vertex AI DIYプランでは、以下の3つのことをご体験いただけます。
詳細は、関連サービスにある「Vertex AI DIYプラン」をご確認ください。
Vertex AI Search を使って社内文書を検索する生成AIを構築してみませんか?
ソフトバンクのエンジニアが構築をサポートします。
Google の生成AIの導入を考えている方はもちろん、どのようなものか確認したいという方でもご活用いただけます。
Google サービスを支える、信頼性に富んだクラウドサービスです。お客さまのニーズにあわせて利用可能なコンピューティングサービスに始まり、データから価値を導き出す情報分析や、最先端の機械学習技術が搭載されています。
MSP(Managed Service Provider)サービスは、お客さまのパブリッククラウドの導入から運用までをトータルでご提供するマネージドサービスです。
条件に該当するページがございません