
【簡易版】ChatGPTを使用した多機能LINEbotを設置しよう【LineBotForGPTCore1.1】
はじめに
シンプルなLINEボットのプログラムコードを紹介します。
筆者が今まで作ってきた多機能Lineボットから殆どの機能を削除しChatGPTとの会話機能に特化したものになります。
とりあえず簡単にLINEボットを動かしてみたい方、Pythonプログラムの勉強をしてみたい方、プログラムを自分で改修して機能を追加していきたい方向けのプログラムコードになります。
プログラムと本手順は無償公開となります。🔗ソースコードは筆者のGitHubからコピーして使用してください。
ソースコードの改編は自由です。
高機能なChatGPTのLINEBOTを動かしたい方、独自のコードを実装するにあたりコードの内容を参考にしたい方は以下の記事を参照ください。
注意事項
掲載されている手順は2024年04月に確認したものです。
このボットは、OpenAI APIを利用しているため、事前にAPIキーが必要です。APIキーは、🔗OpenAIのウェブサイトから取得できます。
このボットはGoogle Cloud Platformを使用しているため事前にGoogleアカウントが必要です。
このボットはLINEを使用しているため事前にLINE Businessアカウントが必要です。
このボットの設置にはGithubを使用しているためGithubアカウントが必要です。Githubアカウントの作成手順については手順の中で解説しています。
OpenAI APIとGoogle Cloud Platformの利用料が発生します。料金については記事内で説明しています。
この記事の記載は他の記事の手順の記載を流用しています。記載にミスがあれば筆者までご連絡ください。
主な機能
主な機能はLINE上でChatGPTと会話ができる機能です。管理機能として過去の会話ログを消す機能と1日の利用回数の制限機能があります。それ以上の機能はありません。

利用料金
本システムを運用するための料金ですが、コード自体は無料です。利用するAPIやインフラが利用規模に応じて従量制の有料となります。
小規模運用であればほぼ無料で利用できます。無料を枠を超えたとしても大規模展開しなければ大した費用にはならないはずです。
2024年4月現在の料金は以下のようになっています。
OpenAI ChatGPT API
本コードでのチャットエンジンはリーズナブルなgpt-4o-miniが標準です。検索機能を裏で回している関係上、LineBotForGPTより燃費高めです。1トークンは日本語一文字ぐらいで概算してください。
入力0.150ドル/1Mトークン
出力0.600ドル/1Mトークン
管理画面から他のモデルも指定可能ですが料金はモデルに応じて変わってきます。
その他の料金は🔗ここを参照
Google Cloud Build
ソースコードを実行できるようにビルドする際に最低スペックのサーバーでビルドする基準の料金です。
無料枠に収まると思うのでほぼ気にする必要はないです。
$0.003/ビルド分。1 日あたり最初の 120 ビルド分は無料
その他の料金はここを参照
Google Cloud Run
ソースコードを実行するサーバーの利用料金です。
小規模利用であれば無料枠で運用できるかと思います。
VOICEVOXを使用する場合はもう一つ追加でサーバを使用します。
CPU:毎月最初の 180,000 vCPU 秒は無料
メモリ:毎月最初の 360,000 GiB 秒は無料
リクエスト:毎月 200 万リクエストは無料
その他の料金は🔗ここを参照
FireStore
会話ログを保存するためのデータベースです。
小規模利用であれば無料枠で運用できるかと思います。
ドキュメントの読み取り:50,000回/日まで無料
ドキュメントの書き込み:20,000回/日まで無料
ドキュメントの削除:20,000回/日まで無料
保存データ:1GBまで無料
その他の料金は🔗ここを参照
Artifact Registry
デプロイ時に利用される領域です。デプロイ履歴を放置しておくと蓄積されます。
少量だと問題ない程度の料金ですがため込むと高額請求されますのでこまめに削除してください。
その他の料金は🔗ここを参照
LINE
Botから自発的(Push)に送信しなければどれだけやり取りしても無料枠内で運用できる良心価格です。
料金は🔗ここを参照
設定
以下に設定手順を記載します。
GitHubの設定
まずはGithubという場所にソースコードをコピーするためにアカウントを作成するところから始めます。
🔗GitHub Japan | GitHubにアクセスし「GitHubに登録する」を押します。

登録情報を入力し「Crate accont」を押します。

メールにコードをが届くのでそれを入力します。

GitHubのURLコピー
筆者が作成したソースコードをあなたのGithubのアカウントにコピーします。
🔗Githubの筆者のソースコードが置いてあるページにアクセスします。
右上の「fork」から「Create a new fork」を選びます。

「Create fork」を押します。

