ChatGPTでほぼ無限に文章を書かせる方法 [GAS]
ChatGPTに長い文章を書かせようとしてもToken数の限界があり、普通では長い文章を書かせることはできない。
ただ、ChatGPTのChat機能をうまく使うことで、ほぼ無限に長い文章をかかせることができる
ここではGoogle DocとGASを利用している
目次
1.OpenAPIのAPIトークンを入手
でアカウントを作成し、ログイン。右上のメニューからView API Keyを取得し控える
2.Google Doc+GASにコード実装
Google Docを開き、新規作成して新しいDocを作成する
メニューの拡張機能→App Scriptを開く
下記コードを貼り付けて、保存する
function onOpen() {
DocumentApp.getUi().createMenu("ChatGPT")
.addItem("ChatGPT", "myFunction")
.addToUi();
}
function myFunction() {
var doc = DocumentApp.getActiveDocument()
var selectedText = doc.getSelection().getRangeElements()[0].getElement().asText().getText()
var body = doc.getBody()
var apiKey = "ここにAPIキーを貼り付ける";
var message_array = [{'role':'user', 'content':selectedText}]
//chat
var model = "gpt-3.5-turbo"
temperature= 0.9
maxTokens = 300
top_p = 1
frequency_penalty = 0
presence_penalty = 0.6
var maxcount = 8
var prompt_continue = '続けて'
for(let i=0;i<maxcount;i++){
// Set up the request body with the given parameters
const requestBody = {
"model": model,
"messages": message_array,
"temperature": temperature,
"max_tokens": maxTokens,
"top_p": top_p,
"frequency_penalty": frequency_penalty,
"presence_penalty": presence_penalty,
};
const requestOptions = {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer "+apiKey
},
"payload": JSON.stringify(requestBody)
}
const response = UrlFetchApp.fetch("https://api.openai.com/v1/chat/completions", requestOptions);
// Parse the response and get the generated text
var responseText = response.getContentText();
var json = JSON.parse(responseText);
Logger.log(json)
var res = json['choices'][0]['message']['content']
var temp_arr = {'role':'assistant', 'content':res}
message_array.push(temp_arr)
var temp_arr = {'role':'user', 'content':prompt_continue}
message_array.push(temp_arr)
output = output + res
Utilities.sleep(2000)
}
para = body.appendParagraph(output)
}
Google Docに戻ると、メニューのCHATGPTというメニューが追加されているはず。初回実行時は警告画面がでる。コードの実行を許可する
chatGPTに書いてもらいたいことや質問内容をGoogle Docに書き、その文章をすべて選択状態にする
質問内容が選択されている状態で、先程メニューにできた「chatGPT」ボタンを押すと処理が始まるのでしばらく待つ
処理が終了すると文章ができあがる
コードで実行している内容まとめ
なぜ長い文章が作れるのか?だが、それはChatGPTから返ってきた答えに対してひたすら「続けて」というリクエストを投げているため。ChatGPTのチャット機能では「続けて」とリクエストすると続きを書いてくれる。
コードでは8回「続けて」とforで繰り返しているので、この8を変更すれば無限に文字が出てくる。ただしあまりにも早くレスポンスを投げつけてしまうと500エラーがでるので、Utilities.sleepで2秒待たせている
GASで登録したコードでやっていることは以下の通り
doc.getSelection().getRangeElements()[0].getElement().asText().getText()で選択された文章を取得
ChatGPTのモデルを「gpt-3.5-turbo」に指定してチャットができるように設定
temperatureなどの各種パラメータを設定
https://api.openai.com/v1/chat/completionsに内容を送信。チャットAPIはv1/chat/completionsであることに着目
チャット機能で続きを書いてほしい場合は、リクエスト内の”messages”にこれまでのやり取りも全部含める必要があるので、pushで配列に追加し、ChatGPTからもらった返答とこちらの依頼内容も含めている
変数outputにこれまでのChatGPTからの返答をまとめ、最後にGoogleDocに出力している
参考:https://ai-create.net/magazine/2023/03/02/post-10647/