見出し画像

GooleSpreadSheetでGAS(GoogleAppScript)とopenAIのAPIで色々質問してみた


GPT-4のAPIをGoogle Apps Script(GAS)で実行する方法! | AutoWorker〜Google Apps Script(GAS)とSikuliで始める業務改善入門 (auto-worker.com)



最新の料金一覧

めんどいのでchatGPTに要約してもらおう

↓レガシー(古い)モデルの価格の比較はこちら。今回は GPT4の8KとGPT3.5Trubo4Kを使う


ざっくりコスト感。
昔のDavinchiちゃんを100とする。
①Ada  1.5
②Babagge 2
③Curie 10
④Davinci 100
GPT3.5Turbo-4k 1.5
⑥GPT3.5Turbo-16k 3
GPT4-8k 50
⑧GPT4-32k 100

昔は①~④までだったが、openAI社の企業努力の結果、低コストかつ高性能なAPI連携ができるようになった!
16kとか4kは何か? というと、質問できる長さの上限ね。
最高スペックのGPT4-32Kは32000のトークンが1度に送ることができて、日本語だとだいたい7割、2万5000文字位を一度に送れる

本一冊分を処理して、それを翻訳して! って事が⑧の最新版なら可能だ。
※もちろん送ったトークンが多いほど金は多く取られる

試してないけど、コードインタプリタや外部URLでPDF読ませたときって料金発生するのかな?
chatGPTにはウェブやアップロードファイルのURLの質問分だけトークン消費して、Pythonなどで読み込んで文字処理する部分はトークン対象外ならいいな!
いま時点のAPIだとコードインタプリタやプラグイン使えないけどね、いづれ来るでしょ。

const SECRET_KEY = "sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
//const SECRET_KEY = PropertiesService.getScriptProperties().getProperty('openAI_APIKEY');
const MODEL_NAME_LIST = ["text-ada-001","text-babbage-001","text-curie-001","text-davinci-003","gpt-3.5-turbo-0613","gpt-4-0613" ];
//gpt-3.5-turbo-16k-0613,gpt-4-32k-0613は高コストで長文を使わないので適用外
const MODEL_TEMP = 0.3;
var model_id = 0;

function GPT(arg_prompt,arg_model_id = 0, arg_option="") {
  arg_model_id = Number( arg_model_id );
  if( arg_model_id < 0 ){ arg_model_id=0; }
  else if( arg_model_id >= MODEL_NAME_LIST.length ){ arg_model_id = MODEL_NAME_LIST.length-1; }
  
  if( arg_model_id < 4 ){ 
    return GPT3(arg_prompt,arg_model_id, arg_option); //0~3: "text-ada-001","text-babbage-001","text-curie-001","text-davinci-003"
  }
  return GPT4(arg_prompt,arg_model_id, arg_option) //4~5: "gpt-3.5-turbo-0613","gpt-4-0613"
}

function GPT4(arg_prompt,arg_model_id, arg_option="") {
  const GPT4URL = 'https://api.openai.com/v1/completions';
  //systemはロールモデル(回答のキャラ設定)、userは質問を設定する
  const messages = [{"role": "system", "content": arg_option},{'role': 'user', 'content': arg_prompt}];
  
  const headers = { //OpenAIのAPIリクエストに必要なヘッダー情報を設定
    'Authorization':'Bearer '+ SECRET_KEY,
    'Content-type': 'application/json',
    'X-Slack-No-Retry': 1
  };
  
  const options = { //GPT-4のモデルやトークン上限、プロンプトをオプションに設定
    'muteHttpExceptions' : true,
    'headers': headers, 
    'method': 'POST',
    'payload': JSON.stringify({
      'model': MODEL_NAME_LIST[arg_model_id], //4:"gpt-3.5-turbo-0613",5:"gpt-4-0613"
      'max_tokens' : 2048,
      'temperature' : 0.9,
      'messages': arg_prompt})
  };

  //OpenAIのGPT-4にAPIリクエストを送り、結果を変数に格納
  const response = JSON.parse(UrlFetchApp.fetch(GPT4URL, options).getContentText());
  return response["choices"][0]["message"]["content"];
}

function GPT3(arg_prompt,arg_model_id = 0, arg_option="") {
  const GPT3URL = 'https://api.openai.com/chat/completions';
  const options = {
    contentType: "application/json",
    headers: { Authorization: "Bearer " + SECRET_KEY },
    payload: JSON.stringify({
        'model': MODEL_NAME_LIST[arg_model_id],
        'max_tokens' : 1024,
        'temperature' : 0.9,
        'prompt': arg_prompt})
  };

  const res = JSON.parse(UrlFetchApp.fetch(GPT3URL, options).getContentText());
  return res.choices[0].text.trim();
}

よし、chatGPT3の既存4モデルに、chatGPT4の呼び出しを追加してみた。
0~3は既存のAda、Babagge、Curie、Davinci。
4と5がそれぞれ3.5Turboと4。トークン多い版は倍で高いので入れないことにした。


何かエラーになっていたので、ちょっと調べたらAPIに「chatGPT4」が入っていない様子。

ん、俺chatGPT Plus初日組なのだが?
ウェイトリストも申請したのに、ChatにGPT4がない……ということは、APIキー発行しても呼び出せないのかな?

ちょっとわからんけど、また後日チャレンジしてみる。
レガシー4姉妹に「眠いです」って質問した結果↓

夜はコミケのようになります
やることはできるから
詰まっている
雨の日
さてさて
コミケの最高

こういう、素朴な回答好き( ゚Д゚)b コミケ最高っすわ


この記事が気に入ったらサポートをしてみませんか?