本記事では、「あなたのことを知っている、あなただけのチャットボット」 を作るステップへ進みましょう。

今回目指すのは、ユーザーごとに「記憶」を蓄積し、それを会話に活かせるチャットボットです。 たとえば、

「あなたは前に干し芋が好きと言っていましたね。あ、それにイチゴショートも」

「あなたの好きな温泉でゆっくりしてくださいね」

このように、「会話をすればするほど、あなたのことを覚えてくれるAI」を目指します。

さて、「記憶する」といっても、AIチャットボットの記憶には2つのレイヤーがあります。

短期記憶:会話セッション中だけ一時的に保持される情報(Difyの通常セッション)

長期記憶:セッションを超えて何度でも呼び出せる、永続的な“ユーザーの履歴や特徴”(外部DBに保存)

多くのAIチャットボットは短期記憶の範囲に留まりますが、本記事では長期記憶にフォーカスします。Supabaseと連携し、「ずっとあなたを覚えていてくれるチャットボット」の設計・実装方法を詳しく解説します。

<aside> 💡

この記事を見てくださったあなたは、すでにSupabaseによる「ユーザー認証」や「RLS(行レベルセキュリティ)」の仕組みを理解しているとは思いますが、

もし、まだの場合、もしくは復習したい場合は、次の記事を参考にしてください。

前編:Supabase RLS 実践ガイド―認証とアクセス制御の考察

後編:Supabase RLS 実践ガイド――認証とアクセス制御の考察

</aside>

<aside>

1. ゴール:Difyチャットに“記憶力”を持たせる

</aside>

まずは今回作成するアプリの全体図を以下に示します。

image.png

ではこのアプリがどのような働きをするのかというと、

次のようなやりとりが行われます(図のあとに詳細を説明します)。

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を組み合わせて実現する「記憶するチャットボット」の基本的な流れ(フロー)を表しています。

  1. ユーザー認証の流れ