LINEで応答するChatGPTを作ってみた

ChatGPTのAPIが公開されたことで、既成のサービスへの組み込みが簡単に行えるようになりました。

今回はこれをLINEからの呼び出しに対応させることで、高性能なLINE Botを作成します。

LINEのMessage APIとChatGPT APIへの連携にはいくつかの方法があります。

  • AWSPythonから、ライブラリopenaiを使用して実行する
  • HTTP連携サービスで、直接HTTPリクエストを実行する
  • ノーコードツールを使用する

今回は、最近話題のノーコードツール「Make(旧Integromat)を使ってみます。

システム構成

Lineからの登録内容を、LineのMessage APIを介してMakeに飛ばし、そこからChatGPTをコールします。ChatGPTからの応答内容を、そのままLineに通知することで、ChatBotを構成します。

出来上がりイメージ

作業の流れ

以下のような流れになります。

  1. ChatGPTのAPIKEYを取得する。
  2. LINE DeveloperでMessage APIを作成する。
  3. Makeで新規シナリオを作成し、Lineからの受信を作成する。
  4. LINE DeveloperのWeb Hookに上記のリンクを設定する。
  5. MakeにHTTPリクエスト処理を追加し、ChatGPTへの問い合わせを設定する
  6. MakeにChatGPTの応答文をLineへ通知する処理を追加する。

作業手順

1. ChatGPTのAPI KEYを取得する。

  • ChatGPTのアカウントを作成後、API KEYを生成して取得します。この流れは、以前公開したこちらをご確認ください。

camelrush.hatenablog.com

2. LINE DeveloperでMessage APIを作成する。

  • 以下のサイトでログインを行います。
    LINE Developers
  • サイドメニューの「プロバイダ」を選択し、新規にプロバイダを作成します(名前は任意)
  • 「新規チャネルを作成」を選び、「Messaging API」をクリックします。

  • チャネルの内容を登録していきます。ここに登録する内容はなんでも良いです。業種なども適当で大丈夫です。チャネル内容の登録ができたら、下部にある「作成」ボタンをクリックします。

  • 画面が切り替わったら、中段のメニューバーにある「Messging API設定」をクリックしてください。内容にQRコードが表示されますので、これをスマートフォンで読み込んで「友達追加」を行います。

  • スマートフォンに友達が追加されます。

  • このLineDevelopersのページは後ほど使いますので、ブラウザを閉じずにそのままにしておいてください。

3. Makeで新規シナリオを作成し、Lineからの受信を作成する。

Make(旧Integromat)について

> ChatGPTさん、「Make(Integromat)を1000文字程度で説明して」

Make (formerly Integromat)は、ノーコードで異なるWebサービスやアプリケーションを連携させ、
タスク自動化を行うツールです。このようなサービスはiPaaS (integration Platform as a Service)と
呼ばれています。Make (formerly Integromat)では、シナリオと呼ばれるフローを作成して、
トリガーとアクションを設定することで、様々なサービス間のデータのやり取りや処理を自動化
できます。例えば、以下のようなことが可能です。

・特定の送信者からのGmailの内容をGoogleスプレッドシートに記録する。
・ZOOMの録画情報をGoogleドライブに保存する。
・Shopifyからキャンセルされた注文をAirtableに記録する。
・TwitterとSlackを連携して、特定の文言のツイートが投稿されたらそのツイートをSlackの特定の
 チャンネルに流す。

Make (formerly Integromat)は、500以上のサービスに対応しており、カスタムAPIやWebhookも
利用できます。また、複雑な条件分岐やループ処理も可能であり、高度な自動化が実現できます。
Make (formerly Integromat)は無料プランから利用できますが、有料プランではより多くの
オペレーション数やデータ量に対応し、優先サポートも受けられます。
Make (formerly Integromat)は業務効率化やコスト削減に貢献するツールです。

さすがですねw

  • 以下が使用時の画面イメージとなります。設定されたノードに沿って、左から右に向けてデータが流れていきます。

設定方法

  • 以下のリンクをクリックし、Makeのサイトにアクセスします。
    https://www.make.com/en

  • 「Get started free」をクリックして、ページにサインアップを行います。
  • サインインが完了したら、左のサイドメニューから「Scenarios」を選択した後、右上にある「Create a New Scenario」をクリックします

  • 画面中央にある大きな「+」をクリックして、トリガーを追加します。最初に作る処理は、Lineからの通知の受付ます。大量に出るサービスから「LINE」を探し出します。

    • LINEの内容のうち「Watch Events」を選択します。
    • WebHook欄で「Add」ボタンをクリックしてください。「Create Web Hook」画面が表示されます。

      • 「WebHook Name」には任意の名前を入れてください。

      • 「Connection」でAddボタンをクリックします。「Create a Connection」画面が表示されます。

        • 「Connection Name」には任意の名前を入れます。

        • 「Channel Access Token」には、アクセス用のTokenを設定します。この内容は、Line Developers画面から取得します。「Line Developers」サイトで、手順1で作成したチャンネル情報を開き、「Messaging API設定」画面の下部にある「チャネルアクセストークン」で「発行」を押してください。表示されたトークンをコピーし、Makeの「Channel Access Token」に設定します。

      • Saveボタンをクリックします。
    • 「Create Web Hook」画面でSaveボタンをクリックします。

    • Makeの「LINE」画面に戻ると、作成したWebhookの下に、青字でURLリンクが表示されていますので、この内容をコピーします。

