APIの練習
ChatGPTのAPI練習としてGASを使ってみました。
練習用なのでコードは雑です。。
処理内容はボタンを押したら原文をリライトする
手順
- OpenAIのサイトに行き、APIキーを発行する
- スプシを開いて拡張機能 > Apps Script を開きます。
- プロジェクト設定 > スクリプトプロパティで API_KEY を設定して先程発行したトークンを貼ります。
- 設定ができたら、ソースコードを作成したら関数名をコピーしておいてボタンを押したら処理が実行できるようにしたら完了
ソースコード
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;
}
}