GASでOpenAIのAPIを利用してChatGPTライクな文章生成する方法を解説

2023年1月8日

ChatGPTには現在APIが提供されていませんが、同じGPT3.5モデルを使ったOpenAIの文章生成AIがAPIで利用できます。

そこで、Google Apps Script(GAS)でOpen AIの文章生成AIをAPIで利用する方法を解説します。

(2023年3月3日追記)ChatGPTのAPIがついに公開されたため、ChatGPTのAPIのリクエスト方法(解説記事)も追記しました。

ChatGPTで文章生成AIにブームに

2022年11月にOpenAIが発表したChatGPTは、文章生成AIとして大きな話題を集めました。

ChatGPTのサービス画面で、質問や問い合わせをすると、非常に自然な回答結果を得ることができます。

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

しかし、詳しい部分を確認していくと、誤った内容が含まれていたり、デタラメな回答の場合もあります。

ただ、うまく入力テキスト(プロンプト)を設定し、やりとりを繰り返すことで、調べたい内容を回答してくれます。

それゆえにGoogle検索が入らなくなるのではという意見も出ており、世界一のテック企業とも言えるGoogleも危機感を抱くほどです。

GASでChatGPTを活用したプログラム作成

ChatGPTという文章生成AIが登場したことで、ChatGPTを活用したサービスが模索されています。

ChatGPTを使ったAIによる記事作成などもサービスが発表されており、SEO対策の記事をChatGPTが生成してくれるかもしれません。

Google Apps Script(GAS)であれば、スプレッドシートを使ったアプリやWebアプリを簡単に作成できます。

そのため、ChatGPTの文章生成技術を活用したMVP(必要最小のサービス)を開発したい場合にGASがオススメです。

ChatGPTにはAPIがない

残念ながらChatGPTにはプログラミングで利用するためのAPIサービスは提供されていません。

そのため、ChatGPTをAPIで利用するというのは現時点では不可能です。

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

OpenAIのAPI利用できるサービスの1つが文章生成AIです。

ChatGPTを開発・提供するOpenAIは、文章生成するAIをAPIサービスとして提供

この文章生成AIは、ChatGPTと○○と呼ばれるGPT3.5系の自然言語処理のモデルを利用しています。

そのため、OpenAIのAPIにリクエストすれば、ChatGPTライクな文章生成AIがプログラミングで利用可能です。

Open AIの利用登録とAPIキー発行手順

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

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

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

OpenAIのAPIキーはこのあとGoogle Apps Script(GAS)のコードを準備する際にスクリプトプロパティに設定します。

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

GASでOpenAIにAPIリクエストするサンプルコード

実際にGoogle Apps Script(GAS)を使ってOpenAIにAPIリクエストして、文章生成AIを利用してみます。

GASでOpenAIの文章生成AIにテキスト(プロンプト)をAPI経由で送り、応答結果をログ出力するサンプルコードです。

Google Apps Script(GAS)でOpenAIの文章生成AI(Completion)のAPIリクエストしてChatGPTライクな応答結果をログ出力するサンプルコード
function requestCompletion() {
  //スクリプトプロパティに設定したOpenAIのAPIキーを取得
  const apiKey = ScriptProperties.getProperty('APIKEY');
  //文章生成AIのAPIのエンドポイントを設定
  const apiUrl = 'https://api.openai.com/v1/completions';
  //文章生成AIに投げるテキスト(プロンプト)を定義
  const prompt = 'Google Apps Scriptの活用事例を教えてください';
  //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' : 1024,
      'temperature' : 0.9,
      'prompt': prompt})
  };
  //OpenAIの文章生成(Completion)にAPIリクエストを送り、結果を変数に格納
  const response = JSON.parse(UrlFetchApp.fetch(apiUrl, options).getContentText());
  //OpenAIのAPIレスポンスをログ出力
  console.log(response);
}

まず、OpenAIのAPIキーをスクリプトプロパティから読み込みます。

GASスクリプトエディタの左メニューにある歯車アイコン「プロジェクトの設定」から、スクリプトプロパティにAPIキーをセットします。

Google Apps Script(GAS)のスクリプトプロパティにOpenAIのAPIキーをセットし、APIキーをコードに直書きしない
  • プロパティ:APIKEY
  • 値:OpenAIのAPIキー

