スプレッドシートでChatGPTライクの応答を返すカスタム関数を作成する方法

2023年1月26日

ChatGPTを活用方法について、色々なアイディアが出てきています。

そこで、スプレッドシートでChatGPTライクな応答を返すカスタム関数を作成する方法を解説します。

カスタム関数に必要なコードは用意していてコピペできるので、記事の手順に従って簡単に導入可能です。

一度スプレッドシートのファイルで設定すれば、以降はスプレ関数のように手軽利用できます。

※ChatGPTのAPIはまだ利用できないため、OpenAIの文章生成APIを使った方法です。

ChatGPTは基本ウェブサービスのみ利用可能

2023年になり、ChatGPT界隈がますます盛り上がりを見せております。

とても自然な日本語の文章応答に多くのユーザーが熱中し、マイクロソフトが巨額出資をするなど報じられています。

その中で、ChatGPTを活用した色々なアイディアが生まれています。

しかし、ChatGPTは現在ウェブサービスとしての提供されている状態です。

2022年11月に発表されて大きな反響を生んだOpenAIの文章生成Aiサービス「ChatGPT」

後述するChatGPTのAPIも2023年1月17日に発表されたものの、まだ使えるユーザーはほとんどいません。

スプレッドシートでChatGPTが使えると便利

ChatGPTをウェブサービス以外で使いたい場合に思いつくのがスプレッドシートやエクセルなどの表計算ソフトでの利用です。

スプレッドシートの関数としてChatGPTに投げかけるプロンプト(質問)を引数にすると、応答結果が返ってくる

こんな形でChatGPTが使えると、業務などでChatGPTを利用する際にとても便利です。

ChatGPTのAPIが使えるのはごく一部のみ

ChatGPTのAPIについては開発元のOpenAIが2023年1月17日にTwitterで「間もなくリリース予定」と発表しました。

ChatGPTのAPIを使いたい場合はウェイトリストへの登録を促されます。

発表から4日後には海外のユーザーでChatGPTの有償版(プロプラン)が使えるようになったと報告がありました。

しかし、現時点で日本のユーザーでChatGPTのプロプランを使えるようになった報告は確認できていません。

そのため、ChatGPTのAPIが使えるユーザーはほんのごくわずかで、まだほとんどすべてのユーザーでAPIは利用できません。

OpenAIのAPIでスプレッドシートでも手軽に利用

しかし、ChatGPTの開発元であるOpenAIは色々なAIサービスをAPIで提供しています。

その中にChatGPTと同様の文章生成AIがAPIリクエストで利用できるようになっています。

APIで使えるのはChatGPTと同じGPT3.5系のモデル(text-davinci)を使ったものがあり、性能面に違いはありますが、同じ仕組みです。

そのOpen AIのAPIを利用すれば、スプレッドシートのカスタム関数を作成することができます。

Google Apps Script(GAS)で文章生成するカスタム関数を用意すれば、スプレッドシートから関数のように手軽に利用可能です。

OpenAIの登録、APIキー発行方法

Open AIの文章生成AIをAPIから利用するには、Open AIの利用登録とAPIキーを発行する必要があります。

AutoWorkerの以下の記事でOpen AIの利用登録からAPIキーを発行するまでの手順を解説しています。

OpenAIにAPIリクエストする際に必要なAPIキーが取得できるので、記事に記載の手順に従ってAPIキーを発行してください。

OpenAIのAPIキーはこのあとスプレッドシートのカスタム関数を準備する際に使用します。

※Open AIの利用登録には、メールアドレスに加え、SMS認証可能な携帯番号が必要です。

ChatGPT風応答を返すスプレッドシートのカスタム関数の作成手順

Open AIのAPIキーが用意できたところで、実際にスプレッドシートでChatGPT風の応答を返すカスタム関数の作り方を解説します。

カスタム関数の作成にはGoogle Apps Script(GAS)を使いますが、GASコードはすでに用意しているので、コピペでOKです。

引数に指定したプロンプトに対する応答文を返すChatGPT風カスタム関数を以下の手順で作成していきます。

1.スプレッドシートを開いて、メニューバーにある「拡張機能>Apps Script」を選択します。

引数に指定したプロンプトに対してChatGPT風応答文を返すスプレッドシートのカスタム関数を作成するため、メニューバー「拡張機能>Apps Script」を選択

2.GASのスクリプトエディタが開くので、左メニューにある「プロジェクトの設定」をクリックします。

ChatGPT風応答を返すスプレッドシートのカスタム関数にはOpen AIのAPIキーの設定がいるため、左メニュー「プロジェクトの設定」を選択

3.プロジェクト設定画面を下にスクロールすると、スクリプトプロパティが表示されるので「スクリプトプロパティを追加」をクリックします。

Google Apps Script(GAS)のスクリプトプロパティに追加方法

4.キーの部分に「APIKEY」、値のところに前段に取得したOpen AIのAPIキーを入力し、「スクリプトプロパティの保存」をクリックします。

