Google Apps ScriptでChatGPTのAPIを叩いてみた

とうとうChatGPTのAPIが使えるようになりました。

というわけで、早速ChatGPTのAPIをGoogle Apps Script(GAS)で叩いてみたいと思います！

**※ChatGPTのAPIをすぐに試したい場合は、無料でササッと使えるGASがオススメです。**

ChatGPTのAPIをGoogle Apps Scriptでリクエストする方法は動画でも解説中です↓
<iframe width="560" height="315" src="https://www.youtube.com/embed/JLrD6wmwIis" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

# まずAPIキーを用意しよう！

ChatGPTのAPIを叩くためにはAPIキーが必要になります。

下記の記事でOpenAIのAPIキーを取得する手順を解説しています。

https://auto-worker.com/blog/?p=6988

メアドと携帯電話番号を用意してサクっと登録しましょう。

APIキーを発行し、文字列をコピペしておきます。

# APIキーはスクリプトプロパティに保管

APIキーはコードに直書きしてもよいですが、うっかりコードを公開すると、APIキーが漏洩します。

悪い人に見つかると、勝手にバカバカとAPIが叩かれるので、Google Apps Scriptのスクリプトプロパティに保存しておきましょう。

APIKEYというプロパティに、APIキーの文字列を値として保存します。
![Snipaste_2023-03-03_06-59-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365005/3671dfd5-8032-aa20-6b0f-a33b8a8a7b5f.png)
スクリプトプロパティに格納しておけば、下記の形で呼び出しできます。

```Javascript
  const apiKey = ScriptProperties.getProperty('APIKEY');
```
# Google Apps ScriptでChatGPTのAPIをシンプルに実行

まずは最もシンプルにChatGPTのAPI叩いてみます。

下記記事にChatGPTのAPIを実行するサンプルコードを用意したので、スクリプトエディタにコピーしましょう。

https://auto-worker.com/blog/?p=7438

![Snipaste_2023-03-02_16-46-50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365005/5833d4d9-840d-61dd-390b-b121921d0917.png)
GASを初めて実行時に求められる初回認証を許可すれば、スクリプトが実行されます。

このようにきちんとChatGPTの応答文を得られました。
![Snipaste_2023-03-02_16-44-37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365005/1df39214-1fb3-ac4c-163e-9533a1c963ce.png)


# 過去のやり取りに応じた応答文をChatpGPTから返してもらおう

先ほどのは超シンプルなコードだったので、ChatGPTの強みは発揮できていません。

ChatpGPTの凄さを感じるために、7行目で定義したパラメータのmessagesを変更しましょう。

```Javascript
  const messages = [
    {'role': 'user', 'content': '日本で最も人口の多い都市はどこですか？'},
    {'role': 'assistant', 'content': '東京です。'},
    {'role': 'user', 'content': 'その次はどこですか？'},
    {'role': 'assistant', 'content': '横浜市です。'},
    {'role': 'user', 'content': 'その次はどこですか？'},
  ];
```

過去のChatpGPTへの投稿文と応答文も含めると、やり取りに応じた応答結果が返ってきます。
![Snipaste_2023-03-02_17-23-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365005/9f89fb7d-92f0-40aa-0299-0d66f3b38028.png)
「次は？」や「続きを」といった文脈を汲んだ応答が欲しい場合はこの形でAPIを叩きましょう。

# システムとしてChatpGPTにルールを命令しよう

messagesに設定できるroleにはsystemロールがあります。

フォーマットとしてアシスタントに指示する役割です。

これによって、「毎回語尾に特定ワードをつける」や「前提条件を設けた上でChatGPTに回答させる」といった挙動が可能です。

先程変更したmessagesを再度、以下のように変更します。

```Javascript
  const messages = [
    {'role': 'system', 'content': '語尾は80%の確率でニャン、20%の確率でシャーをつけてください。'},
    {'role': 'user', 'content': '元気が出ないので励ましてください。'},
  ];
```
ネコのような2つの語尾をつけてもらう振る舞いをChatGPTにセットし、ユーザーの投稿文を送ってみます。
![Snipaste_2023-03-02_17-24-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365005/dcca7324-8714-7049-35ee-b5e9a553fe8a.png)

初回は語尾ではないものの、きちんと確率も配慮して語尾にニャンとシャーがついてきています。

不特定多数のユーザーからの応答を受け付ける前にシステムロールから振る舞いを指示しておけば、特徴あるチャットボットが作成可能です。

# 終わりに

ChatGPTのAPIをGoogle Apps Scriptで試してみました。

今回はシンプルな形から、過去のやり取りに応じた形、システムによるフォーマットと基本的な3パターンを試してみました。

このパターンを組み合わせたり応用すれば、ChatpGPTのAPIで色々活用できます。

Google Apps Scriptは無料で手軽に使えるので本当にオススメです。

ChatpGPTのAPIを試したいなぁと思ったら、Google Apps Scriptでサクッとお試ししましょう。

◯参考リンク

https://platform.openai.com/docs/guides/chat

https://auto-worker.com/blog/?p=7428

https://auto-worker.com/blog/?p=6988

https://auto-worker.com/blog/?p=7438