続いてOpenAIの文章生成AI(Completion)のエンドポイントURLと、入力プロンプトを定義します。

OpenAIのAPIにHTTPのPOSTリクエストする際に必要な要素はheaderとoptionsの変数に記載しています。

最後にUrlfetchApp.fetchメソッドでAPIリクエストし、実行結果がJSON形式で返却されるので、オブジェクトに変換した内容をログ出力します。

ChatGPTライクなOpenAIの文章生成(Completion)APIにGoogle Apps Script(GAS)でリクエストして、応答結果をログ出力

GASサンプルコードを実行すると、実行ログに出力結果が表示され、赤枠部分が応答結果です。

OpenAIからのレスポンスには、応答結果以外にもプロンプト(入力文)と生成文のトークン量が表示されています。

ログ出力する際のconsole.logの引数を下記に変更すれば、応答文のみ出力可能です。

response.choices[0].text
Google Apps Script(GAS)でChatGPTライクな文章生成をOpenAIのAPIで実行した際に、応答結果のみをログ出力

OpenAI(Completion)のAPIパラメータ解説

先程のGoogle Apps Script(GAS)のサンプルコードで、OpenAIのAPIにHTTP POSTで送ったパラメータについて解説します。

  //文章生成で利用するモデルやトークン上限、プロンプトをオプションに設定
  let options = {
    'muteHttpExceptions' : true,
    'headers': headers, 
    'method': 'POST',
    'payload': JSON.stringify({
      'model': 'text-davinci-003',
      'max_tokens' : 1024,
      'temperature' : 0.9,
      'prompt': prompt})
  };

payloadの中身がOpenAIの文章生成AIで設定するパラメータで、入力プロンプトのprompt以外を説明します。

modelは使用する自然言語処理のGPTモデルを指定するパラメータで、今回は最も高性能な「text-davinci-003」を設定しています。

ただ、「text-davinci-003」は最も費用と処理時間がかかるGPTモデルなので、OpenAIの費用を抑えて応答時間を早めたい場合は「text-ada-001」を設定しましょう。

次にmax_tokensパラメータで応答結果もトークンの最大値を設定しています。

最新モデルの場合は上限が2048までですが、それよりも数値を小さくすることで、応答文を少なくし、使用トークンも節約可能です。

tempertureパラメータは0-1の値で、1に近づくほどより創造的な回答結果が返ってくる(その分誤りを含む可能性も高まる)そうです。

今回は興味深い回答を返してもらえるよう0.9を設定していますが、明確な答えがある質問を投げかける場合は0にします。

他にもありますが、チューニング頻度の高いパラメータがmodel,max_tokens,tempertureの3つです。

自然言語処理のモデルや応答文量、応答内容を変更したい場合は上記3つを調整しましょう。

(追記)ChatGPTのAPIが3/2に公開

ChatGPTのAPIは未公開とお伝えしていましたが、日本時間の2023年3月2日についに公開されました。

それを受けて、ChatGPTのAPIにGoogle Apps Script(GAS)でリクエストする方法をまとめています。

基本的にはOpenAIのAPIを利用するGASサンプルコードと流用する形で、リクエスト可能です。

ChatGPTのAPIのエンドポイントや過去のやり取りを含めた形にメッセージ設定を行います。

まとめ・終わりに

今回、Google Apps Script(GAS)による、OpenAIのAPIをリクエストしてChatGPTライクな文章生成AIを利用する方法を紹介しました。

現時点ではChatGPTにはAPIがありませんが、開発元のOpenAIが提供するChatGPTと同じGPT3.5系のモデルの文章生成AIでAPI利用できます。

GASを使ってOpenAIのAPIをリクエストすることで、ChatGPTライクな文章生成が実現可能です。

色々なテキスト(プロンプト)をOpenAIの文章生成AIにAPIで送ると、ChatGPTと同じような応答結果が得られました。

紹介したGASのサンプルコードを使えば、APIキーを用意するだけでChatGPTと同様の文章生成がGASで利用できます。

チャットボットや応答サービスなどがGASで簡単に作成できるので、ぜひ試してみてください。