「ChatGPT」×「Google Sheets」(スプレッドシート)で情報収集を自動化する方法をご紹介します。
【完成イメージ】
A列に企業名を入力すると、B、C、D列に予め指定した情報(データ)を自動で収集します。
ChatGPTについて、詳しく知りたい方は以下の記事をご確認下さい。
では早速、手順を解説していきます。
API Keysの取得
OpenAI API(https://beta.openai.com/account/api-keys)のリンクに接続します。
以下のページが表示されたら、「+ Create new secret key」をクリックします。
自動でAPI Keyが生成されますので、シークレットキーをコピー(緑色のボタン)して、メモ帳などの忘れない場所に保存しておきます。
Google Sheetsのスクリプト設定
Google Sheets(https://www.google.com/intl/ja_jp/sheets/about/)のリンクに接続します。
以下のページが表示されたら、「スプレッドシートに移動」をクリックします。
スプレッドシートを選択する画面になりましたら、新規で作成するため、「空白」を選択します。
「無題のスプレッドシート」が開きます。(題目はクリックして変更可能です)
見出しの「拡張機能」>「Apps Script」を選択します。
Apps Scriptが開いたら、デフォルトで入力されているコードを全て削除します。
そして、以下のコードを全文コピーして貼り付けます。
/**
* GPT-3 and Google Sheets
* @param {string} prompt Prompt.
* @param {number} temperature (Optional) Temperature.
* @param {string} model (Optional) GPT-3 Model.
* @return Response returned by GPT-3.
* @customfunction
*/
const SECRET_KEY = "API keysで取得したシークレットキーを入力";
//const MAX_TOKENS = 10;
const MODEL_NAME = "text-davinci-003"; // more structured and deterministic: for data
//const MODEL_NAME = "davinci"; // more flexible and creative: for stories, chatbots
const MODEL_TEMP = 0.3;
function GPT(prompt,max_tokens=30) {
const url = "https://api.openai.com/v1/completions";
const payload = {
model: MODEL_NAME,
prompt: prompt,
temperature: MODEL_TEMP,
//max_tokens: MAX_TOKENS,
max_tokens: max_tokens
};
const options = {
contentType: "application/json",
headers: { Authorization: "Bearer " + SECRET_KEY },
payload: JSON.stringify(payload),
};
const res = JSON.parse(UrlFetchApp.fetch(url, options).getContentText());
return res.choices[0].text.trim();
}
以下の部分のみ、先ほどご自身で取得したシークレットキーを入力します。(” “は消さないように注意して下さい)
const SECRET_KEY = “API keysで取得したシークレットキーを入力”;
入力を終えたら、上部の「保存ボタン」をクリックします。
「シークレットキーの入力」と「保存」を終えたら、上部の「実行」をクリックします。
承認が必要です。という画面が出ましたら、「権限を確認」をクリックします。
Googleアカウントのログイン画面に移りますので、ご自身のアカウントを選択してログインします。
以下の画面が出ましたら、「詳細」をクリックします。
「「無題のプロジェクト(安全ではないページ)に移動」をクリックします。(安全なので安心して作業を進めて下さい)
「許可」をクリックします。
正常に実行が完了したことを確認します。
以上で設定は完了です。
Google Sheetsのセル設定
別タブで開いている「Google Sheets」に移ります。
セルに、GPT関数を織り込むことで、ChatGPTの回答を転記することが出来ます。
【GPT関数】
GPT(“質問内容”, 最大トークン数(文字数))
※1000トークンは約750単語
試しに「A1セル」に「トヨタ自動車」と入力します。
そして、「B1セル」に「=IF(ISBLANK(A1),,GPT(“2020年の”&A1&”の社長の名前だけ記入してください。”,100))」と入力します。ChatGPTが「B1セル」に自動で入力してくれます。
A | B | ||
1 | トヨタ自動車 | =IF(ISBLANK(A2),,GPT(“2020年の”&A2&”の社長の名前だけ記入してください。”,100)) |
ISBLANK関数は「テストの対象」の引数が、「空白」かどうかを判定します。今回は引数にA2セルを指定しているので、A2セルが「空白」であれば、処理をせず、空白でなければ、GPT(〜)を実行するという処理です。目的として、A2セルが「空白」の時に、B、C、D列にエラー値が表示されるのを防ぐ目的で入れています。
最初にお示したしたサンプルと同じにするには、各セルに以下のように入力します。
なお、2行目以降は、2行目をコピーすればOKです。例えば、「B2セル」をアクティブにして、「B2セル右下の◾️」を下にドラッグすると手軽にコピー出来ます。(Excelと同様)
A | B | C | D | ||
1 | 企業 | 社長(2020年時点) | 代表する製品 | 2015-2020年の売上高 | |
2 | トヨタ自動車 | =IF(ISBLANK(A2),,GPT(“2020年の”&A2&”の社長の名前だけ記入してください。”,100)) | =IF(ISBLANK(A2),,GPT(A2&”の代表する6つの製品名、サービス名を・で区切って箇条書きで記入してください。”,100)) | =IF(ISBLANK(A2),,GPT(A2&”2015年から2020年までの売上高を記入してください。”,100)) | |
3 | Tesla, Inc. A | 上をコピーして貼り付ける | 上をコピーして貼り付ける | 上をコピーして貼り付ける | |
4 | Apple, Inc. | ↑ | ↑ | ↑ | |
5 | Microsoft Corporation | ↑ | ↑ | ↑ |
A列を変更することで、B、C、D列が自動で更新されます。
また、情報収集する際には、見栄えや統一感も大事になりますので、なるべく人の手をかけずに済むように、ChatGPTに出来ることはお願いしておきます。今回の例では、以下がポイントです。
「B2セル」:社長の名前”だけ” → 書かないと、「〇〇会社のCEOは〜です」と文章で返ってくる
「C2セル」:”・で区切って箇条書き” → 書かないと、文章で返ってきたり、区切り文字がバラバラになる
情報収集の様々な用途に使えると思いますので、是非、色々と試してみて下さい。
より深く理解したい方のために、Apps Scriptの解説を最後に付けます。
Apps Scriptの解説
/**
* GPT-3 and Google Sheets
* @param {string} prompt Prompt.
* @param {number} temperature (Optional) Temperature.
* @param {string} model (Optional) GPT-3 Model.
* @return Response returned by GPT-3.
* @customfunction
*/
const SECRET_KEY = "API keysで取得したシークレットキーを入力";
//const MAX_TOKENS = 10;
const MODEL_NAME = "text-davinci-003"; // more structured and deterministic: for data
//const MODEL_NAME = "davinci"; // more flexible and creative: for stories, chatbots
const MODEL_TEMP = 0.3;
function GPT(prompt,max_tokens=30) {
const url = "https://api.openai.com/v1/completions";
const payload = {
model: MODEL_NAME,
prompt: prompt,
temperature: MODEL_TEMP,
//max_tokens: MAX_TOKENS,
max_tokens: max_tokens
};
const options = {
contentType: "application/json",
headers: { Authorization: "Bearer " + SECRET_KEY },
payload: JSON.stringify(payload),
};
const res = JSON.parse(UrlFetchApp.fetch(url, options).getContentText());
return res.choices[0].text.trim();
}
GPT-3モデルは異なるタスクに適した4つの主要モデルを提供しています。Davinciは最も能力の高いモデルであり、Adaは最速という特徴があります。今回はDavinciを使用しています。
const MODEL_NAME = "text-davinci-003";
最新モデル | 説明 | 最大リクエスト数 | 訓練データ |
text-davinci-003 | Most capable GPT-3 model. Can do any task the other models can do, often with higher quality, longer output and better instruction-following. Also supports inserting completions within text. | 4,000 tokens | Up to Jun 2021 |
text-curie-001 | Very capable, but faster and lower cost than Davinci. | 2,048 tokens | Up to Oct 2019 |
text-babbage-001 | Capable of straightforward tasks, very fast, and lower cost. | 2,048 tokens | Up to Oct 2019 |
text-ada-001 | Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost. | 2,048 tokens | Up to Oct 2019 |
【GPT関数】
GPT(“質問内容”, 最大トークン数(文字数))
※1000トークンは約750単語
以下のコードで、GPT関数で、最大トークン数を指定できるようにしています。GPT関数で指定しないと、最大トークン数 = 30になる設定です。
function GPT(prompt,max_tokens=30) {
const url = "https://api.openai.com/v1/completions";
const payload = {
model: MODEL_NAME,
prompt: prompt,
temperature: MODEL_TEMP,
//max_tokens: MAX_TOKENS,
max_tokens: max_tokens
};
APIの使用料
実は、APIの使用は有料です。また、使用する言語モデルによっても、費用は変わりますので、費用対効果を考えて、適切な言語モデルを選択することをお勧めします。詳しくは以下の記事で解説しています。