Googleスプレッドシートに GPT3 を組み込んで関数として使う


![GPT3_FUNCTION_ON_GAS.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611121/1c2fea84-7912-0985-caf6-30adba1ec80a.gif)

元ネタ：
https://twitter.com/kajikent/status/1615179400231931906

Googleスプレッドシートに GPT3 を組み込んで関数として使うと、上のようなことができるらしいので、作ってみた。

~~SheetAI.appでノーコードで作れるって言ってる人いるけど、知らないサイトにメールアドレス渡すのって怖いし、何より自分でカスタマイズできると面白いですよね！~~


実際やってることは**非常に簡単** (手っ取り早くGASのコードを知りたい人は [ページ内リンク](https://qiita.com/Qnoir/items/ce159093711caeb2c644?utm_campaign=post_article&utm_medium=twitter&utm_source=twitter_share#9-%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%81%AE%E7%B7%A8%E9%9B%86%E7%94%BB%E9%9D%A2%E3%81%AB%E6%88%BB%E3%82%8A%E4%B8%8B%E8%A8%98%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%85%A5%E5%8A%9B) にジャンプ）

### 1. OpenAIのAPIページにアクセス

https://openai.com/api/


### 2. サインアップしアカウントを作成してログイン
（サインアップには携帯電話番号が必要）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611121/ba9fb9bc-cdc8-75ce-7fb9-cfd188ca8ced.png)


### 3．左上のアカウント名をクリックし、ドロップダウンメニューから「View API keys」を選択
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611121/d5f1b1c3-c197-2f73-3529-3df7b51a6f91.png)


### 4. Create new secret key をクリック
クリップボードに API キーがコピーされるので一時的に控えておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611121/143e830a-0995-503b-de80-306873f9be7f.png)


### 5. Googleスプレッドシートを開き、メニューから拡張機能 -> Apps Script を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611121/7705f0ec-2b1b-fed6-67bc-0c5b2ecb1eef.png)


### 6. エディタ左側に縦に並んでいるアイコンのうち、歯車のアイコン（プロジェクトの設定）をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611121/b0a09f25-4c24-ce87-3ae6-b98480e48a0d.png)

### 7. 設定画面を一番下までスクロールして、「スクリプトプロパティを追加」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611121/0290b5fa-bde4-613b-0b1c-d32a99f7cd23.png)


### 8. APIキーを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611121/44fc5150-e1ae-9311-4dff-6a09a5869ca6.png)



プロパティには、大文字半角で「APIKEY」、
値には、先ほどOpen AIのサイトから発行した API キー を入力する
↓
「スクリプトプロパティを保存」をクリック。

### 9. エディタの編集画面に戻り、下記のコードを入力
```js
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,"");
}
```

実行ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611121/ce8180fd-b030-d9ba-6af7-8c0e05577615.png)

実行すると、下記のようなダイアログが出るので「権限を確認」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611121/9536cf40-b1db-9a6e-fb69-2a37ead931b6.png)


自分のアカウントをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611121/f3cdb6c6-348f-b223-101a-b48a65396c72.png)

詳細をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611121/2befffb4-cd6a-28cc-042f-a52c5c341220.png)

「安全ではないページに移動」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611121/5d9ec489-b77a-1fcf-a62c-70b7ed786f32.png)


### 10. スプレッドシートに「=GPT3("質問文")」の形式で関数を入力。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611121/b80da974-d54f-0f87-e8e3-4554dc2fe4eb.png)

たとえば、B3セルに会社名を入れて、C3セルに下記の数式を入れる。
すると、設立年が返ってくる。
```
=GPT3("When founded" & B3 & "? Answer with year numbers only.")
```

できあがったもの。
![GPT3_FUNCTION_ON_GAS.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611121/ceb45673-405e-eb66-f5d3-484b392773de.gif)


### 注意
あまり大量に数式を配置したり、頻繁に更新したりすると、レート制限によってエラーになることがあります。（私の上記のコードだと、エラーのときはちゃんとエラーが発生していることがわかるとともに、どんなエラーかという内容が、該当セル上に出ます）

max_tokens や temparature は好みで調整してください。