🔥
ChatGPTのAPIをGASから呼び出す
やりたいこと
- 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について
GPT3.5やGPT4.0以外にもさまざまなmodelがあるため、使用時は確認したほうがよさそうです。すでに廃止されたmodelや、支払い状況によってはまだ使用できないmodelなどもあるらしい。
temperatureについて
値が低いと出力の一貫性が高まり、値を高くすると、多様で創造的な結果が生成されるとのことです。
roleについて
この部分を変更することで、ChatGPTに対して役割を付与できるようです。
最終的な挙動
こちらの質問に対して、返事をしてくれます。
質問を入れて、「送信」を押すと……。
回答が表示されます。成功!
Discussion