
LINEに「疲れた」と話しかけたら、気の利いた言葉を返してくれる――そんな“気の利く執事ボット”を作ってみませんか?
本記事では、前回作成したLINE×Googleカレンダー連携ボットに「ChatGPTによる自然な返答」を加え、より賢く・柔軟に返してくれるAI執事へと進化させていきます。予定の取得だけでなく、言葉の意図を読み取って対応を変える“文脈理解型ボット”の作り方を、実装付きで解説します。

ChatGPT連携の前に知っておきたいこと
この章では、ChatGPT APIをLINEボットに組み込む前提として知っておくべき基本知識を整理します。Web上で利用できるChatGPTと、プログラムから呼び出すChatGPT APIは異なるサービスであり、利用形態や料金体系にも明確な違いがあります。事前にこの仕組みを理解しておくことで、API連携時の戸惑いや誤解を防ぐことができます。
ChatGPT APIはWeb版とは別物
多くの人が利用しているchat.openai.comのChatGPTは、OpenAIが提供するWebベースのチャットUIです。一方で、APIとして提供されているChatGPT APIは、FlaskなどのプログラムからHTTP経由で呼び出す専用インターフェースです。これらは同じGPTモデルを使っているものの、契約体系や使い方がまったく異なります。
たとえば、chat.openai.comでChatGPT Plus(有料プラン)に加入していても、それはWeb版の優先アクセス権を得ているだけであり、APIを使用する権利は一切含まれていません。API経由でChatGPTを利用したい場合は、別途APIキーを取得し、個別に課金設定を行う必要があります。
APIの利用には課金が必要です
ChatGPT APIは無料では利用できません。初めてAPIを使う場合でも、最低5ドル分のクレジットを事前に購入する必要があります。これは「月額制」ではなく「使った分だけ引かれる従量課金制」で、利用量に応じて自動的にクレジットが消費されていく仕組みです。
料金はモデルによって異なりますが、たとえば gpt-3.5-turbo を使った場合、1回のやりとりに発生するコストは数円〜数十円程度です。ただし、LINEボットなどで大量のやりとりが発生した場合には、あっという間に残高が尽きてしまう可能性があるため、テスト中は頻繁なアクセスを避けるなどの工夫が必要です。
また、クレジット購入時に「自動チャージ(Automatic recharge)」が有効になっていると、残高が減るたびに自動で課金されてしまうため、初回はこの設定をOFFにしておくことを強くおすすめします。
ChatGPT連携の準備をしよう
まず最初に、この記事で紹介するChatGPT連携には、OpenAIのAPIを利用する都合上「実費」が発生します。これはChatGPT本体(chat.openai.com)とは別で、アプリやLINEボットなどに組み込むための「開発者向けAPI」の利用となるため、使った分だけ課金される従量制が適用されます。
ChatGPT APIを利用するには、まず最低5ドル分のクレジットを購入してアカウントを有効化する必要があります。ただし、最初は利用制限(Usage Tier 1)がかかっており、一定以上の利用実績(例:累計50ドル支払い)を積み上げることで、月ごとの利用上限を引き上げることができます。
OpenAI APIの料金体系は、日本国内の一般的なサービスとは異なる独自形式(ドル建て・従量課金制)を採用しています。最新の料金条件や利用規約については、必ず公式サイトを直接ご確認ください。本記事は執筆時点の情報に基づいており、今後変更される可能性もあります。最新情報は公式発表を必ずご確認ください。
つまり、誰でも自由に使える無料のChatGPTとは異なり、「自分のアプリでChatGPTを動かす」には開発者として正式に課金ユーザーになる必要がある、という点を理解しておくことが重要です。
この費用はあなたのLINEボットがどれだけ返答するか、どれだけ複雑な応答をするかによって変動します。大規模に展開しない限り月数百円〜数千円程度に収まるケースが多いですが、無料では使えません。それでも、自分だけのAI執事を作るという体験には、十分に見合う価値があります。
ChatGPT APIを使うには、まずAPIキーの取得と、Pythonからの接続準備が必要です。安全な運用のためにも、APIキーの扱いには注意が必要です。
OpenAIのAPIキーを取得する
OpenAIのAPIを利用するためには、事前にAPIキーを発行する必要があります。現在のUIではメニュー上に表示されないため、専用のページに直接アクセスするのが確実です。
- 以下のリンクから APIキー管理ページ にアクセスします。
- ログインを求められた場合は、OpenAIアカウントでログインします。
(ログイン後、APIキー管理ページ にアクセスします。) - 「API keys」ページが表示されたら、画面右上の 「+ Create new secret key」 をクリックします。
- 任意の名前を入力し、「Create secret key」ボタンを押します(例:my-ai-butler や chatgpt-key-dev など)。
- 表示されたAPIキーをコピーし、必ず安全な場所に保存してください(再表示不可)。
【補足】APIキー発行前に表示される初回セットアップ画面について
OpenAIに初めてログインした直後、いきなりAPIキーが発行できるわけではありません。まずは以下のような「初回セットアップ画面」で、いくつかの入力・選択が求められます。

