見出し画像

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のアクセスキーやデータベースなどへ接続するためのパスワードは、スクリプトプロバティにすべて保存するようにしています。設定値はこんな感じです。

スクリプトプロバティ

ソースコードはここから先の有料記事部分にあります。

ここから先は

7,353字

この記事が気に入ったらサポートをしてみませんか?