ChatGPT風応答を返すスプレッドシートのカスタム関数に必要なOpen AIのAPIキーをスクリプトプロパティに設定

5.再びコード画面に戻り、下記のGASコードをコピーして貼り付け、「Ctrl + S」のショートカットキーで保存します。

function inputPrompt(text) {
  //スクリプトプロパティに設定したOpenAIのAPIキーを取得
  const apiKey = ScriptProperties.getProperty('APIKEY');
  //文章生成AIのAPIのエンドポイントを設定
  const apiUrl = 'https://api.openai.com/v1/completions';
  //文章生成AIに投げるテキスト(プロンプト)を定義
  const prompt = text;
  //OpenAIのAPIリクエストに必要なヘッダー情報を設定
  let headers = {
    'Authorization':'Bearer '+ apiKey,
    'Content-type': 'application/json',
    'X-Slack-No-Retry': 1
  };
  //文章生成で利用するモデルやトークン上限、プロンプトをオプションに設定
  let options = {
    'muteHttpExceptions' : true,
    'headers': headers, 
    'method': 'POST',
    'payload': JSON.stringify({
      'model': 'text-davinci-003',
      'max_tokens' : 2048,
      'temperature' : 0.9,
      'prompt': prompt})
  };
  //OpenAIの文章生成(Completion)にAPIリクエストを送り、結果を変数に格納
  const response = JSON.parse(UrlFetchApp.fetch(apiUrl, options).getContentText());
  //OpenAIのAPIレスポンスを戻り値で返却
  return String(response.choices[0].text).replace('\n\n','');
}
引数に指定したプロンプトに対しChatGPT風応答文を返すスプレッドシートのカスタム関数実行に必要なGoogle Apps Script(GAS)のコード

以上の5Stepで引数にしていたプロンプトに対するChatGPT風応答を返すスプレッドシートのカスタム関数の設定が完了です。

ChatGPT風応答のカスタム関数の使い方と注意点

ChatGPT風応答のスプレッドシートのカスタム関数が準備できたので、実際に使い方を解説します。

使い方は通常のスプレ関数と同様に、以下ののような記述方法をセルに入力します。

=inputPrompt("プロンプト文")

実際に下記のような質問文をプロンプトとしてセットして、結果を確認します。

引数に指定したプロンプトに対しChatGPT風応答文を返すスプレッドシートのカスタム関数実行時は「不明な関数」と表示されることがあるが、そのまま入力して実行

【不明な関数:「inputPrompt」】と表示されますが、カスタム関数には表示されるため、気にせず入力を完了させます。

Loadingと表示されるので、少し待つと応答結果がセルに表示されます。

スプレッドシートでOpenAIの文章生成AIのAPIにGoogle Apps Script(GAS)でリクエストしてChatGPT風の応答結果を得るカスタム関数

このようにChatGPT風応答の応答結果を得るスプレッドシートのカスタム関数ができました。

実行に時間はかかるものの、スプレッドシートで利用できる関数と同じような使い勝手です。

ただ、ChatGPT風応答のカスタム関数には3つの注意点があります。

  1. スプレ読み込み時に再度APIリクエストが走り、結果が変わることがある
  2. APIの応答結果返却に時間がかかる(30秒以上)とエラー
  3. トークン数2048を超える文章は途中で切れる

スプレッドシートを開きなおしたタイミングなどで、カスタム関数が再度実行されてしまうことがあります。

その結果、応答文はランダムで生成されるところがあるため、応答結果が変わってしまいます。

さらに、Open AIのAPIリクエストした際に時間がかかることがあります。

カスタム関数は実行に30秒以上かかるとエラーになってしまいます。

Open AIの稼働状況が逼迫していたり、応答文が長いとエラーとして表示できません。

「Exceeded maximum execution time」と表示され、EORRORと出力されます。

APIリクエスト数を消費して、コストにもつながる部分なので留意しておきましょう。

応答結果の上限パラメータのmax_tokensは2048をセットしているため、多くのケースで問題はありませんが、応答結果が長いと、途中で文章が切れることがあります。

まとめ・終わりに

今回Googleスプレッドシートで質問などの文章を引数に指定すると、ChatGPT風の応答文を表示するカスタム関数の作成方法を紹介しました。

ChatGPTではAPIが利用できる有償のプロプランを使えるユーザーがごく一部のため、開発元のOpenAIが提供する同じGPT3.5系の文章生成AIにAPIリクエストして実現しました。

スプレッドシートに紐づく形でGoogle Apps Script(GAS)でカスタム関数のコードを用意すると、通常のスプレ関数と同じように値を出力可能です。

すでにOpen AIとAPIリクエストして応答文を出力するGASコードは用意したので、あとはAPIキーを準備するだけで使えます。

スプレッドシートでChatGPTみたいな応答ができると便利なので、ぜひ記事の解説に従って文章生成のカスタム関数を導入してみてください。