【ChatGPT × Cloud Functions × Firestore】会話記憶するLINE Bot開発:環境設定編

この記事は約7分で読めます。

下記noteを参考に、ChatGPT APIとGASを使ったLINE Botを作成してみたのだが、GAS以外の方法で、かつ大規模運用にも耐えられるように設計したいと思うようになった。

ChatGPT APIを使ったLineBotの作り方を、人格の与え方まで完全解説【プログラミング不要】|ChatGPT研究所
本記事では、3月2日に公開された OpenAI の ChatGPT API を使って、LineBot を作ったことがない初心者の人でも、 ChatGPT の Line Bot が作成できる方法をご紹介します。文脈理解のみ有料ですが、他は全て...

Udemyで『ChatGPTを用いたLINEBot開発入門-基本的な機能からPDFを用いたQ&Aまで、クラウド上での開発方法を徹底解説』というタイトルの講座を発見

GCPというクラウドサーバーを使うのと、単純にChatGPTのAPIを使うだけではなく、追加情報をPDFで用意してベクトル化するという点が新しく、勉強したいと思ったので受講したところ、非常に勉強になった。

ChatGPTを用いたLINEBot開発入門-基本的な機能からPDFを用いたQ&Aまで、クラウド上での開発方法を徹底解説
本講座では、ChatGPTを用いたチャットボットをLINEで動かすための方法を、クラウドサービスの活用方法と共に手を動かしながら学べます。実際に動くものを作り上げる過程で、もの作りの楽しさを感じたり仕組みを理解することができます。

講座で紹介されていたコードをもとに、今回作成したい「方言を話すLINE BOT」用に少し変更(あと、2023年12月時点での最新のOPENAIのAPI呼び出しに対応。ただし今後変わりうる)したので、備忘録として記載。

会話記憶を持たせるLINE BOT作成の全体像

手書きが汚すぎるが、こんな感じ。

ちなみに、Show Me Diagramという ChatGPT Pluginを使って、下記のプロンプトを指示したところ

エンドユーザーがLINEにメッセージを送信すると、Cloud functionsにwebhookでリクエストが送信され、CloudfunctionsのChat GPT APIを利用した返答を生成し、LINEに返し、ユーザーにメッセージが返ってきます。

また、Cloud functionsからFirestoreに対話内容を保存し、firestoreから過去の対話履歴を呼び出してCloud functionsに戻します。

このことを表す図表を作成してください

下記の返答がきて、ダイアグラムを作成してくれた。

こちらが、エンドユーザーがLINEにメッセージを送信し、Cloud Functionsを介してChat GPT APIを利用して返答を生成し、LINEを通じてユーザーにメッセージが返されるプロセスを示すシーケンス図です。また、この図にはCloud FunctionsからFirestoreに対話内容を保存し、Firestoreから過去の対話履歴を呼び出してCloud Functionsに戻すプロセスも含まれています。

結局、Googleスライドで作成した。ここら辺、手書きから自動化して、良い感じのダイアグラムを作成できるようになるとありがたいな。

ユーザーがLINEにメッセージを送信すると、その内容はLINEのWebhookによってCloud Functionsに転送され、Cloud Functionsで設定した関数でOpenAI APIを通じてChatGPTを利用してユーザーのメッセージに対する応答が生成される。

生成された応答はLINEを通じてユーザーに返送される。このプロセスには、セキュリティのためのChannel SecretとAPIの認証のためのChannel Access Tokenが用いられる。また、Cloud FunctionsとFirestoreの間でユーザーメッセージや応答などのデータが保存され、交換される。

LINE Messaging APIの仕様とDeveloperアカウントの設定

LINE Messaging APIの仕組み

Messaging API(双方向メッセージ送信API) | LINE API UseCase
Messaging APIは、LINEプラットフォーム上で、あなたのサービスとLINEユーザーの双方向のコミュニケーションを可能にするAPIです。
Messaging API(双方向メッセージ送信API)
  1. エンドユーザーが送信したメッセージは、LINEプラットフォームに届く。
  2. LINEから、ボットサーバーのWebhook URLにメッセージ(Webhookイベント)が送信される。LINEから送られていることを証明する秘密鍵(Channel Secret)も一緒に送信する。
  3. Webhookイベントに応じて、LINEプラットフォームに用意されているREST APIを利用(この時にボットサーバーがLIINEに権限を持っていることの証明情報(Channel Access Token)も送る)して、ボットサーバーからエンドユーザーにメッセージを送信する。

