【悪用厳禁】ChatGPTとGoogleDocsを連携して無限に記事を生成する方法(2.4万字)※GAS編集解説動画付き 3/7更新
0.挨拶とOpenAIの概要
どうもチャエンです!
TwitterではWeb3や海外テック系の情報を発信してます。
URL:https://twitter.com/masahirochaen
今回は今話題のChatGPTのOpenAIを活用して無限に記事を生成する裏技を見つけたので是非シェアしたいと思います。
因みに、Twitterで先行して解説noteを配布したところ激バズりしましたw
332万インプレッション!!
一言でいうと
AIのライティング革命です!
何ができるかというと
1つの単語から
ともうライター泣かせの大活躍です。
なんと画像まで作れるんです、、、
因みに、サンプルはこちら。
数分の設定と30秒の読み込みで1000文字以上のブログが完成。
それでは早速始めます!
って方はこちらの記事を見てから戻ってきてください💪
とりあえず、公開と同時に超人気になったサービスなのです!!
1. OpenAIでAPIを取得
まず、OpenAIからAPIキーを取得し、コードに記載する必要があります。
APIキーはこちらで取得できます。
1.1 OpenAIのAPIキー
最初にアカウントを作成する必要がありますが、メールアドレスを登録すれば数分で完了します。
メールの場合は認証作業が必要です。
1.2 シークレットキー作成
続いては、以下の画面から"create new secret key"をクリックすると自動で生成されます。
先ほどのこちらのリンクから以下のページへ飛べます。
https://beta.openai.com/account/api-keys
シークレットキーをコピーして、別で保存しておきます。
一度OKで閉じると消えてしまうので、しっかりとメモにして残しておくことをおすすめします。
一応何度でも作成はできます。
1.3 料金体系
実は、OpenAIのAPIは無料ではありません。
なので、先ほどのシークレットキーは他人は教えないように!!!
言語モデルによって料金が異なります。
大体1記事書くのに分量にもよりますが、数円くらいです。
また、OpenAIの会員登録を行うと、その際に18ドル相当のクレジットが付与されます。(このクレジットは3ヶ月間有効)
18ドルあれば十分楽しめます。
※詳細の料金体系はこちら↓
account→usageから残量は簡単に確認できます。
https://beta.openai.com/account/usage
2. Google DocsのGAS設定
では、次はGoogle Docsををいじっていきます。
いや、ちょ待てよ(キムタク風)
GASって何だよ。いきなり置いてかないで。
となった人はこちらを読んでくださいね。
とりあえず、コードを書いてGoogleのサービスを拡張できる便利なアイテムです。
では、Google Docsに「ChatGPT」という名前のカスタマイズされたメニューオプションを作成していきます。
2.1 Apps Script を展開
新規または既存のGoogle Docsドキュメントを開いて、”拡張機能" メニューをクリックし、"Apps Script" を選択します。
おそらく、まっさらなページが出てくるかと思います。
次に以下のコードを真っさらなページにコピーします。
(これを無料なんて太っ腹!!)
🔑通常版スクリプトテンプレート
// DROP DOWN MENU
function onOpen() {
DocumentApp.getUi().createMenu("ChatGPT")
.addItem("Generate Ideas", "generateIdeas")
.addItem("Write blog", "blogwriting")
.addItem("Generate Image", "generateImage")
.addToUi();
}
// ****END MENU****
// FIXED VARIABLES. Your API and Model Type
var apiKey = "xxxxxxxxxxxxx";
var model = "text-davinci-003"
// ****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 = 2060
const requestBody = {
"model": model,
"prompt": prompt,
"temperature": temperature,
"max_tokens": maxTokens,
};
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/completions", requestOptions);
var responseText = response.getContentText();
var json = JSON.parse(responseText);
Logger.log(json['choices'][0]['text'])
para = body.appendParagraph(json['choices'][0]['text'])
}
// ****END PROMPT****
// GENERATE PROMPT
function blogwriting() {
var doc = DocumentApp.getActiveDocument()
var selectedText = doc.getSelection().getRangeElements()[0].getElement().asText().getText()
var body = doc.getBody()
var prompt = "write a detailed blog article for " + selectedText;
temperature= 0
maxTokens = 2060
const requestBody = {
"model": model,
"prompt": prompt,
"temperature": temperature,
"max_tokens": maxTokens,
};
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/completions", requestOptions);
var responseText = response.getContentText();
var json = JSON.parse(responseText);
Logger.log(json['choices'][0]['text'])
para = body.appendParagraph(json['choices'][0]['text'])
}
// ****END PROMPT****
// GENERATE IMAGE - SIZE CAN BE 256x256', '512x512', '1024x1024
function generateImage() {
var doc = DocumentApp.getActiveDocument()
var selectedText = doc.getSelection().getRangeElements()[0].getElement().asText().getText()
var body = doc.getBody()
temperature= 0
maxTokens = 2000
var prompt2 = "Generate images for " + selectedText;
const requestBody2 = {
"prompt": prompt2,
"n": 1,
"size": "512x512"
};
const requestOptions2 = {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer "+apiKey
},
"payload": JSON.stringify(requestBody2)
}
const response2 = UrlFetchApp.fetch("https://api.openai.com/v1/images/generations", requestOptions2);
var responseText = response2.getContentText();
var json = JSON.parse(responseText);
var url1=json['data'][0]['url']
body.appendImage(UrlFetchApp.fetch(url1).getBlob());
}
// ****END IMAGE****
2.1 シークレットキーを貼り付け
上記のコードをスクリプトエディタに貼り付け、「xxxxxxxxxxx」を自分のOpenAI APIキーに置き換えます。
13行目くらいの『var apiKey = "XXXXXX";』が対応箇所です。
先ほどコピーした、シークレットキーを"Apps Script" エディタにコードを貼り付けます。
3.3 認証作業
続いては、認証作業です。
これはちょっとめんどいです。汗
(GIFを作ったんですが埋め込めず、画像で勘弁してください。。。涙)
まずは保存ぽいアイコンを選択してスクリプトを保存します。
次に、"実行 "をクリックします。初回実行時には、認証が必要な場合があります。
詳細設定をクリックし、Googleアカウントにログインして認証してください。
①権限を確認
②詳細を押す
③安全では無いページへ勇気を出して行きます
※安全なので安心してください。
④許可しましょう
これでスクリプトが作動する筈です。
もう一度実行を押してみましょう。
そして、Google Docsのドキュメントに戻ると、ツールバーに「ChatGPT」という新しいメニューが表示されています。
3. 実践方法
これで準備は終了です。
いよいよ実践です!!
3.1 任意のキーワードを入力する
なんでも良いです。作りたいブログのテーマを書いて下さい。
3.2 対象のワードを選択
※意外と忘れる人います。ちゃんと選択してください。
3.3 ChatGPTメニューをクリック
そのキーワードを選択してChatGPTメニューをクリックして、オプションを1つ選択します。
"Generate Ideas "
"Write blogs"
"Generate Image "
のいずれかを選択します。
そうすると、あら不思議。
勝手に文章が生成されます!!!
Generate Ideas
Write blog
Generate Image
、、、、これは謎ですねw
画像の精度はまだまだ改良の余地があります。
と、こんな感じで最低限の無限ブログ生成方法を解説しました。
ここからはいよいよ応用編です。
冒頭でも申し上げましたが、
大半の解説記事はアドオンというChromeの拡張機能的なものを入れるだけですが、ここからは直接スクリプトを書いて修正する方法の解説です。
これだけOpenAIが普及した今、固定のテンプレでは正直差別化は難しいです。
頭ひとつ抜けるなら、スクリプトを弄る必要があります。
こんな感じで、
など、無限の応用ができます!!
全くコードの書けない非エンジニアの私でも直ぐに理解できたので、誰でもできるかと思います。
コードを編集して初めてAIの楽しさがわかるので、是非続きも読んでください😄
応用編を一瞬で作成できるコードも以下に添付しております。
加えて、生成したブログを一瞬で多言語翻訳できる方法も記載してます。
纏めると、
とコンテンツ盛り沢山です。
ブログの最安単価でも1記事4000円くらいなので、クラウドワークスで適当に案件を取れば一瞬でペイできますね💪
加えて、GASやOpenAIのAPIのスクリプトの理解や編集方法などの一生物のスキルも身につきます!
ここまで詰まった方は、前半の解説動画も有料部分に添付してるので見てください👍
では、いきましょう!!
有料に入る前にChatGPTのAPIが解禁されたので、その概要と新しいGASのテンプレートも無料公開します!!!!
ーーーーーーーーーーーーーーーーーーーーーーー
🔥ChatGPTのAPIが遂に解禁🔥
🔥1 概要
OpenAI社はChatGPTのAPIを提供する前にも、ChatGPTのベースになっている大規模言語処理用(Large Language Model)のAIモデルである、GPT-3のAPIを提供していました。(詳細のモデルは下記に説明あり)
ChatGPT APIと今まで提供されていたOpenAI社のGPT-3のAPIは大きく2つの点が異なります。
🔥2 ChatGPTのAPIの特徴
①圧倒的な高性能!!
②過去のやり取りを参照できる!
③値段が安くなった!(text-davinciの1/10)
従来のGPT-3のサービスでは、文章生成AI一番高性能なLanguage ModelのDavinciで1000トークンで$0.0200にだったのに対して、ChatGPT APIのgpt-3.5-turboでは$0.002と1/10の費用を実現しています。
④API入力データは学習利用されない利用規約に変更!
以前はデータが取られる!と懸念の声もありましたが、そちらも解決されました。
🔥3 ChatGPTのAPIのサンプルコード
そして皆さんが気になる、GASのコードのテンプレートも無料でお渡しします。
こちらは日本語情報は0で、英語情報もほぼなくて苦戦しました。涙
上記の旧型と同じく
の部分にOpenAIのコードを貼り付けてください。
あとは基本同じです。
ただ、OpenAIのGASは以前のGPT-3とかなり異なるので、GASの修正も異なります。そちらが気になる方は有料部分で解説しているので、そちらを確認ください。
🔥4 モデル説明
参考までに過去もモデルの説明もします。
下記に料金付きの表も添付しております。
そして、いよいよお待ちかねのスクリプトの公開です。
🔥ChatGPT通常版スクリプトテンプレート
// Constants
const API_KEY = "OpenAIのAPIを貼る";
const MODEL_TYPE = "gpt-3.5-turbo"; //chatGPT model
// Creates a custom menu in Google Docs
function onOpen() {
DocumentApp.getUi().createMenu("ChatGPT")
.addItem("Generate Prompt", "generatePrompt")
.addItem("Generate Linkedin Post", "generateIdeas")
.addToUi();
}
// Generates prompt based on the selected text and adds it to the document
function generateIdeas() {
const doc = DocumentApp.getActiveDocument();
const selectedText = doc.getSelection().getRangeElements()[0].getElement().asText().getText();
const body = doc.getBody();
const prompt = "Help me write 5 Linkedin post on " + selectedText;
const temperature = 0;
const maxTokens = 2060;
const requestBody = {
model: MODEL_TYPE,
messages: [{role: "user", content: prompt}],
temperature,
max_tokens: maxTokens,
};
const requestOptions = {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + API_KEY,
},
payload: JSON.stringify(requestBody),
};
const response = UrlFetchApp.fetch("https://api.openai.com/v1/chat/completions", requestOptions);
const responseText = response.getContentText();
const json = JSON.parse(responseText);
const generatedText = json['choices'][0]['message']['content'];
Logger.log(generatedText);
body.appendParagraph(generatedText.toString());
}
// Generates prompt based on the selected text and adds it to the document
function generatePrompt() {
const doc = DocumentApp.getActiveDocument();
const selectedText = doc.getSelection().getRangeElements()[0].getElement().asText().getText();
const body = doc.getBody();
const prompt = "Generate an essay on " + selectedText;
const temperature = 0;
const maxTokens = 2060;
const requestBody = {
model: MODEL_TYPE,
messages: [{role: "user", content: prompt}],
temperature,
max_tokens: maxTokens,
};
const requestOptions = {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + API_KEY,
},
payload: JSON.stringify(requestBody),
};
const response = UrlFetchApp.fetch("https://api.openai.com/v1/chat/completions", requestOptions);
const responseText = response.getContentText();
const json = JSON.parse(responseText);
const generatedText = json['choices'][0]['message']['content'];
Logger.log(generatedText);
body.appendParagraph(generatedText.toString());
}
ちなみに、応用版は以下の通りです。
以前のGPT-3の関数よりも精度が高いです✨
応用版ではTwitter投稿の自動生成もできます💪
応用版のサンプル
では、ここから有料部分に入ります。
ここから先は
¥ 2,980
この記事が気に入ったらチップで応援してみませんか?