🤖

ChatGPTでサンドウィッチマンのゼロカロリー理論をLINEで作ってみた

2023/03/09に公開

サンドウィッチマンの伊達さんが提唱するゼロカロリー理論をChatGPTにもうまく提唱すれば答えられるのでは?と思い作ってみました。

1. ルールを決める

今回はLINEでサクッと返してほしいので、LINEで定義されているFlexMessageを使って返答してもらいます。そのため、ChatGPTから返してもらう形式はJson形式で依頼します。

今回お願いしたルールは以下の通りです。

Jsonオブジェクト形式で返してもらうことを念押ししています。画像はUnsplash APIを使ってもらっています。<返答>部分に返してもらうことも明記しました。ただ、稀にうまく返ってこないこともありますが^^;

ルール
これから私が食べ物を答えますので、ルールに従って理由を返してください。Jsonオブジェクトで出力をしてください。
余計な言葉は必要ありません。評論家らしく、なぜカロリーゼロなのか<返答>部分に置換してください。

- カロリーは中心に集まる性質がある。そのため、中心が空洞だとカロリーは無くなる。
- カロリー同士がぶつかり合うと、けんかして無くなる。
- 熱に弱く、110℃以上だと耐えられない。
- 凍ると無くなる。白いものは白紙に戻って無くなる。
- 烏龍茶を飲むと一切無くなる。
- 辛い食べ物はカロリーが無い。
- パン粉に包んで油で揚げると、カロリーが油へ逃げる。
- 昔からあるロングセラーのお菓子は太らない。
- 糖分を含んだ甘いものはすぐエネルギーに変わるので太らない。
- 甘いものとしょっぱいものを交互に食べればカロリーが無い。
- 新幹線などに持ち込んだ食材には速すぎてカロリーがついてこられず、カロリーがなくなる。
- 画像URLはUnsplash APIを使用してください(https://source.unsplash.com/960x640/?<英語キーワード>)

'''
{
  type: 'flex',
  altText: <キーワード>,
  contents: {
    "type": "bubble",
    "hero": {
      "type": "image",
      "url": https://source.unsplash.com/960x640/?<英語キーワード>,
      "size": "full",
      "aspectRatio": "20:13",
      "aspectMode": "cover"
    },
    "body": {
      "type": "box",
      "layout": "vertical",
      "contents": [
        {
          "type": "text",
          "text": カロリーゼロ!<返答>,
          "size": "xs",
          "wrap": true
        }
      ]
    }
  }
}

2. 実装

私が作成したNode-REDのフローを使って実装していきます。今回もenebularをサクッと使っていきます。
詳細は下記ページをご確認ください。

https://zenn.dev/gaomar/articles/b7caca7381f025

2-1. パレット追加

パレットの追加からLINEに関するノードを追加します。ノードを追加①タブからnode-red-contrib-line-messaging-apiを検索窓②から探してノードを追加③を行います。

s100.png

同様にnode-red-contrib-simple-chatgptノードを追加します。

chatgpt

2-2. Webhook設定

LINEからコールしてもらうWebhookの口を用意します。Webhookノードをドラッグアンドドロップします。設定は下記の通りです。

項目
Path /bot
※スラッシュも含めてください

s101.png

2-3. ChatGPT設定

simple-chatgptノードをドラッグアンドドロップして、TokenSystemSettingを埋めていきます。

項目
Token② ChatGPTのトークン
SystemSetting③ 1で定義したルール文字列

s102.png

2-4. Jsonオブジェクト化

ChatGPTからは、FlexMessageの文字列形式で返ってくるのでLINEで使えるJsonオブジェクト形式に変換します。Jsonノードをドラッグアンドドロップして、変換を行います。

項目
動作② 常にJavaScriptオブジェクトに変換

s103.png

2-5. Reply対応

LINEに返信してもらう設定を行います。LINE Developerからチャネルシークレットキーとアクセストークンを取得してノードに反映します。

項目
Secret② LINE Developerチャネルに明記されているシークレットキー
AccessToken③ LINE Developerチャネルに明記されているアクセストークン

s104.png

2-6. デプロイ

全てのノードを繋いでいることを確認したら、右上の保存ボタンをクリックします。

s105.png

「i」マーク①にマウスカーソルを合わせると、デプロイURL②が表示されるので、メモしておきます。

s106.png

LINE DeveloperのMessaging APIのWebhook URLの設定画面で、コピーしたデプロイURLの末尾に2-2で設定したPathを付与します。

s107.png

これでLINE公式アカウントと友だちになってから、好きな食べ物を入力するとChatGPTがルールに従ったゼロカロリー理論を返答してくれます。

result.png

まとめ

ルールを厳格に決めることでこちらが意図した通りの動きをしてくれました。結構複雑なルールでもよしなに対応してくれたので驚きました。ChatGPT側からしたら、一体何をしているのか意味不明かもしれませんがw
ルール次第でルーチンワークなども減らせるような気もしますね。

LINE Developer Community

Discussion