4. LINE DeveloperのWeb Hookに上記のリンクを設定する。

  • 「Line Developers」サイトで、「Messaging API設定」画面の中段にある「Webhook設定」を編集し、手順3 の最後に青字で表示されたURLを設定します。

  • これにより、LINEがこのチャットに書き込んだメッセージが、Makeに送られるようになります。

5. MakeにHTTPリクエスト処理を追加し、ChatGPTへの問い合わせを設定する

  • Makeのシナリオ画面に戻り、LINEの右にあるコネクタ(耳みたいな部分)をクリックして、HTTPアクションを追加します。

  • アクションの種類は、「Make a request」を選択してください。

  • このHTTPアクションには次の設定を行います。

    • URL:https://api.openai.com/v1/chat/completions
    • Method : POST
    • Headers
      • Item1 :
        • Name : Content-Type
        • Value : application/json
      • Item2 :
        • Name : Authorization
        • Value : Bearer [chatGPT APIKEY]
    • Body type : Raw
    • Content type : JSON (application/json)
    • Request content : { "model": "gpt-3.5-turbo", "messages":[{"role": "user" ,"content": "{{1.events[].message.text}}"}]}
    • Parse response : Yes
  • 下図のような設定内容となります。

  • 「OK」ボタンをクリックします。

  • このアクションによって、手順3のトリガーが受信したLINEのメッセージがをChatGPTに送信して、AIからコメントの回答を得ることができます。

6. MakeにChatGPTの応答文をLineへ通知する処理を追加する。

  • 手順5のHTTPアクションに引き続いて、LINEアクションを追加します。

  • アクションの種類は、「Send a Replay Message」を選択してください。

  • このLINEアクションには次の設定を行います。

    • Connection:(手順3で作成したConnectionを選択)
    • Reply Token : {{3.events.replyToken}}
    • Messages
      • Item1 :
        • Type : Text
        • Text : {{7.data.choices.message.content}}
  • もし、「Text : {{7.data.choices[].message.content}}」が設定できない場合は、一旦仮保存したうえで、後述の確認まで作業を進め、その後でこちらを再設定してください。LINEからのメッセージ受信をテストすることで、7.dataが選択できるようになる場合があります。

  • 下図のような設定内容となります。

  • 「OK」ボタンをクリックします。

  • このアクションによって、手順5でChatGPTから受信した内容をLINEに通知することができます。

設定内容の確認

  • これまでの流れで、Scenario画面は以下のとおりになっています。

  • 左から、以下の順で実行されます。みたまんまですねw
    • 【LINE】LINEメッセージから書き込みを受け取る
    • 【HTTP】ChatGPTと通信して、書き込みへの返答を得る
    • 【LINE】LINEにへ返答を送信する

保存

画面下にあるフロッピーディスクのアイコン(古いな)をクリックして、シナリオを保存します。

動作確認とサービス有効化

  • 画面左下にある、「Run Once」ボタンをクリックしてください。図の一番左にある「LINE」トリガーが待機状態となります。

  • スマートフォンのLINEから、友達登録したチャットボットにメッセージを送信すると、画面のトリガーアクションが実行されます。

  • 動作結果に問題がなければ、サービスを有効化します。シナリオ一覧の画面に戻り、シナリオ右側にあるスイッチをクリックして「ON」に切り替えます。

  • これで、LINE Botの完成です。

まとめ・課題

今回は、ChatGPTを使用したLINE Botを作成しました。Webサービスのノーコードツールは初めて使いましたが、非常に便利に感じました。ただ、Web操作ではJSONやリクエストヘッダ等の最低限の技術知識は必要となるため、「ノーコード」→「エンジニア以外も使える」というわけではないようですね。

また、今回のBotには大きな課題があります。それぞれの問い合わせを単発で処理しており、ChatGPTサイトに見られるような、連続的な質疑応答の形で答えてくれません。この原因ははっきりしています。本来、ChatGPT APIで連続の問答を行うためには、2回目の質問の送信データ(JSON)に、1回目の質問と回答を載せて送信する必要があるのですが、手順5でHTTP送信するリクエストには、LINEのメッセージだけを扱っているため、その質問単独への回答しか戻ってきません。この点は改善点ですね。

なお、最後にMakeの無料利用枠について補足します。MakeはFreeプランとして、月あたり1,000回のOperationが無料となっています(詳細はこちら)。実験的に遊ぶには十分な回数となっていますので、これにとどまらず、他にもノーコード特性を生かしたサービス開発を試していこうと思います。