ChatGPTで人格を持たせつつ記憶ありのLINEボットを複数ユーザーに対応して作った話【ソースコードつき】
最近ChatGPTのAPIを使ってLINEボットを作る系の記事がたくさんありますが、会話の記憶に対応したものが少ないのと、あったとしてもGASのスクリプトプロパティに過去の会話を保存するものだったりで、複数ユーザーの記憶ができないので改良してみることにしました。
少し長くなるので目次を設定しておきます。
概要編
作るLINEボットについて
この記事で作るLINEボットはこんな特徴があります。
女子高生の人格を持たせる
直近の会話の記憶に対応させる
ユーザーごとに記憶を持たせる
アーキテクチャ
使用する技術は下記のとおりです。ChatGPT APIなど、有償のものも含まれます。参考にした記事にも詳しく書かれてますので参考にしてください。
ChatGPT API
有償: いわずもがなのChatGPT APIです。女子高生の人格はプロンプトで実現します
LINE Messaging API
無償: 今回はLINEで実装するので、LINE Messaging APIが必要です
Google App Script(GAS)
無償: LINE Messaging APIとChatGPT APIを仲介したり、Cloud SQLからのデータを取得したりします
GCP(Cloud SQL)
有償: データベースにユーザーごとの会話履歴を保存します
参考にした記事
この記事の内容は、下記の記事を参考にさせていただきました。基本的にこれらの記事の組み合わせです。
開発編
基本的には参考にさせていただいた記事の内容で実現できますが、一部工夫したポイントがあるので、差分をご紹介します。ソースコードは有料記事部分にありますので、自分で書きたくない方はご覧ください。
データベース
データベースはGoogle Cloud SQLのMySQLを使いました。テーブル設計はこんな感じです。messageにJSON形式のデータを入れています。
mysql> show tables;
+-------------------+
| Tables_in_chatgpt |
+-------------------+
| message_log |
+-------------------+
1 row in set (0.03 sec)
mysql> show columns from message_log;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| timestamp | timestamp | NO | | NULL | |
| user_id | varchar(33) | YES | UNI | NULL | |
| message | text | YES | | NULL | |
+-----------+-------------+------+-----+---------+----------------+
4 rows in set (0.05 sec)
接続用のキーやパスワードの保存方法
ChatGPTのアクセスキーやデータベースなどへ接続するためのパスワードは、スクリプトプロバティにすべて保存するようにしています。設定値はこんな感じです。
ソースコードはここから先の有料記事部分にあります。
ここから先は
この記事が気に入ったらサポートをしてみませんか?