ChatGPTを使ってGoogleドキュメントを接続して記事を書く方法を紹介します。
使ってみたいけど、やり方が分からないという人のために、やり方を分かりやすく説明します。どういうものなのかを知っておいて損はないです。
悪用厳禁です。
ChatGPTとGoogleスプレッドシートを連携する方法はこちら
ChatGPTとGoogleドキュメントの接続方法
下記の手順で、誰でも簡単に設定できます。
ChatGPTとGoogleドキュメントの接続設定
- 1)OpenAIからAPIキーを取得
- 2)Googleドキュメントにスクリプトを保存
- 代替案)Chromeのアドオンを使う方法
「2)Googleドキュメントにスクリプトを保存」がよくわからないという人は、「代替案)Chromeのアドオンを使う方法」を試してください。アドオンを使えばノーコードで連携できます。
「1)OpenAIからAPIキーを取得」はどちらの場合も必要になります。
1)OpenAIからAPIキーを取得
まず、OpenAIからAPIキーを取得します。
下記のURLにアクセスして、ログイン画面が表示されたら、Googleアカウントを使って登録しましょう。
「API Keys」の取得画面が表示されたら「Create new secret key」ボタンをクリックして、表示されたAPIキーをコピーしてください。
メモ
以下からスクリプトを使って連携する方法を紹介しますが、アドオンを使って連携することも可能です。スクリプトやプログラムが苦手な人は「アドオンをインストール」してください。
2)Googleドキュメントにスクリプトを保存
次にGoogleドキュメントを開いて「拡張機能」>「Apps Script」をクリックします。
表示されたApps Script画面には、すでに文字が書かれていると思いますが、これを全て削除し、下記のスクリプトをコピペしてください。
// Googleドキュメントメニュー追加 function onOpen() { DocumentApp.getUi().createMenu("ChatGPT") .addItem("目次作成", "generateIdeas") .addItem("記事作成", "blogwriting") .addItem("自由質問", "generateall") .addItem("画像作成", "generateImage") .addToUi(); } // APIキー&モデル設定 var apiKey = "xxxxxxxxxxxx"; var model = "text-davinci-003"; // 目次作成 function generateIdeas() { var doc = DocumentApp.getActiveDocument(); var selectedText = doc.getSelection().getRangeElements()[0].getElement().asText().getText(); var body = doc.getBody(); var prompt = selectedText + "で記事を書く時のアイディアを出して"; temperature = 0.5; maxTokens = 2048; 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); para = body.appendParagraph(json['choices'][0]['text']); } // 記事作成 function blogwriting() { var doc = DocumentApp.getActiveDocument(); var selectedText = doc.getSelection().getRangeElements()[0].getElement().asText().getText(); var body = doc.getBody(); var prompt = selectedText + "でブログ記事を書いて"; temperature = 0.5; maxTokens = 2048; 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); para = body.appendParagraph(json['choices'][0]['text']); } // 自由質問 function generateall() { var doc = DocumentApp.getActiveDocument(); var selectedText = doc.getSelection().getRangeElements()[0].getElement().asText().getText(); var body = doc.getBody(); var prompt = selectedText; temperature = 0.5; maxTokens = 1024; 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); para = body.appendParagraph(json['choices'][0]['text']); } // 画像作成 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()); }
参考:mustafabutt-dev/chatgpt-and-google-docs.gs
貼り付けたスクリプトの中の「xxxxxxxxxxxx」の部分だけを最初に取得した「APIキー」に置き換えてください。
そして「プロジェクトを保存」アイコンをクリックし、「実行」ボタンをクリックします。
もし「承認が必要です」という画面が表示されたら「権限を確認」をクリックしてください。
手順に従って自分のGoogleアカウントで権限を許可してください。
赤いポップアップ画面が表示されなければ、設定完了です。
ChatGPTとGoogleドキュメントで記事を書く方法
ここからは、設定したChatGPTを使って記事を書く方法を紹介します。
ChatGPTとGoogleドキュメントを使った記事の書き方
まず、記事のテーマを書いて、その文を選択してください。
そして、選択した状態のまま、メニューにある「ChatGPT」>「目次作成」をクリックします。
例:ペットを飼うならどの動物がおすすめ?
少し待つと、そのテーマのアイディア(または目次)一覧が表示されます。
次に、表示されたアイディアに「メリット」「デメリット」などのキーワードを追加して文を書きます。
例:犬を飼うメリット・デメリット
書いた文を選択して、メニューにある「ChatGPT」>「記事作成」をクリックしてください。
後は、これを繰り返して、文章を生成して整えれば完成です。
「自由質問」メニューについて
上記のスクリプトに「自由質問」というメニューを追加しました。
「自由質問」では、選択したテキストをまるごとChatGPTに送信して回答を得られるようになっているので、目次やブログ記事作成以外の自由な質問に使えます。
下記は「記事を書く時にChatGTPを使うと何ができるのか教えて」と質問した時の回答例です。
条件を追加して質問する
「自由質問」メニューでは、質問を全て自分で制御できるので、条件なども設定できます。
条件を追加する時は、改行せず書くのがポイントです。改行してしまうとうまく条件が反映されないようです。
1)回答内容を誰かの口調に似せて答えてもらう場合
以下の質問に対して「にゃん」を付けて答えて。質問内容は「・・・」。
2)除外する条件を設定する場合
除外の書き方は「:」を使って指定する必要はありません。ChatGPTが「ここから先は除外するべきもの」だと分かるように書けばOKです。
都内の温泉施設について教えて。以下の場所は除外:あああああ、いいいいい、ううううう、えええええ、おおおおお
3)文字数や回答数を設定する場合
〇〇について300文字程度で教えて。
〇〇について10個教えて。
カスタマイズ方法
個人でカスタマイズして利用する方法を紹介します。プログラミングが苦手な人でも読んでおくといいですよ。
出力方法を変えたい
前述のスクリプトの中に、下記の記述があります。
var prompt = selectedText + "で記事を書く時のアイディアを出して";
var prompt = selectedText + "でブログ記事を書いて"
「目次作成」では、「選択した文字」+「で記事を書く時のアイディアを出して」という言葉をChatGPTに投げることで、目次を作成しています。
【目次作成の出力の仕組み】
ペットを飼うならどの動物がおすすめ?で記事を書く時のアイディアを出して
記事作成も同じような仕組みになっています。
【記事作成の出力の仕組み】
犬を飼うメリット・デメリットでブログ記事を書いて
この固定の言葉の部分を書き換えると、別の出力にできます。「アイディア」という言葉で目次がうまく出力されない場合は「目次」や「記事構成」といった言葉に変えてみましょう。
例1)で記事を書く時の目次を作って
例2)で記事を書く時の構成を考えて
なお、この固定文字の部分を英語にすると、英語出力になる傾向があります。
パラメータについて
スクリプトで利用しているパラメータについて説明します。
「model」
ChatGPTは「model」モデルによって文章作成精度や速度が異なります。
この記事では「text-davinci-003」を指定していますが、必要に応じて変更してください。
変更した場合は、利用可能な最大トークンにも注意しましょう。
モデル | 最大トークン | 最大リクエスト | トレーニングデータ |
text-davinci-003 | 4,000トークン | GPT-3モデルを採用しており、一番頭がいいモデル | 2021年6月まで |
text-curie-001 | 2,048トークン | davinciよりも高速&低コスト | 2019年10月まで |
text-babbage-001 | 2,048トークン | 非常に高速&低コスト | 2019年10月まで |
text-ada-001 | 2,048トークン | GPT-3モデルの中では最速&低コスト | 2019年10月まで |
※2023/2/23時点
モデル自体を丸ごと別のものにする場合は、「エンドポイント」にも注意しましょう。
例えば、「text-davinci-003」のエンドポイントは「/v1/completions」ですが、「gpt-3.5-turbo」は「/v1/chat/completions」になります。
「max_tokens」
「max_tokens」は、生成する時の最大トークン数を指定します。どのくらいの文章を書かせるかということです。
大きい数値を指定すると、APIの無料枠をすぐに使い切ってしまうので注意しましょう。
この記事では「2048」を指定していますが、出力方法を検証する場合は、低めに設定しておいた方がいいです。
「temperature」
「temperature」は、生成する応答の多様性を指定します。0~1の範囲で指定できます。
この値が0に近いほど、最も確率が高い回答が選ばれ、1に近いほど回答の幅が広がるということです。そのため、QAで使うなら0、記事を書く場合は1に近い方がいいと思います。
なお、0.5程度にすると無駄な出力が減りました。
下記は、「英語論文の書き方」で目次作成した場合のサンプルです。
temperature:0 temperature:0.5
- 1. 英語論文を書く際には、まずは自分が書きたいことを明確にすることが重要です。論文の主題を決め、その主題に関する資料を収集しましょう。
- 2. 論文を書く前に、論文のフォーマットを決めましょう。論文のフォーマットは、書き方や構成などを決めるために重要な役割を果たします。
- 3. 論文を書く際には、論文の中心的なテーマを決めることが重要です。論文の中心的なテーマを決めることで、論文を書く際の方向性を決めることができます。
- 4. 論文を書く際には、論文の中で使用する言葉を選ぶことが重要です。論文を書く際には、論文の中で使用する言葉を選ぶことで、論文をより読みやすくすることができます。
- 5. 論文を書く際には、論文の中で使用する参考文献を選ぶことが重要です。参考文献を選ぶことで、論文をより信頼性の高いものにすることができます。
- 6. 論文を書く際には、論文の中で使用するデータを選ぶことが重要です。データを選ぶことで、論文をより信頼性の高いものにすることができます。
- 7. 論文を書く際には、論文の中で使用する図表を選ぶことが重要です。図表を選ぶことで、論文をより読みやすくすることができます。
- 8. 論文を書く際には、論文の中で使用する引用文を選ぶことが重要です。引用文を選ぶことで、論文をより信頼性の高いものにすることができます。
- 9. 論文を書く際には、論文の中で使用する記述を選ぶことが重要です。記述を選ぶことで、論文をより読みやすくすることができます。
- 10. 論文を書く際には、論文の中で使用する言葉を適切に使うことが重要です。言葉を適切に使うことで、論文をより読みやすくすることができます。
- 1.英語論文の書き方について、有効な研究方法を紹介する。
- 2.英語論文で使用する適切な言葉の選択方法を紹介する。
- 3.英語論文で有効な文章構成と書き方を紹介する。
- 4.英語論文のレイアウトとフォーマットを紹介する。
- 5.英語論文の書き方における注意点を紹介する。
- 6.英語論文を書く時に役立つツールやテクニックを紹介する。
- 7.英語論文を書く時に考慮すべき文法規則を紹介する。
- 8.英語論文を書く時に考えるべき基本的なテーマを紹介する。
- 9.英語論文の書き方における文章構造を紹介する。
- 10.英語論文を書く時に役立つ参考資料を紹介する。
アドオンを使ってChatGPTとGoogleドキュメントを連携する方法
ChatGPTとGoogleドキュメントをアドオンを使って連携することもできます。
スクリプトやプログラムがよく分からない場合は、アドオンを使うと簡単です。
アドオンの場合も「API Key」は必要は必要になるので取得しておきましょう。
アドオンをインストールしてChatGPTを利用する方法
Googleドキュメントを開いて、「拡張機能」>「アドオン」>「アドオンを取得」をクリックします。
アドオン画面が表示されたら「chatgpt」と入力して検索し、「GPT for Google Sheets and Docs」をクリックします。
いろいろなアドオンがあるので、どれにしようか迷うと思いますが、一番ダウンロード数が多いのを選ぶと間違いないです。
「GPT for Google Sheets and Docs」の画面が開いたら「インストール」をクリック。
インストールの準備画面では「続行」をクリック。
利用するGoogleアカウントを選択する画面が表示されるので、アドオンをインストールするアカウントを選択してください。
インストールが完了すれば、この画面は閉じてOKです。
続いて、アドオンを利用できるように設定します。
Googleドキュメントの「拡張機能」>「GPT for Sheets and Docs」>「Set API Key」をクリックしてください。
取得してAPI Keyを入力して「Sace API Key」ボタンをクリックすれば、設定完了です。
設定が完了するとアドオンが右側に表示されますが、表示されない場合は、Googleドキュメントの「拡張機能」>「GPT for Sheets and Docs」>「Launch」をクリックしてください。
「Select action」の入力欄に質問を入力すれば、Googleドキュメントに回答が出力されます。
APIに課金する方法
5ドルの無料枠や3か月のお試し期間が終了すると、課金しないと利用できません。
以下、課金方法を紹介します。
ChatGPTのAPIに課金する方法
Billingメニューの「Overview」に移動して「Setup paid account」ボタンをクリックします。
次に「個人利用」か「法人利用」を選択します。
クレジットカード情報と住所を入力して「Set up payment method」をクリックしてください。これで設定完了です。
課金を開始したら、使いすぎ防止の設定をしましょう。
Usage limitsメニューにある「Soft limit」と「Hard limit」を利用して使いすぎ防止設定ができます。
「Soft limit」で指定した料金に到達するとメールが届き、「Hard limit」になると利用が停止されます(毎月リセット)。
よくある質問
無料で使えるのか
APIには、無料トライアル期間があります。
ChatGPTのアカウントを作成すると無料トライアルがスタートし、約3か月の間、5ドルの無料クレジットが利用可能です。
下記のUsageページにアクセスすれば、現時点でどのくらい利用したかが分かります。
無料トライアルが終了した後は課金が必要になり、クレジットカードを使って利用した分だけ支払うことになります。
価格は利用するモデル(Model)によって異なるので、Priceページで確認しておきましょう。
モデル(Model)による料金の違い
料金はモデル(Model)によって異なり、「入力したトークン」と「出力したトークン」の合計の料金がかかります。
また、「GPT-3.5 Turbo」の中でも長文入力ができる「16K context」モデルは「4K context(通常モデル)」よりも料金が高いです。
例えば「GPT-3.5 Turbo」で、500文字程度の質問(500トークンで約0.10円)をして、1000文字程度の回答(1000トークンで約0.42円)を得た場合、合計で約0.52円になります。
トークンとは?
Priceページを見ると分かりますが、1000トークンごとの金額が書かれています。
トークンとは、ChatGPTが処理する「テキストの塊」のことで、必ずしも1単語1トークンというわけではなく、トークンは増えたり減ったりすることがあるようです。
どのようにChatGPTが分解するのかは分からないので、おおよその目安として下記のように覚えておきましょう。
- 英単語1つ:1トークン
- ひらがな1文字:1トークン
- 漢字1文字:2~3トークン
参考:https://platform.openai.com/docs/guides/gpt/managing-tokens
リクエストに失敗しました(エラー: 429)と表示される
久しぶりに利用しようとしたら、下記のようなエラーメッセージが表示されるかもしれません。
Exception: https://api.openai.com のリクエストに失敗しました(エラー: 429)。サーバー応答の一部: { "error": { "message": "You exceeded your current quota, please check your plan and billing details.", "type": "insufficient_q...(応答の全文を見るには muteHttpExceptions オプションを使用してください)
利用できていたのに、このエラーが表示された場合、無料期間を過ぎてしまった可能性があります。
Usageページで残りのクレジットが「Expired」になっていたら、無料期間が終了しているので課金しないと使えません。
無料期間を過ぎてしまった場合は「課金」するか、通常版「ChatGPT」、またはGoogle「Bard」などを使いましょう。
Googleポリシーに違反しないのか
実際に使ってみた感想は、検索上位のいいとこどりという感じがしました。
となると、気になるのがChatGPTを使って書いた記事はGoogleポイシーに違反しないのかという点です。
2023年2月時点、Google検索におけるAI生成コンテンツの見解は下記のようになっています。
AIや自動化は、適切に使用している限りはGoogle のガイドラインの違反になりません。検索ランキングの操作を主な目的としてコンテンツ生成に使用すると、スパムに関するポリシーへの違反とみなされます。
参照:Google検索セントラル ブログ
自分がAIで作成したものの著作権はどうなる?
著作権は、人間の「創作的意図」と「創作的寄与」がある場合に発生し、AIが生成したものでも両方を満たせば著作権が発生します。
AIで作成する時にも「創作的意図」は発生しますが、「創作的寄与」に関しては判断が難しく課題が残っているようです。
ですが基本的には、AIで誰でも簡単に生成できものであれば「創作的寄与」はないため、著作権は発生しないとのこと。
注意すること
ChatGPTを使えば、ほぼ自動で記事が書けますが、注意する点についてまとめておきます。
- ChatGPTの制限事項に注意
- 検索上位のいいとこどり
ChatGPTの制限事項に注意
ChatGPTを使う時に覚えておきたいのが、下記の制限事項です。
ChatGPT sometimes writes plausible-sounding but incorrect or nonsensical answers. Fixing this issue is challenging, as: (1) during RL training, there’s currently no source of truth; (2) training the model to be more cautious causes it to decline questions that it can answer correctly; and (3) supervised training misleads the model because the ideal answer depends on what the model knows, rather than what the human demonstrator knows.
参照:https://openai.com/blog/chatgpt/
「もっともらしいことを書くが、不正確または無意味な答えを書くことがある。しかし、それを修正するのは困難」とのこと。
また、トレーニングデータが、一番頭のいいDavinciでも2021年6月までのため、最新情報とは異なる結果が回答されるかもしれません。
間違った情報を記事にすると、Googleでは低評価につながるので注意が必要です。特にYMYLに関しては、過去に「WELQ問題」もあったので要注意。
メモ
WELQとは、DeNAが運営していた「ココロとカラダの教科書」というまとめサイトです。医師免許をもっていない、専門性に欠けるライターが、いい加減な医療系の記事を書いて問題になりました。
検索上位のいいとこどり
個人的な感想になりますが、ChatGPTの回答内容は「検索上位のいいとこどり」という感じがしました。
そのため、回答をそのまま使うと「つぎはぎの記事」になってしまい、新鮮さがありません。
これを防ぐには、「オリジナルコンテンツ」などの差別化が重要になってくる思います。