元ネタ:
https://twitter.com/kajikent/status/1615179400231931906
Googleスプレッドシートに GPT3 を組み込んで関数として使うと、上のようなことができるらしいので、作ってみた。
SheetAI.appでノーコードで作れるって言ってる人いるけど、知らないサイトにメールアドレス渡すのって怖いし、何より自分でカスタマイズできると面白いですよね!
実際やってることは非常に簡単 (手っ取り早くGASのコードを知りたい人は ページ内リンク にジャンプ)
1. OpenAIのAPIページにアクセス
2. サインアップしアカウントを作成してログイン
3.左上のアカウント名をクリックし、ドロップダウンメニューから「View API keys」を選択
4. Create new secret key をクリック
クリップボードに API キーがコピーされるので一時的に控えておく。
5. Googleスプレッドシートを開き、メニューから拡張機能 -> Apps Script を選択
6. エディタ左側に縦に並んでいるアイコンのうち、歯車のアイコン(プロジェクトの設定)をクリック
7. 設定画面を一番下までスクロールして、「スクリプトプロパティを追加」をクリック
8. APIキーを追加
プロパティには、大文字半角で「APIKEY」、
値には、先ほどOpen AIのサイトから発行した API キー を入力する
↓
「スクリプトプロパティを保存」をクリック。
9. エディタの編集画面に戻り、下記のコードを入力
function GPT3(prompt) {
const apikey = ScriptProperties.getProperty('APIKEY');
const url = 'https://api.openai.com/v1/completions';
const headers = {
Authorization:'Bearer ' + apikey,
'Content-type': 'application/json',
};
const options = {
muteHttpExceptions : true,
headers: headers,
method: 'POST',
payload: JSON.stringify({
model: 'text-davinci-003',
max_tokens : 50,
temperature : 0,
prompt: prompt
}),
};
const response = UrlFetchApp.fetch(url, options);
if (response.getResponseCode() !== 200) {
const message = JSON.parse(response.getContentText());
return 'Error:' + message.error.message;
}
const responseObj = JSON.parse(response.getContentText());
return responseObj.choices[0].text.replace(/\r?\n/g,"");
}
実行すると、下記のようなダイアログが出るので「権限を確認」をクリック
10. スプレッドシートに「=GPT3("質問文")」の形式で関数を入力。
たとえば、B3セルに会社名を入れて、C3セルに下記の数式を入れる。
すると、設立年が返ってくる。
=GPT3("When founded" & B3 & "? Answer with year numbers only.")
注意
あまり大量に数式を配置したり、頻繁に更新したりすると、レート制限によってエラーになることがあります。(私の上記のコードだと、エラーのときはちゃんとエラーが発生していることがわかるとともに、どんなエラーかという内容が、該当セル上に出ます)
max_tokens や temparature は好みで調整してください。