(参考)なぜチャネルアクセストークンを使うのか?

チャネルアクセストークン
LINE Developersサイトは開発者向けのポータルサイトです。LINEプラットフォームのさまざまな開発者向けプロダクトを利用するための、管理ツールやドキュメントを利用できます。LINEログインやMessaging APIを活用して、...
LINE Developers チャネルアクセストークン

LINE developers アカウント設定

Messaging APIを始めるには、LINE developersコンソールにログインして、チャネルを作成するる必要があり、やり方はこちらを参照。

Messaging APIを始めよう
LINE Developersサイトは開発者向けのポータルサイトです。LINEプラットフォームのさまざまな開発者向けプロダクトを利用するための、管理ツールやドキュメントを利用できます。LINEログインやMessaging APIを活用して、...

私の場合は、ログインするとこのような画面に。

今、テストで、ミーアちゃんの鹿児島弁bot「ミーアじゃっど」と京都弁bot「ミーアどす」を作っているので、このような画面になっている。

ChannelSecretとChannelAccessTokenを取得

ChannelSecretは、Developersコンソールの「チャネル基本設定」のタブをクリックして、下にスクロールすると記載されている。

ChannelAccessTokenは、Developersコンソールの「Messaging API設定」のタブをクリックして、下にスクロールすると記載されている。ChannelSecretとChannelAccessTokenは記載されているタブの場所が異なるので注意。

どちらも後で使うので、メモしておく。

OpenAI APIキー取得

ChatGPTによる返答を作成するために、Open ai APIキーを取得する。

Open ai APIのサイトをクリックして、「API」を選択

Just a moment...

左サイドバーで「API keys」を選択

「Create new secret key」を選択して、OpenAI APIキーを発行する。

Cloud Functionsで対話機能実装

Cloud Functionsとは?

Cloud Functionsとは、Goolge Cloud( GCP )が提供するサーバーレスのクラウドコンピューティングサービスのひとつ。サーバーの制御は自動で行われるので、自分でサーバー運用をする必要がなく、アプリケーションの実装に集中できるのが利点。

Cloud Functions設定

下記サイトをクリックし、「コンソールへ移動」をクリックする。

Cloud Functions | Google Cloud
Scalable pay-as-you-go Function-as-a-Service (FaaS) to run your code with zero server management.

「ファンクションを作成」をクリック

必要なAPIの有効化のアラートが出たら、有効にするをクリック

リージョン

  • サービスを使う場所と地理的に近い方が、サービス速度が速い。今回は、東京を使用。
  • Cloud storageを用いる場合で、Cloud storageのregionをUSに指定した場合は、cloud functionsのリージョンもUSがよい。ちなみに、今回はCloud Storageは使わないので無視してOK。

トリガー

  • ここに記載されているURL(最後のディレクトリは、設定した関数名:function-1)にリクエスト送ると関数を実行できる
  • 「未認証の呼び出しを許可」を選択。そうしないとLINE側からCloud Functionを呼び出すことができない。セキュリティに関しては、コード側で対応する

ランタイムタブでランタイム環境変数だけ追加する。「変数を追加」をクリックし、名前の欄に先ほど取得した、LINE_CHANNEL_ACCESS_TOKEN、LINE_CHANNEL_SECRET、OPENAI_API_KEYを入力し、対応する値を貼り付ける。

「次へ」を押すと、下記のようなNode.jsの画面が出てくる。ファンクションの処理内容を記述するソースコードの入力となる。

最初にランタイムからPythonX.XXを選ぶ。今回はPython3.12を選択。開発環境などに応じて変える。デフォルトのコードは下記。

基本はmain.pyとrequirements.txtの2つのファイルから構成されていて、main.pyにファンクションの処理、requirements.txtにインストールが必要なパッケージを記述する。ファイルは+ボタンで追加可能。

ここまでで、結構な分量になったので、実際のコード入力からは、こちらの記事で。

コメント

タイトルとURLをコピーしました