本記事では、「あなたのことを知っている、あなただけのチャットボット」 を作るステップへ進みましょう。
今回目指すのは、ユーザーごとに「記憶」を蓄積し、それを会話に活かせるチャットボットです。 たとえば、
「あなたは前に干し芋が好きと言っていましたね。あ、それにイチゴショートも」
「あなたの好きな温泉でゆっくりしてくださいね」
このように、「会話をすればするほど、あなたのことを覚えてくれるAI」を目指します。
さて、「記憶する」といっても、AIチャットボットの記憶には2つのレイヤーがあります。
短期記憶:会話セッション中だけ一時的に保持される情報(Difyの通常セッション)
長期記憶:セッションを超えて何度でも呼び出せる、永続的な“ユーザーの履歴や特徴”(外部DBに保存)
多くのAIチャットボットは短期記憶の範囲に留まりますが、本記事では長期記憶にフォーカスします。Supabaseと連携し、「ずっとあなたを覚えていてくれるチャットボット」の設計・実装方法を詳しく解説します。
<aside> 💡
この記事を見てくださったあなたは、すでにSupabaseによる「ユーザー認証」や「RLS(行レベルセキュリティ)」の仕組みを理解しているとは思いますが、
もし、まだの場合、もしくは復習したい場合は、次の記事を参考にしてください。
前編:Supabase RLS 実践ガイド―認証とアクセス制御の考察
後編:Supabase RLS 実践ガイド――認証とアクセス制御の考察
</aside>
<aside>
</aside>
まずは今回作成するアプリの全体図を以下に示します。

ではこのアプリがどのような働きをするのかというと、
次のようなやりとりが行われます(図のあとに詳細を説明します)。
sequenceDiagram
participant User as ユーザー
participant Dify as Dify
participant LLM as LLM
participant Supabase as Supabase(DB)
User->>Dify: (1)メッセージ送信
Dify->>Supabase: (2) ユーザー情報送信(メール/パスワード)
Note right of Supabase: 認証処理
Supabase-->>Dify: (3) 認証JWTデータ返却
Dify->>Supabase: (4) ユーザー情報取得(JWT付要求)
Note right of Supabase: データ処理
Supabase-->>Dify: (5) 記憶データ返却
Dify->>LLM: (6) プロンプト+メモリ付き入力
Note right of LLM: LLM処理(構造化)
LLM-->>Dify: (7) 構造化出力(JSON)
Note right of Dify: 記憶すべきか判定
Dify->>Supabase: (8) 必要に応じて記憶データ保存
Dify-->>User: (9) 応答返却
この図(シーケンス図)は、DifyとSupabase、そしてLLMを組み合わせて実現する「記憶するチャットボット」の基本的な流れ(フロー)を表しています。