入力項目と正しい設定例
入力項目 | 入力例 | 補足説明 |
---|---|---|
Organization name | BeproTools My AI Project | 英数字とスペースのみ可。 ハイフン(-)や記号は使用不可。 |
What best describes you? | Individual | 属性の選択。特に深く考える必要なし。 |
Initial credit purchase | $5 | 最低クレジット額。まずは5ドルでOK。 |
Automatic recharge | チェックを外す | 自動課金を防ぎたい場合は必ずOFF。 |
When credit goes below / Bring credit back up to | 未入力(空欄) | 自動課金を使わない場合は空欄で問題なし。 |

以上を完了すると、APIキーを発行できる画面に進むことができます。エラーなく進めるために、特にOrganization名の形式や自動課金のチェック設定には注意してください。
クレジット残高はどこで確認できる?
現在のAPIクレジット残高は、OpenAIのBillingページからいつでも確認できます。以下の手順でアクセスしてください。
- OpenAI Billingページにアクセスします。
- 「Usage this month(今月の使用量)」や「Credit balance(クレジット残高)」という表示が確認できます。

「Credit balance」の欄に、現在の残りクレジット(例:$4.87)が表示されます。これが0になると、APIは使えなくなり insufficient_quota エラーが発生します。
なお、使用履歴の詳細を確認したい場合は、同じ画面内にある「Usage」タブから日別・API別の消費量をチェックすることも可能です。
さらに詳しい使用履歴を確認したい場合
Billingページでは「現在のクレジット残高(例:$5.00)」しか表示されません。
より細かい使用状況(いつどのくらい使ったか)を確認したい場合は、左メニューにある「Usage」画面を開いてください。
以下のリンクから直接アクセスすることも可能です。
https://platform.openai.com/account/usage

