単発応答から真の「会話記憶」へ

前回の朝食店チャットボット実装では、OpenAI(ChatGPT)をLINEのWebhookに接続することに成功しました。 当時は、客が一言話せばボットが一言返すという仕様でした。一見スマートに見えますが、よくテストすると致命的な欠点があることに気づきます:記憶を失うのです。

例: 客:「店主さん、卵焼き一つください。」 ボット:「かしこまりました!プレーン卵焼き一つ、合計30元です。他にご注文は?」 客:「それと大サイズのアイスミルクティーも追加で。」 ボット:「承知しました!大サイズアイスミルクティー20元です。他にご注文は?」 客:「以上で、合計いくら?」 ボット:「何を注文されましたか?

これが所謂「単一ターン会話(Single-turn conversation)」です。Webhookがメッセージを受信してOpenAIを呼び出す度に、OpenAIはそれを全く新しい客として扱い、直前の会話など全く覚えていません!

人材を代替できる真のAIカスタマーサポートを構築するには、ボットに「短期記憶(Short-term memory)」を持たせる必要があります。


🧠 AIに海馬体を追加:会話配列(Messages Array)

OpenAIに記憶を持たせる原理は驚くほどシンプルです:APIを呼び出す際、最新の発言だけを送るのではなく、過去の全ての会話履歴をパッケージ化して送信するのです。

OpenAIのAPI仕様では、リクエストとしてmessagesという配列を送信します:

const messages = [
  { role: "system", content: "あなたは朝食店の女主人です..." }, // システム設定(神視点)
  { role: "user", content: "卵焼き一つください" },         // 客の発言(履歴1)
  { role: "assistant", content: "かしこまりました、他にご注文は?" }, // AIの直前返答(履歴2)
  { role: "user", content: "アイスミルクティーも追加で" }         // 客の最新発言
];

この完全なmessages配列をOpenAIに送信すれば、AIは台本を読むように文脈を即座に理解し、完璧な返答を返してくれます!


🛠️ Vibe Coding実践:メモリによる会話一時保存

この記憶管理ロジックを手動で実装すると非常に複雑になります:各ユーザーのLine IDをKeyとして過去の会話を検索し、一定長さを超えたら古い記憶を削除する(Token制限超過防止のため)必要があります。

ここで最強の拡張機能を召喚します:Cursor + Vibe Prompt

【AI記憶カスタマーサポート Vibe Prompt】 Line BotのNode.jsサーバーを開発中で、カスタマーサポートチャットを処理しています。 以前のバージョンではAIが文脈を記憶できませんでした。会話記憶機能を追加するためリファクタリングが必要です。

以下の実装詳細に従ってください:

  1. グローバル変数const memoryStore = new Map()をメモリ一時保存領域として使用。ユーザーのlineUserIdをKeyとし、Valueはそのユーザーのmessages配列。
  2. 新規メッセージ受信時、まずmemoryStoreから履歴を取得。存在しなければSystem Promptを含む新規配列を初期化。
  3. ユーザ��の最新メッセージを配列に.push()し、OpenAIgpt-4o-miniに送信。
  4. OpenAIからの返答を受信後、AIの返答も同じ配列に.push()して保存。
  5. 【重要機制】配列が無限に成長してメモリ不足やToken超過を防ぐため、「自動トリミング」機能を実装:ユーザーの会話履歴が10発言を超えた場合(配列長>11、system含む)、最も古い一問一答を削除(splice)。
  6. 完全なNode.js Expressコードを提供し、明確な日本語コメントを追加。

この呪文を送信すれば、AIは瞬時にMapデータ構造とArray.spliceロジックを含む完璧なコードを生成します。

このシステムの威力:マルチタスクカスタマーサポート

LINE Botに記憶機能が追加されると、その商業的価値は倍増します:

  • 連続データ収集: 「お名前を教えてください?」➡️「林様、では電話番号は?」➡️「承知しました、林様、電話0912、ご予約希望日時は?」(客を段階的にフォーム完成へ誘導)。
  • 専門技術サポート: 「画面が起動しません。」➡️ AIが3ステップを指導 ➡️「2番目のステップで詰まり、ランプが点灯しません。」➡️ AIはステップ2に特化して深掘り解決。
  • 高没入型コンパニオンボット: タロット占い師、心理カウンセリングAI、さらにはバーチャルガールフレンドまで、この強力な「メモリ管理機構」の上に構築されます。

🚨 記憶システムの高度な考慮点:サーバー再起動時

鋭い方は既にお気づきでしょうが、上記Promptでは会話履歴をnew Map()に保存しています。これは「インメモリ一時保存(In-memory storage)」と呼ばれます。

開発テスト時には非常に高速で便利です。しかし致命的な弱点があります:サーバーがクラッシュしたり、Vercel/Renderでプログラムを再デプロイすると、このmemoryStoreは瞬時に消去され、全てのボットが再び「集団記憶喪失」状態になります。

有料案件で月額3万円の高級カスタマーサポートシステムを構築する場合、このような事態は許容できません。 真の企業級アーキテクチャでは、このmessages配列をJSON形式に変換し、**Redis(メモリデータベース)Supabase(PostgreSQL)**に永続保存します。

しかしビジネスモデルの迅速な検証(MVP)段階では、Node.jsのMap配列で実装するだけでも、クライアントを驚かせ、案件を獲得するには十分です!朝食店のおばさんを改造する準備はできましたか?次章では更に強力なLINEの隠し武器:LIFFウェブアプリを紹介します!

章のまとめ

  • コアコンセプトと原理を理解
  • 実装方法とテクニックを習得
  • 一般的な問題と解決策に精通
  • 実際のプロジェクトに適用可能

さらに読む

  • 公式ドキュメントとAPIリファレンス
  • GitHubのオープンソース例
  • 技術書とオンラインコース
  • コミュニティディスカッションと技術ブログ

会員限定無料チュートリアル

このチャプターは登録会員限定の無料コンテンツです!ログインまたは登録してすぐにロックを解除してください。

今すぐログイン / 登録