以上でコードが自分のGithubアカウントにコピーされました。
Identity and Access Management APIの有効化
Googleが提供するサーバー上でスクリプトを実行するための作業を行っていきます。
Googleアカウントを作成済みでGoogle Cloud Platformの🔗コンソール画面にログインできることを前提とします。
画面中央上側の検索ボックスに「identity and access management」と入力し「Identity and Access Management(IAM) API」を選択します。

「有効にする」を押します。

Cloud Runの設定
次に実行環境の設定を行います。
Google Cloud Platform管理画面中央上側の検索ボックスに「cloud run」と入力し「Cloud Run」を選択します。

「サービスの作成」を選択します。

「ソースリポジトリから新しいリビジョンを断続的にデプロイする」を選択し「CLOUD BUILDの設定」を押します。

Githubの認証画面が表示される場合は「Username or email address」に自分のGitHubアカウント、「Password」にはGitHubのパスワードを入力し「Sign in」を押します。

リポジトリから「LineBotForGPTCore」を選択し、チェックをつけたら「接続」を押します。

「Dockerfile」を選択して「保存」を押します。

リージョンに「asia-northeast1(東京)」を選択、認証で「未承認の呼び出しを許可」を選択して「作成」を押します。

エラーが表示されますがそのまま待ちます。

状況が改善されない場合上部の「断続的デプロイを編集します」を選択します。CLOUD BUILDERの設定と同じ設定画面が出るので設定をやり直します。

デプロイが一向に進まない場合はCloud Buildの管理画面を確認します。

画面中央上側の検索ボックスに「cloud build」と入力し「Cloud Build」を選択してCloud Buildの管理画面を呼び出します。

画面左側にマウスカーソルをあてるとメニューが表示されるので「トリガー」を選択します。

「リージョン」で「グローバル(非リージョン)」を選択し一覧に項目があった場合「実行」を押します。一覧に何もない場合はCloud runの管理画面から「断続的デプロイを編集します」をやり直してください。

「トリガーの実行」を押します。
エラーメッセージが表示され、トリガーが実行できない場合はエラーメッセージの指示に従ってください。

たとえばこのようなエラーが表示されたら、エラーメッセージ内に書かれているURLにアクセスして対象のAPIを有効にしてからトリガーを再実行してください。

画面中央上側の検索ボックスに「cloud run」と入力し「Cloud Run」を選択しCloudRun画面を呼び出します。

「linebotforgpcore」を押します。

画面が以下の状態になっていることを確認します。なっていない場合はまだデプロイ中です。

以下の図の部分をクリックするとクリップボードにURLがコピーされます。
メモ帳か何かに貼り付けておいてください。LINEやOauth認証の設定時に使用します。

FireStoreAPIの設定
会話データと設定を保管しておくためにデータベースとして利用するFireStoreを設定していきます。
画面中央上部の検索に「firestore」を入力し「Firestore」を選択します。

APIが無効で自動で有効にする警告メッセージが表示されるので少し待ってってからブラウザの更新ボタンで画面を更新します。

「データベースを作成」を押します。

「続行」を押します。

「データーベースID」を「linebotforgptcore」にロケーションタイプを「リージョン」に、「リージョン」を「asia-northeast1(東京)」にして「データベースを作成」を押します。

この画面に飛ばされたらデータベースの作成は完了です。

LINEの設定
LINE Businessが利用できる前提で説明します。
🔗LINE Developersのトップページ右上より「コンソールにログイン」を押します。

画面左上のメニューに表示されている自身のアカウント名を選択します

「新規チャンネル作成」を選択します。

「Messaging API」を選択します。

項目を自分の情報に合わせて設定します。以下の画像は設定例です

全て設定終わったら契約に同意し「作成」を押します。

「OK」を押します。

同意書を読んで「同意する」を押します。

もう一度同意書を読んで「同意する」を押します。

「チャネル基本設定」が選ばれていることを確認し、画面を下にスクロールします。

図の部分をクリックするとクリップボードにチャネルシークレットの文字列が張り付きます。この文字列はボット設定の際に利用します。

「Messaging API設定」を選択します。

WebHook設定の「編集」を選択します。

Webhook URLにCloud Runの設定時にメモしておいたURLを入力します。そのあと更新を押します。

「Webhookの利用」をオンにします。

チャネルアクセストークンの「発行」を押し、図の部分をクリックするとクリップボードにトークンの文字列が張り付きます。この文字列はボット設定の際に利用します。

LINE公式アカウント機能/グループトーク・複数人トークへの参加を許可するの「編集」を選択します。

トークへの参加を「グループ・複数人トークへの参加を許可する」に設定します。

ページを戻ってLINE公式アカウント機能/応答メッセージの「編集」を選択します。

「応答メッセージ」をオフにします。