Usage画面では、日別の消費額、モデルごとの利用量、月間合計などをグラフで確認できます。Botの利用頻度が増えたときなどの分析にも便利です。
ChatGPTとLINEの設定情報を安全に管理する
APIキーやアクセストークンなどの機密情報をコード内に直接書いてしまうのは非常に危険です。セキュリティと保守性を両立させるために、.envファイルを使って外部ファイルに分離し、環境変数として読み込む構成を取りましょう。
ChatGPT APIを使うためのモジュールを事前にインストールする
今回のBotは、LINEからのメッセージをChatGPT(gpt-3.5-turbo)に渡して返答を得る構成になっています。そのため、OpenAIのAPIをプログラムから扱うための公式モジュール openai が必要です。
また、APIキーなどを安全に読み込むための python-dotenv、Webアプリを動かす flask、LINE Messaging APIを扱う line-bot-sdk も必要になります。
以下のコマンドで、これらのモジュールを仮想環境に一括インストールしておきましょう。
pip install openai python-dotenv flask line-bot-sdk
これらのインストールが完了していない状態で python3 app.py を実行すると、以下のようなエラーが確実に出ます。
ModuleNotFoundError: No module named 'openai'
こうしたエラーを防ぐためにも、プログラム実行前に必要なモジュールを明確に導入するのが大前提です。
.envファイルにキー情報をまとめる
.envファイルは最初から存在するものではありません。環境変数を安全に管理するためには、自分で新規に .env ファイルを作成し、必要なキー情報を記述する必要があります。
ターミナル上で作成する場合は、以下のコマンドを実行してください。
vi .env
内容の記述後は、ESCキー → :wq → Enter の順に入力して保存します。
ChatGPTやLINEのAPIを利用するには、それぞれに対して固有の認証情報が必要です。これらをコード内にベタ書きしてしまうと、GitHub等にうっかり公開してしまった場合に不正アクセスを招く恐れがあります。 「.env」 ファイルを用意し、すべてのキー情報を集約しておきましょう。
.envに設定する項目一覧
ChatGPTとLINE Botを連携させるために、.envファイルに記述しておくべき代表的な設定項目を以下の表にまとめました。全て必須の情報です。
取得する情報 | 用途 | 取得場所 |
---|---|---|
LINEチャネルアクセストークン | LINE Bot の応答に使用 | LINE Developers「Messaging API」設定画面 |
LINEチャネルシークレット | Webhookの検証に使用 | LINE Developers「チャネル基本設定」 |
OpenAI APIキー | ChatGPTと接続するために必要 | https://platform.openai.com/account/api-keys |
GoogleカレンダーID | 予定を取得する対象カレンダーの指定 | Googleカレンダーの「設定と共有」→ 「カレンダーの統合」 |
GoogleサービスアカウントJSONパス | Google Calendar API 認証に必要な秘密鍵ファイルのパス | Google Cloud Console「IAMと管理」→「サービスアカウント」からJSONを作成・保存 |
これらの値は、OpenAIのAPI設定画面およびLINE Developersのチャネル基本設定画面から取得できます。文字列はすべて半角英数字で、コピーミスを防ぐためにダブルクリックでコピーするなど丁寧な作業を心がけましょう。
ファイル名はそのまま「.env」でOKです。ファイルの中身は以下のように記述します。
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
LINE_CHANNEL_ACCESS_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXX
LINE_CHANNEL_SECRET=YYYYYYYYYYYYYYYYYYYYYYYYYYYYY
GOOGLE_CALENDAR_ID=ZZZZZZZZZZZZZZZZZZZZZZZZZZ
GOOGLE_SERVICE_ACCOUNT_JSON=GOOGLE_SERVICE_ACCOUNT_JSON_FilePath
このように記述しておけば、Python側からは os.getenv() を通じて環境変数として読み込むことが可能になります。たとえば以下のような形で読み取ります。
import os
from dotenv import load_dotenv
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
line_bot_api = LineBotApi(os.getenv("LINE_CHANNEL_ACCESS_TOKEN"))
handler = WebhookHandler(os.getenv("LINE_CHANNEL_SECRET"))
この構成にしておくことで、環境ごとに設定値を切り替えたり、キーが漏洩するリスクを大幅に軽減することができます。
※重要:この記事ではLINE SDK v3構文で実装しています
2024年にリリースされた line-bot-sdk-python v3 により、従来の LineBotApi や TextSendMessage などのクラスは非推奨(Deprecated)となりました。今後のバージョンで削除される可能性が高いため、この記事では初めから v3構文に完全準拠した実装を紹介しています。
すでにネット上にはv2構文の解説も多くありますが、これから新しくBotを作る場合は、v3構文で開発することが現実的かつ安全な選択です。
コード構造やimport文が従来と大きく異なりますが、本記事では一つひとつ解説しながら進めていきます。
.envファイルは、プログラム内で使う「キーと値」のペア(例:APIキーやパスワードなど)を外部にまとめて管理するためのファイルです。これにより、プログラム本体に直接書き込まずに、設定情報を一元化できます。この考え方は、プログラミング言語によって呼び方は違っても、幅広い開発現場で当たり前に使われています。ファイル設計を効率化し、セキュリティ向上にも役立つ基本的な仕組みです。
.envファイルをGit管理から除外する
もしGitを使ってコードを管理している場合、 .env ファイルをそのままコミットしてしまうのは非常に危険です。APIキーやシークレット情報が含まれているため、リモートリポジトリに流出すると重大なセキュリティ事故に繋がります。
そのため、 .gitignore に .env を記載し、Gitの管理対象から除外しておくのが基本ルールです。
echo ".env" >> .gitignore
上記コマンドを実行すると、 .gitignore ファイルに .env の除外ルールが追加されます。これにより、以後Gitは .envファイルを追跡しません。
※すでに .env を一度でもGitでコミットしてしまっている場合は、履歴から削除する必要があります。その場合は git rm --cached .env を実行し、再コミットしてください。
.envファイルは、いわば「クレジットカード番号をメモしておくようなもの」です。もしこのファイルを誤ってGitなどにアップロードしてしまうと、APIキーやパスワードといった重要な情報が外部に漏れてしまう危険性があります。こうしたリスクを防ぐため、.envファイルは必ずGitの管理対象から除外しておく必要があります。
ChatGPT応答をLINEで返すボットの実装
このセクションでは、LINEで受け取ったメッセージをChatGPTに渡し、その応答を再びLINEで返信する仕組みを構築します。LINE SDKはv3構文、OpenAIはv1.0以降の新構文を使用しており、Flaskアプリはポート8000で起動します。
ChatGPTに投げる関数を定義する
ChatGPTと通信するには、OpenAI SDKのChat Completionsエンドポイントを使います。OpenAI v1.0構文では OpenAI() を通じてAPIクライアントを初期化し、そのインスタンスからメソッドを呼び出す形に変わっています。
from openai import OpenAI
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def askChatgpt(user_message):
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": user_message}]
)
return response.choices[0].message.content
出力例:
askChatgpt("こんにちは")
→ "こんにちは!何かお手伝いできることはありますか?"
ユーザー入力をChatGPTに渡す
LINEで受信したユーザーのテキストメッセージは、LINE SDK v3構文で event.message.text として取得できます。この内容をそのまま ask_chatgpt() に渡すことで、ChatGPTから応答を得ることができます。
@handler.add(MessageEvent, message=TextMessageContent)
def handleMessage(event):
user_message = event.message.text
reply_text = askChatgpt(user_message)
ChatGPTの返答をLINEに返信する
OpenAIの返答をLINEに返信するには、LINE SDK v3で提供される MessagingApi を使い、 ReplyMessageRequest によってメッセージを送信します。以前の line_bot_api.reply_message() 構文はv3では廃止されているため、注意が必要です。
with ApiClient(configuration) as api_client:
messaging_api = MessagingApi(api_client)
messaging_api.reply_message(
ReplyMessageRequest(
reply_token=event.reply_token,
messages=[TextMessage(text=reply_text)]
)
)
完成版 app.py(コメント付き)
ここまでのコードをすべて統合した完成版が以下です。Flaskアプリはポート8000で起動するようになっており、LINE Developers のWebhook URLもそれに合わせて設定する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
from flask import Flask, request, abort from linebot.v3.messaging import MessagingApi, Configuration, ApiClient from linebot.v3.webhook import WebhookHandler from linebot.v3.webhooks import MessageEvent, TextMessageContent from linebot.v3.messaging.models import ReplyMessageRequest, TextMessage from dotenv import load_dotenv from openai import OpenAI import os from datetime import datetime from google.oauth2 import service_account from googleapiclient.discovery import build # .envファイル読み込み load_dotenv() # 初期化 app = Flask(__name__) client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) configuration = Configuration(access_token=os.getenv("LINE_CHANNEL_ACCESS_TOKEN")) handler = WebhookHandler(os.getenv("LINE_CHANNEL_SECRET")) # 意図分類 def classifyIntent(user_message): user_message = user_message.lower() if "予定" in user_message or "スケジュール" in user_message: return "schedule" elif "天気" in user_message: return "weather" elif "やる気" in user_message or "疲れた" in user_message: return "mental" else: return "general" # 今日の予定取得 def getTodaySchedule(): print("🟢 Google Calendar API 呼び出し開始") credentials_path = os.getenv("GOOGLE_SERVICE_ACCOUNT_JSON") print("🔑 認証ファイルパス:", credentials_path) if not credentials_path: raise ValueError("GOOGLE_SERVICE_ACCOUNT_JSON が未設定です") credentials = service_account.Credentials.from_service_account_file( credentials_path, scopes=["https://www.googleapis.com/auth/calendar.readonly"] ) service = build("calendar", "v3", credentials=credentials) now = datetime.utcnow() start_of_day = datetime(now.year, now.month, now.day).isoformat() + "Z" end_of_day = datetime(now.year, now.month, now.day, 23, 59, 59).isoformat() + "Z" print("🕐 検索範囲:", start_of_day, "〜", end_of_day) events_result = service.events().list( calendarId=os.getenv("GOOGLE_CALENDAR_ID"), timeMin=start_of_day, timeMax=end_of_day, singleEvents=True, orderBy="startTime" ).execute() events = events_result.get("items", []) print("📅 取得件数:", len(events)) if not events: return "今日の予定はありません。" result = "今日の予定はこちらです:\n" for event in events: start = event["start"].get("dateTime", event["start"].get("date")) result += f"・{start}:{event['summary']}\n" return result # ChatGPT用プロンプト生成 def generatePrompt(intent, user_message): if intent == "schedule": system_prompt = "あなたは予定管理を手伝うアシスタントです。" elif intent == "weather": system_prompt = "あなたは天気情報に詳しいアシスタントです。" elif intent == "mental": system_prompt = "あなたは気持ちに寄り添う共感的なカウンセラーです。" else: system_prompt = "あなたは親切で柔軟なAIアシスタントです。" return [ {"role": "system", "content": system_prompt}, {"role": "user", "content": user_message} ] # ChatGPT応答処理 def askChatgpt(user_message): intent = classifyIntent(user_message) if intent == "schedule": return getTodaySchedule() messages = generatePrompt(intent, user_message) try: response = client.chat.completions.create( model="gpt-3.5-turbo", messages=messages ) return response.choices[0].message.content except Exception as e: print("❌ ChatGPT応答エラー:", e) return "現在AI応答が制限されています。スケジュール確認のみ対応中です。" # LINE Webhook受信 @app.route("/callback", methods=["POST"]) def callback(): signature = request.headers.get("X-Line-Signature", "") body = request.get_data(as_text=True) try: handler.handle(body, signature) except Exception as e: print("❌ Webhook handling failed:", e) abort(400) return "OK" # メッセージ受信時の応答処理 @handler.add(MessageEvent, message=TextMessageContent) def handleMessage(event): user_message = event.message.text print("✅ メッセージイベント発火! 📩", user_message) try: reply_text = askChatgpt(user_message) print("🧠 応答内容:", reply_text) except Exception as e: reply_text = "現在応答できません。" print("❌ 処理エラー:", e) with ApiClient(configuration) as api_client: messaging_api = MessagingApi(api_client) messaging_api.reply_message( ReplyMessageRequest( reply_token=event.reply_token, messages=[TextMessage(text=reply_text)] ) ) # サーバー起動 if __name__ == "__main__": app.run(host="0.0.0.0", port=5000) |
次のステップに進む前に:LINEとChatGPTが正しく連携しているか確認
ここから先の内容(意図分類やAI執事への拡張)は、LINEボットがすでにChatGPTと連携済みで、正しく応答できていることを前提としています。
ステップ①:Webhook URLの疎通確認
まず、LINE Developersの設定画面でWebhook URLを入力した後、「検証」ボタンをクリックしてください。

