先日、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』のこの画像、なんでしょうね。。。
生成された記事と見出し
日本に生息する外来種のヤモリについて
1. 日本に生息する外来種のヤモリの影響とは?
2. 外来種のヤモリが日本の生態系に与える影響とは?
3. 日本に生息する外来種のヤモリの特徴と生態について
4. 外来種のヤモリが日本にどのように広がったのか?
5. 日本の生態系における外来種のヤモリの問題とは?
6. 外来種のヤモリが日本の在来種とどのように競合しているのか?
7. 外来種のヤモリの駆除や管理方法について考える
8. 日本に生息する外来種のヤモリの保護と管理について
9. 外来種のヤモリが日本の生態系に与えるリスクとは?
10. 外来種のヤモリの生態調査や研究の重要性について
日本に生息する外来種のヤモリについて
日本には多くの生物が生息しており、その中には外来種も存在します。外来種とは、本来その地域に生息していない種のことを指します。日本に生息する外来種の中でも、ヤモリは比較的よく知られている種の一つです。ヤモリは爬虫類の一種であり、日本には本来生息していないため、外来種として扱われています。ヤモリは主に熱帯地域に生息しており、日本の気候には適していないため、外来種として持ち込まれた可能性が高いとされています。
日本に生息するヤモリは、主にペットとして飼われていた個体が逃げ出して野生化したものと考えられています。そのため、野生のヤモリは比較的人間に慣れており、人家周辺や公園などで見かけることがあります。ヤモリは小型の爬虫類であり、体長は10〜20センチ程度と比較的小さいです。体は細長く、尾が長いのが特徴です。
また、ヤモリは四肢が発達しており、木や壁などにしっかりと登ることができます。そのため、建物の壁面や樹木などにヤモリが登っている姿をよく見かけることがあります。ヤモリは主に昆虫を捕食する肉食動物であり、主に昆虫や小さな節足動物を食べて生活しています。また、ヤモリは夜行性の生物であり、夜間に活動することが多いです。そのため、昼間には木の隙間や建物の隙間などで休んでいることが多いです。
日本に生息する外来種のヤモリは、繁殖力が高いため、急速に増殖することがあります。そのため、生態系に影響を及ぼす可能性があり、生態系のバランスを崩す恐れがあります。また、ヤモリは他の生物と競合することがあり、在来種の生態系に影響を与える可能性もあります。日本では外来種のヤモリの駆除や管理が行われており、特に生態系に悪影響を及ぼす可能性がある地域では積極的な駆除が行われています。
また、ヤモリを飼育する際には、逃げ出さないように注意することが重要です。ヤモリは外来種であるため、野生化した個体が繁殖することで生態系に悪影響を及ぼす可能性があるため、飼育には慎重さが求められます。日本に生息する外来種のヤモリは、熱帯地域に生息する爬虫類であり、日本の気候には適していないため外来種として扱われています。ヤモリは小型の爬虫類であり、昆虫を捕食する肉食動物であることが特徴です。
日本では外来種のヤモリの駆除や管理が行われており、生態系に悪影響を及ぼす可能性がある地域では積極的な駆除が行われています。ヤモリを飼育する際には、逃げ出さないように注意することが重要です。外来種のヤモリは生態系に影響を及ぼす可能性があるため、適切な管理が求められています。
私がこだわり強すぎるのかもしれないのですが、自動生成した記事にいつも納得いかない。直すのも時間がかかる。ランダムに同じ内容を繰り返していて伏線回収も起承転結もないし、内容も薄い。
きれいな文章かもしれないが、頭に入ってこない。なんていうか、刺さらない。
構成を考えてからパートごとに書くと、どうにか起承転結ができる。
そう考えると、ドキュメント上にAPIでChatGPTを呼び出して、直でブログを書くというのは、あまり実用的じゃないのかもしれない。
当然、AIをディスりたいわけではない。このコードを何かほかのことに使えないか、また考えてみる。
API利用は安上がり
しかし、APIを使うと本当に安い。
D1Cでボットづくりにハマり、飯塚先生(ほげ隊長)のAPIを料金におびえながら使わせていただいていた私ですが、自分でAPIを設定してみたら、本当に安い。
友人誘って割り勘したい。
仕事に追われて久しぶりにChatGPTを見たら、APIまで教育できるようになっていてびっくりした。
教育したAPIを使えば、もう少し良いライティングができるシートが作れるだろうか。
すでにどなたかが作っているGPTsを使うほうが良いような気もするし、課金が必要なら自分用に似たGPTsを作っても良いと思う。
予算的に問題ないので、月10ドルの範囲で使い倒してみたい。
※追伸
かいぴーさん、Rieさん、その節は講座の練習相手をしていただきありがとうございました。
近く、活動報告を書きます。
マックさんもご連絡ありがとうございました、すごくうれしかったです。