ChatGPTのAPI:ブログがすぐに書けるドキュメントを作った
お久しぶりです。
D1Cで習ったことを基に、小さくアレコレ作って遊んでいるS.Yです。
先日、ChatGPTのAPIをGoogleドキュメント上から呼び出し、ブログを書いたり画像を生成するシートを作ってみたので、覚え書きとしてその顛末を書いてみます。
他にもやったことがあるのですが、どうやったのかすでに忘れており、漠然と使っています。
記事ではなくリンク集やメモとしてで良いので、書いておくほうが良いと思いました。
参考記事
こちらの記事を参考に、ChatGPTに聞きながらコードを作り、設定も行った。コンソールにログを表示させながら、デバッグがなんとかできるようになった。
コード(省略版)
// DROP DOWN MENU
function onOpen() {
DocumentApp.getUi().createMenu("ChatGPT")
.addItem("Generate Ideas", "generateIdeas")
.addItem("Write blog", "blogwriting")
.addItem("構成を基に記事を書く", "textComposite")
.addItem("ランダムに記事を書く", "randomComposite")
.addItem("Generate Image", "generateImage")
.addToUi();
}
// ****END MENU****
// FIXED VARIABLES. Your API and Model Type
var apiKey = "XXXXXXXXXXXXXXX";
var model = "gpt-3.5-turbo-0125"
// ****END VARIABLES****
// GENERATE PROMPT
function generateIdeas() {
var doc = DocumentApp.getActiveDocument()
var selectedText = doc.getSelection().getRangeElements()[0].getElement().asText().getText()
var body = doc.getBody()
var prompt = "generate blog Ideas for " + selectedText;
temperature= 0
maxTokens = 2000
const requestBody = {
"model": model,
"messages": [{"role": "user", "content": prompt}],
"temperature": temperature,
"max_tokens": maxTokens,
};
const requestOptions = {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer "+apiKey
},
"payload": JSON.stringify(requestBody)
}
try {
const response = UrlFetchApp.fetch("https://api.openai.com/v1/chat/completions", requestOptions);
var responseText = response.getContentText();
var json = JSON.parse(responseText);
Logger.log(json['choices'][0]['message']['content'])
var para = body.appendParagraph(json['choices'][0]['message']['content']);
} catch (error) {
Logger.log("Error: " + error.toString());
}
}
// ****END PROMPT****
基本はこのパターンのコードの繰り返しです。
長すぎるので割愛しましたが、フルのイメージは参考記事の筆者様が公開してくださっているものを見てみてください。
ドキュメントに単語を打ち込み選択した後、プルダウンメニューを選択することで、見出しを考えてくれたり、記事を作成してくれる。
つまづいたところ
●API利用による従量課金の上限額を設定していなかったために、エラーが出た。クレカを登録し、適宜上限額を設定することで解決。
●GPT−4や3.5のモデルでは、一回のやり取りでマックスのトークン数が数千〜数万トークンまで行けるようなので、長文を書かせたくてトークン数を10000にしてみたら、動かなくなった。GASだとダメとかあるんだろうか。
●const response = UrlFetchApp.fetch("https://api.openai.com/v1/chat/completions", requestOptions);
の部分で、カッコ内のURLを使用するモデルに対応したURLにしなくてはいけない。
→これに気づくまで半日費やした。もしかしたら、ルーラちゃんボットがエラーになってしまったのも、時間が経ったためにモデルが古くなって、ここが合わなくなってしまったのでは。
アプリのアップデートって、こういうことのフォローも含むのかもと想像しました。
余裕あるときに見直す。
そして、個人で初心者が開発代行を請け負うのは簡単なものであってもリスクが高いとあらためて感じた。
外的要素に起因する不具合をリアルタイムで追い、つきとめてフォローしながら、複数のアプリやサービス網羅するのは、少なくとも今の私には現実的ではない。
さしあたり教育とイベント企画、調べ物代行、レポート作成のみにとどめようと心に決めた。
今年度中に学費回収するぞ。
●なんか記事が思ったように書けない。APIを使うと、ChatGPTをアプリとして使った場合のように『NewChat』内で学習しないしやり取りすることで精度を上げられないため、かえって使いにくい気がする。
●そして『GenerateImage』のこの画像、なんでしょうね。。。
生成された記事と見出し
私がこだわり強すぎるのかもしれないのですが、自動生成した記事にいつも納得いかない。直すのも時間がかかる。ランダムに同じ内容を繰り返していて伏線回収も起承転結もないし、内容も薄い。
きれいな文章かもしれないが、頭に入ってこない。なんていうか、刺さらない。
構成を考えてからパートごとに書くと、どうにか起承転結ができる。
そう考えると、ドキュメント上にAPIでChatGPTを呼び出して、直でブログを書くというのは、あまり実用的じゃないのかもしれない。
当然、AIをディスりたいわけではない。このコードを何かほかのことに使えないか、また考えてみる。
API利用
しかし、APIを使うと本当に安い。
D1Cでボットづくりにハマり、飯塚先生(ほげ隊長)のAPIを料金におびえながら使わせていただいていた私ですが、自分でAPIを設定してみたら、本当に安い。
友人誘って割り勘したい。
仕事に追われて久しぶりにChatGPTを見たら、APIまで教育できるようになっていてびっくりした。
教育したAPIを使えば、もう少し良いライティングができるシートが作れるだろうか。
すでにどなたかが作っているGPTsを使うほうが良いような気もするし、課金が必要なら自分用に似たGPTsを作っても良いと思う。
予算的に問題ないので、月10ドルの範囲で使い倒してみたい。
※追伸
かいぴーさん、Rieさん、その節は講座の練習相手をしていただきありがとうございました。
近く、活動報告を書きます。
マックさんもご連絡ありがとうございました。
直近のセミナー情報を載せてみます。
よろしければサポートお願いします! 頂いたサポートは書籍代にします。 より良い情報をお届けするため、学びます。