AIが会話を覚えてくれる!n8nの「Central Memory」アーキテクチャ入門

AIが会話を覚えてくれる!n8nの「Central Memory」アーキテクチャ入門

正規化とハイドレーションで「AI健忘症」を解決しよう

🤖 AIが会話を覚えてくれない問題
エテ(無敗詠天)

ラン!ちょっと聞いてよ!n8nでAIチャットボット作ったのに、会話を全然覚えてくれないの!

ラン(米之ラン)

あちゃー...それ、よくある「AI健忘症」ってやつですね。

エテ

健忘症?AIが記憶喪失ってこと?昨日「名前は田中です」って伝えたのに、今日話しかけたら「お名前を教えてください」って言われたのよ!

ラン

はい、まさにその状態ですね。実は、LLMって本質的に「ステートレス」なんです。APIリクエストが終わるたびに、記憶がリセットされてしまうんですよ。

※ステートレスとは、システムが過去のやり取りの状態を保持せず、毎回「初めまして」の状態から処理を始める設計のことです。

エテ

じゃあ、私がせっかく「WhatsApp用」と「Slack用」でそれぞれメモリ機能つけたのに、意味なかったってこと...?

ラン

(やっぱりそうなってましたか...)それ、「Per-flow State」っていう設計で、残念ながら限界があるんです。WhatsAppで話した内容をSlackのエージェントは知らないし、セッションが切れたら情報が消えてしまうことも多いんですよ。

エテ

なんとかしなさいよ!お客様に同じこと何度も聞くAIなんて、使い物にならないわ!

ラン

大丈夫です、解決策があります。「Central Memory(中央共有メモリ)」というアーキテクチャを使えば、AIがちゃんと会話を覚えてくれるようになりますよ。

Image 1
🧠 Central Memory(中央共有メモリ)とは
エテ

Central Memory?なにそれ、AIの脳みそを一箇所に集めるってこと?

ラン

いい表現ですね!簡単に言うと、すべてのAIエージェントやワークフローが共有する「外部データベース」を用意するんです。n8nは情報の「通り道」になって、記憶の「保持」は外部のデータベースに任せる、という考え方です。

エテ

ふむふむ...つまり、WhatsAppで話しても、Slackで話しても、同じ「記憶の倉庫」を見に行くってこと?

ラン

その通りです!データベースにはPostgreSQLがおすすめで、特にSupabaseのようなマネージドサービスを使うと構築が楽になることが多いですね。

📊 従来のn8nメモリ vs Central Memoryの比較

特性 従来のメモリ Central Memory
永続性 セッション切れで消失しやすい 半永久的に保持
共有範囲 単一ワークフロー内 全ワークフロー・全チャネル
検索性 直近数件のみ 全文検索・SQL可能
エテ

なるほど、全然違うわね。でも、具体的にどうやって実装するの?

ラン

ポイントは2つあります。「正規化(Normalization)」と「ハイドレーション(Hydration)」です。情報の入り口と出口を整えることで、AIの記憶力が格段に向上することが多いんですよ。

Image 2
📥 正規化(Normalization):情報の入り口を整える
エテ

正規化?なにそれ、難しそう...

ラン

簡単に言うと「バラバラな形式のデータを、統一した形に変換する」ことです。WhatsAppからのメッセージも、Slackからのメッセージも、メールも、全部同じフォーマットに揃えてからデータベースに保存するんです。

エテ

あー、なるほど!引越しの荷造りみたいなものね。バラバラの荷物を同じサイズの段ボールに詰めるみたいな?

ラン

いい例えですね!まさにそのイメージです。n8nでは、ワークフローの最初のほうで「標準メッセージオブジェクト」に変換するのがおすすめです。

📦 標準メッセージオブジェクトの例

{ "normalized_payload": { "session_id": "user_12345_whatsapp", "user_id": "user_12345", "platform": "whatsapp", "message_type": "text", "content": "昨日の見積もりの件ですが、再送お願いできますか?", "timestamp": "2025-10-27T10:00:00Z" } }
エテ

ふむふむ、session_idとかuser_idとか、いろいろ項目があるのね。

ラン

特に重要なのは「分岐する前に正規化する」という鉄則です。WhatsApp用の処理、Slack用の処理...と分岐させる前に、まず全部同じ形式に変換しておくと、後の処理がぐっと楽になりますよ。

エテ

でも、WhatsAppのWebhookってすごく複雑じゃない?ステータス更新とか余計なイベントもいっぱい来るって聞いたわよ。

ラン

