LoginSignup
0
1

ChatGPTをGASで使う

Posted at

APIの練習

ChatGPTのAPI練習としてGASを使ってみました。
練習用なのでコードは雑です。。

処理内容はボタンを押したら原文をリライトする

手順

  1. OpenAIのサイトに行き、APIキーを発行する
  2. スプシを開いて拡張機能 > Apps Script を開きます。
  3. プロジェクト設定 > スクリプトプロパティで API_KEY を設定して先程発行したトークンを貼ります。
  4. 設定ができたら、ソースコードを作成したら関数名をコピーしておいてボタンを押したら処理が実行できるようにしたら完了
ソースコード
function ChatGptOutput() {
  //シートの取得
  let sheet = SpreadsheetApp.getActiveSheet();

  //取得してくるデータ
  let original_for_output_text = sheet.getRange("A:A").getValues();
  let output_length = original_for_output_text.filter(String).length;
  let datas = sheet.getRange(1,1,output_length).getDisplayValues();
  let exeptaionText = "下記をそれぞれリライトしてください";
  let mtext = "";
  //出力処理 説明文なので1からスタート
  for(var data = 1;data < datas.length;data++)
  {
    var spritData = datas[data].toString().split("\n");
    for(var i = 1;i < spritData.length;i++)
    {
      mtext += spritData[i]+"\n";
    }
  }
  let message = [{'role': 'user', 'content': exeptaionText+"\n"+mtext}]
  Logger.log(message);
  const response = ChatGptMessage(message);
  Logger.log(response);

  //取得したデータを行ごとに分ける
  let spritTextArray = response.split("\n");
  Logger.log(spritTextArray);

  let sum = 0;
  for(var data = 0;data < datas.length-1;data++)
  {
    for(var i = 0;i < 3;i++)
    {
      if (spritTextArray[sum] !== undefined && spritTextArray[sum] !== null) {
        var text = spritTextArray[sum].slice(1);
        let setData = sheet.getRange(data+2,i+2);
        setData.setValue(text);
        sum++;
      }
    }
  }
}

function ChatGptMessage(message)
{
    // OpenAIのエンドポイント
    const apiUrl = 'https://api.openai.com/v1/chat/completions';

    // パラメータ設定
    const requestBody = {
    'model': 'gpt-3.5-turbo',
    'temperature': 0.7,
    'max_tokens': 2048,
    'messages': message
  }

    // 送信内容を設定
    const request = {
      method: "POST",
      muteHttpExceptions : true,
      headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer ' + PropertiesService.getScriptProperties().getProperty('API_KEY'),
      },
      payload: JSON.stringify(requestBody),
    }

    let response = JSON.parse(UrlFetchApp.fetch(apiUrl, request).getContentText());
    try {
        // ChatGPTのAPIレスポンスをセルに記載
      if (response.choices) {
        return response.choices[0].message.content;
      } else {
        // レスポンスが正常に返ってこなかった場合の処理
        return response;
      }
      } catch(e) {
        // 例外エラー処理
        return e;
      }
}

スクリーンショット 2023-12-10 233241.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1