「成功」または「200 OK」 が返ってくれば、LINEがFlaskアプリにリクエストを正常に送れていることを意味します。

ステップ②:メッセージ送信とChatGPT応答の動作確認
- Flaskアプリが ポート8000 で起動している
- .env のAPIキーやトークンが正しく読み込まれている
- LINEで「こんにちは」「今日の予定」などのメッセージを送信する
- ChatGPTから自然な返答がLINEで届く
- ターミナルに "POST /callback" のログが出ていて エラーがない

これらがすべて確認できていれば、次のセクション「🧠 意図を読み取るAI執事に進化させる」に進んで問題ありません。
意図を読み取るAI執事に進化させる
ここからは、ChatGPTの応答をただの「オウム返し」にせず、「ユーザーの目的や意図を理解して応答を切り替える」本物の執事型アプリに進化させていきます。分類ロジックとプロンプト操作を組み合わせて、よりスマートな対応を目指します。
入力文の意図を判定する分類処理を設計
まずは、ユーザーから送られてきた文章が「何を意図しているか」を判断する処理を設計します。今回の例では、「予定を知りたい」「天気を聞いている」「悩みを相談している」といった大まかな分類を想定します。
def classifyIntent(text):
text = text.lower()
if "予定" in text or "スケジュール" in text:
return "schedule"
elif "天気" in text:
return "weather"
elif "やる気" in text or "疲れた" in text:
return "mental"
else:
return "general"
出力例:
classifyIntent("明日の予定を教えて") → 'schedule'
classifyIntent("今日の天気は?") → 'weather'
なお、カスタマイズを深めれば、さらに高性能なボットに進化させることも可能です。ただしそのためには、「ユーザーがどんな場面でどんな言葉を使うか」を体系的に分析し、必要なキーワードや表現パターンを設計するスキルが求められます。この領域は「プロンプトエンジニアリング」と呼ばれ、実際にプロとして活動するエンジニアには月額100万円以上の案件も存在するほどです。この記事ではテンプレート型の基本形に留め、実装まで進めていきます。
意図に応じてChatGPTプロンプトを切り替える
分類された意図に応じて、ChatGPTに渡すプロンプトの内容を変更します。こうすることで、「予定について答えて」「天気について説明して」など、より適切な文脈を持たせた応答が可能になります。
def generatePrompt(intent, user_message):
if intent == "schedule":
system_prompt = "あなたは予定管理を手伝うアシスタントです。"
elif intent == "weather":
system_prompt = "あなたは天気情報に詳しいアシスタントです。"
elif intent == "mental":
system_prompt = "あなたは気持ちに寄り添う共感的なカウンセラーです。"
else:
system_prompt = "あなたは親切で柔軟なAIアシスタントです。"
return [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_message}
]
出力例:
generatePrompt("weather", "今日の天気は?")
→ [{"role": "system", "content": "あなたは天気情報に詳しいアシスタントです。"},
{"role": "user", "content": "今日の天気は?"}]
条件分岐に応じてAPI呼び出しを拡張する(予定、ToDo、天気など)
意図分類に応じて、ChatGPTに直接聞くだけでなく「外部APIを叩いて回答内容を補完する」といった構造に拡張していきます。以下は例として「予定」リクエスト時には Google カレンダーAPIから予定情報を取得し、ChatGPTに渡す構成の一部です。
if intent == "schedule":
events = get_today_events_from_google_calendar()
user_message = f"今日の予定はこれです:{events}。内容をわかりやすく説明してください。"
こうして、ChatGPTは「会話の文脈」と「実データ(予定、天気、タスクなど)」を組み合わせて、より高度なAI執事として機能するようになります。
実行してみよう!使用例と動作確認
ここでは、実際にLINEにメッセージを送ってみたときのAI執事の返答例を紹介します。分類処理とプロンプト切り替えが適切に機能していれば、ChatGPTがただ反応するだけでなく、「意図を汲み取って」より適切な返答を返してくれるはずです。
「明日の予定は?」と聞いた時の応答
ユーザーが予定に関するメッセージを送った場合、意図分類で schedule と判定され、Googleカレンダーなどから取得した予定情報をChatGPTに渡す構成になります。
User → 明日の予定は?
Bot → 明日の予定は以下の通りです。
・10:00〜 技術MTG(Google Meet)
・13:30〜 資料提出締切
・18:00〜 同僚との飲み会
何か変更したいものがあれば教えてくださいね。
「最近やる気が出ない」と送った時の返答
気分に関する相談は mental と分類され、ChatGPTには「共感的なカウンセラー」として応答するようプロンプトが渡されます。
User → 最近やる気が出ないんだよね…
Bot → お疲れ様です。日々頑張っている証拠ですよ。
少し休んだり、深呼吸してリフレッシュするのも大切です。
今日は自分を甘やかす日にしてみませんか?
「今日の天気は?」などへの応用力
天気に関するメッセージは weather と分類され、必要に応じて外部APIを活用して補完情報を加えながら応答させることができます。
User → 今日の天気は?
Bot → 今日の東京の天気は「晴れ時々曇り」、最高気温は27℃の予報です。
夜は少し冷え込むかもしれないので、薄手の羽織りを持って出かけると安心です。
このように、AI執事はユーザーの言葉を単純にオウム返しするのではなく、「何を求めているか」を理解したうえで最適な情報や言葉を届けてくれるようになります。
安全な運用と今後の展望
AI執事ボットがユーザーの実生活に関わるようになると、セキュリティや暴走対策、障害時の対応も考慮しなければなりません。ここでは、今後の運用に向けたセーフティ対策と拡張可能性について解説します。
必要に応じて、フィルターやルールベースの制限処理を段階的に導入してください。
エラーハンドリングとログの追加
運用を開始すると、想定外のエラーが必ず発生します。システムが落ちたり、応答が返らなくなることを避けるために、try-except構文を導入したエラーハンドリングと、簡易的なログ出力を行っておきましょう。
try:
reply_text = askChatgpt(user_message)
except Exception as e:
reply_text = "申し訳ありません。現在応答できない状況です。"
print("エラー:", e)
また、ログは print() ベースでも構いませんが、将来的には logger を使ったファイル記録に移行するのが望ましいです。
今後の拡張候補(音声対応、Slack連携など)
AI執事の可能性は、LINEチャットにとどまりません。今後の拡張先として以下のような構想が考えられます。
拡張対象 | 概要 | 技術的な方向性 |
---|---|---|
音声応答 | LINE通話やスピーカーとの連携で、音声でのやり取りを実現 | Google Speech API, Whisper, audio出力 |
Slack対応 | Slack Botとして組み込み、業務の自動応答や通知に応用 | Slack Events API, Flask with Bolt |
予定登録・更新 | Googleカレンダーへの予定追加や編集もボット側で処理 | Google Calendar API 書き込み操作 |
このような拡張を通じて、AI執事は「話しかけるだけで生活が整う仕組み」として、より現実的で便利な存在へと成長させていけます。
この記事のまとめ
この記事では、ChatGPTとLINEを連携させたAI執事ボットの構築手順を、実装から応用まで段階的に解説しました。Python・Flask・LINE Messaging API・OpenAI APIを組み合わせることで、生活に役立つ自動応答ツールを自作する力を身につけることができます。
- ChatGPT APIの取得・課金設定・APIキー管理方法を理解した
- Flaskアプリを使ってLINEからのWebhookを受け取り、ChatGPTの応答を返す構成を構築した
- .envファイルによる安全なキー管理と、gitignoreによる漏洩防止を学んだ
- メッセージ内容の分類処理とプロンプト切り替えにより、AI執事らしい「意図の汲み取り」ができるようにした
- 今後の拡張に向けたセキュリティ対策・ログ処理・API統合案も検討した
この取り組みは、単なるLINE Bot開発を超えて「自分自身のために動く、生活のOSを作る」という考え方に繋がります。記事を参考に、ぜひあなた自身のAI執事をカスタマイズ・拡張してみてください。