自分のLINEへの登録
自分のLINEアプリにボットのチャンネルを登録します。
先ほど開いた「Messaging API設定」にQRコードがあるのでこれをスマートフォンのLINEアプリでスキャンすることでボットのチャンネルが登録されます。

環境変数の設定
🔗Cloud Runの管理画面から対象のサービスを選択します。

上部から「新しいリビジョンの編集とデプロイ」を選択します。

「変数とシークレット」を押します。

環境変数の「変数を追加」を押して以下の項目を追加します。

OPENAI_API_KEY: OpenAIのAPIキーを入力してください。
CHANNEL_ACCESS_TOKEN:LINEで発行したチャネルアクセストークンを設定してください。
CHANNEL_SECRET:LINEで発行したチャンネルシークレットキーを設定してください。。
ADMIN_PASSWORD:WEBの管理画面のログインに使用する管理者パスワードです。このシステムはインターネットから誰でも触れるので、必ず複雑なパスワードを設定してください。
SECRET_KEY:内部的にデータを暗号化するときに使う文字列です。適当に文字を入れてください。複雑な文字列ほどよいです。
DATABASE_NAME:FireStoreで作成したデータベース名、つまり「linebotforgptcore」を入れてください。

一番下の「デプロイ」を押します。

アイコンがすべて緑になるまで待ちます。

ボットの設置は以上で完了です。
運用上の操作
本スクリプト利用にあたってのいくつか必要な操作を説明しておきます。
Botの設定変更
ブラウザのURL欄にメモしたURLの後に「/login」を追加して入力します。以下の画面が表示されるので環境変数に入れた管理者パスワードを入力して「submit」を押します。

以下は設定画面にある主な設定項目です。
BOT_NAME
ボットの名前を設定します。グループチャットの呼びかけの際に使用しますので呼びかけやすい名前にしてください。「,」区切りで複数名設定できます。
SYSTEM_PROMPT
ボットのキャラクター性を定義します。1000文字までを目安としてください。
GPT_MODEL
ボットが利用するChatGPTのバージョンを指定します。標準では「gpt-3.5-turbo」が設定されています。指定するモデル名は🔗ここを参照してください。
MAX_DAILY_USAGE
利用者一人当たりの最大使用回数を設定します。
GROUP_MAX_DAILY_USAGE
グループチャット1ルーム毎の最大使用回数を設定します。
設定がすんだら一番下までスクロールして「Save」を押します。

忘れてコマンド
本スクリプトではGoogleアカウント単位で会話がデータベースに保存されたままになります。次回アクセス時にも継続して会話が可能です。
会話中に「忘れて」あるいは「わすれて」を入力するとクイックリプライが表示されます。クイックリプライを押すと使用者の以前の会話データが削除されます。

ユーザーの全データ削除
管理画面の一番下にある「Reset All User Logs」を押すことで全ユーザーのデータが削除されます。「All user logs reset successfully」が表示されれば削除成功です。

最新版へアップデート
ソースコードは不具合が出たタイミングで見直しています。
Twitterやこのページで告知します。更新する際は以下のページを参考に更新をお願いします。
Githubへマージを行うと自動でGoogle Cloud Platformのデプロイが実行されます。デプロイをグローバルリージョンに変更していても自動実行されます。実行状態はCloud Buildの履歴画面から確認してください。
バージョンアップ後に管理画面からSAVEを忘れないでください。それでも動かない場合は設定値をいったんデフォルトに戻してください。
チェックシート
設定後に動かない際はここを確認してください。
デプロイが「generic::failed_precondition:due to quota restrictions, cannot run builds in this region」エラーで終了する。
Cloud Runのデプロイでリージョンキャパシティのエラーが出続ける場合、選択を東京リージョンに限定せず、他のリージョンを探してみてください。
レポジトリの紐づけが問題と表示されたらCloud Buildでのレポジトリ登録の手順を見直してください。
管理者画面にログインできない。
環境変数に設定しているパスワードを再度確認してください。
また、管理者パスワードは5回間違えると10分間ロックされます。
LINEの応答についてのトラブルシューティング
LINEからの応答がない場合は、以下の3つを確認してみてください。
環境変数の項目名と値を再確認する。環境変数名の前後に空白文字が入っていないか確認する。
LINE Developerで設定したWebhookのURLを確認してください。
管理画面での保存状況(SAVEが完了しているかどうか)を確認してください。
Cloud Runのログに怪しいログ(例えばERRORとかの文字列)が出力されていないかを確認してください。
まとめ
以前から作成してきたプログラムコードは機能が多すぎて初心者には設置手順が複雑だと感じました。そこで、このコードを作成しました。また、これから自分なりの機能を追加していきたいプログラマー向けにも適していると考えています。このコードが役立つと思ってくださり、利用していただければ幸いです。