🔥

ChatGPTのAPIをGASから呼び出す

2023/08/20に公開

やりたいこと

  • GASからChatGPTのAPIを呼び出したい。
  • 疎通確認がメインなので、最低限動作すればOK。

準備

  • Chat GPTの有料版ユーザーになり、APIのアクセストークンを入手。(トークンの取り扱いには注意すること)
  • GASのプロジェクトを作成。

実装の手順

GASに「index.html」と「code.gs」の二つのソースファイルを作成。

index.html
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <textarea id="inputText" rows="4" cols="50"></textarea><br>
    <button id="submitBtn">送信</button>
    <p id="responseArea"></p>

    <script>
      document.getElementById("submitBtn").addEventListener("click", function(){
        var userInput = document.getElementById("inputText").value;
        google.script.run.withSuccessHandler(updateResponse).getGpt3Response(userInput);
      });

      function updateResponse(response) {
        document.getElementById("responseArea").innerHTML = response;
      }
    </script>
  </body>
</html>
Code.gs
function doGet() {
  return HtmlService.createHtmlOutputFromFile('index.html');
}

function getGpt3Response(userInput) {
  var apiKey = ""; // ここにアクセストークンを入れる。
  var apiUrl = "https://api.openai.com/v1/chat/completions";
  const messages = [{'role': 'user', 'content': userInput}];
  const headers = {
    'Authorization':'Bearer '+ apiKey, // 認証ヘッダー
    'Content-type': 'application/json',
    'X-Slack-No-Retry': 1 // リトライ制御用のヘッダー
  };
  const options = {
    'muteHttpExceptions' : true,
    'headers': headers, 
    'method': 'POST',
    'payload': JSON.stringify({
      'model': 'gpt-3.5-turbo',
      'max_tokens' : 1024,
      'temperature' : 0.9,
      'messages': messages})
  };
  var httpresponse = UrlFetchApp.fetch(apiUrl, options);// APIリクエストの実行
  var statusCode = httpresponse.getResponseCode();// ステータスコードの取得
  var contentText = httpresponse.getContentText();// 応答テキストの取得
  var response = JSON.parse(contentText);// 応答のJSON解析
  if(statusCode != 200){
    var text = "ステータスコード:" + statusCode + " エラーメッセージ:" + contentText;// エラー時の処理
  } else {
    var text = response.choices[0].message.content;// 成功時の処理
  }
  return text;
}

補足

modelについて

https://platform.openai.com/docs/models

GPT3.5やGPT4.0以外にもさまざまなmodelがあるため、使用時は確認したほうがよさそうです。すでに廃止されたmodelや、支払い状況によってはまだ使用できないmodelなどもあるらしい。

temperatureについて

https://platform.openai.com/docs/guides/gpt/how-should-i-set-the-temperature-parameter

値が低いと出力の一貫性が高まり、値を高くすると、多様で創造的な結果が生成されるとのことです。

roleについて

https://platform.openai.com/docs/guides/gpt/chat-completions-api

この部分を変更することで、ChatGPTに対して役割を付与できるようです。

最終的な挙動

こちらの質問に対して、返事をしてくれます。

質問を入れて、「送信」を押すと……。

回答が表示されます。成功!

GitHubで編集を提案

Discussion