おっしゃる通りです。WhatsAppは「送信済み」「既読」などのステータス更新イベントも同じWebhookに飛んでくるので、最初にフィルタリングが必要になることが多いですね。n8nのCodeノードでJavaScriptを書いて、メッセージが含まれているかどうかをチェックするのが定番です。

Image 3
📤 ハイドレーション(Hydration):AIに記憶を注入する
エテ

ハイドレーション?水分補給じゃないわよね?

ラン

ふふ、IT用語としては「データを注入して活性化させる」という意味なんです。ステートレスなAIに、推論の直前に必要な文脈(コンテキスト)を注入することで、AIは「ずっとあなたのことを覚えていた」かのように振る舞えるようになるんですよ。

※ハイドレーションとは、空っぽのテンプレートやステートレスなシステムに対して、外部からデータを注入して「使える状態」にすることを指すIT用語です。

エテ

へぇ!じゃあ、ユーザーが話しかけてきたら、データベースから過去の会話を引っ張ってきて、AIに「はい、これ読んでおいて」って渡すってこと?

ラン

まさにその通りです、エテ先輩!これを「コンテキスト・エンジニアリング」と呼ぶこともありますね。

ラン

例えるなら、お母さんが子供のことを熟知しているように振る舞わせるイメージです。子供が「お腹すいた」と言っただけで、「この子はカレーが好きで、今日は部活で疲れているから大盛りがいいだろう」と察して出してくれる、みたいな。

エテ

素敵...!AIがそんな風に気の利くアシスタントになってくれたら最高だわ。

ラン

n8nでの実装手順としては、まずPostgresノードでユーザー情報と直近の会話履歴を取得して、次にCodeノードでそれらを結合してシステムプロンプトに組み込む、という流れが基本ですね。

🔧 ハイドレーションの基本ステップ

  1. ユーザー情報の取得:usersテーブルから名前やメタデータを取得
  2. 会話履歴の取得:chat_messagesテーブルから直近N件を取得
  3. コンテキストの構築:取得したデータを結合してテキスト化
  4. AIへの注入:システムプロンプトに埋め込んでLLMに渡す
エテ

なるほどね。正規化で情報を整理して保存して、ハイドレーションで必要なときに取り出してAIに渡す...サイクルが回ってるのね。

Image 4
💡 実装のポイント
エテ

ところで、AIがエラーを起こしたらどうするの?会話の途中でAPIタイムアウトとか起きたら大変じゃない?

ラン

いい質問ですね。「共有エラーパス」を作っておくのがおすすめです。各ワークフローに個別のエラー処理を書くんじゃなくて、エラー専用のサブワークフローを一つ作って、全部そこに集約するんです。

エテ

ふむふむ、一箇所で管理したほうがメンテナンスも楽そうね。

ラン

あと、重要なアクション(決済の承認とか)には「Human-in-the-Loop」を入れておくことをおすすめします。AIが自動処理する前に、人間の承認を挟む仕組みですね。

※Human-in-the-Loop(HITL)とは、AIや自動化システムの処理フローの中に人間による確認・承認のステップを組み込む設計手法のことです。

エテ

確かに、AIに全部任せきりも怖いものね。特にお金が絡むところは人間がチェックしたほうがいいわ。

⚠️ 実装時の注意点

  • 会話履歴を全部渡すとトークン消費が大きくなるので、直近N件に絞ることが多いです
  • センシティブな情報(パスワードなど)はメモリに保存しないように注意
  • データベースのバックアップは定期的に取っておくのがおすすめです
Image 5
✨ まとめ
エテ

やったー!これでAIがちゃんと会話を覚えてくれるようになりそうね!

ラン

はい、Central Memoryアーキテクチャを使えば、AI健忘症の問題はかなり改善できると思いますよ。

📝 今回のポイントまとめ

  • AI健忘症の原因:LLMはステートレスなので、セッションごとに記憶がリセットされやすい
  • Central Memory:外部データベースで記憶を一元管理するアーキテクチャ
  • 正規化:異なるチャネルからの入力を統一フォーマットに変換して保存
  • ハイドレーション:推論前にデータベースから文脈を取得してAIに注入
  • 運用のコツ:共有エラーパスやHuman-in-the-Loopで安定性と安全性を確保
エテ

さすがランね!これで私のチャットボットもレベルアップできそうだわ!

ラン

そ、そんな...最初は難しく感じるかもしれませんが、段階的に実装していけば大丈夫ですよ。

エテ

よーし、さっそく試してみるわ!みんなもAIに記憶力を持たせたいなら、Central Memoryを試してみてね!またね!

ラン

また次回お会いしましょう。質問があればコメントで教えてくださいね。

×