AIが会話を覚えてくれる!n8nの「Central Memory」アーキテクチャ入門
正規化とハイドレーションで「AI健忘症」を解決しよう
ラン!ちょっと聞いてよ!n8nでAIチャットボット作ったのに、会話を全然覚えてくれないの!
あちゃー...それ、よくある「AI健忘症」ってやつですね。
健忘症?AIが記憶喪失ってこと?昨日「名前は田中です」って伝えたのに、今日話しかけたら「お名前を教えてください」って言われたのよ!
はい、まさにその状態ですね。実は、LLMって本質的に「ステートレス」なんです。APIリクエストが終わるたびに、記憶がリセットされてしまうんですよ。
※ステートレスとは、システムが過去のやり取りの状態を保持せず、毎回「初めまして」の状態から処理を始める設計のことです。
じゃあ、私がせっかく「WhatsApp用」と「Slack用」でそれぞれメモリ機能つけたのに、意味なかったってこと...?
(やっぱりそうなってましたか...)それ、「Per-flow State」っていう設計で、残念ながら限界があるんです。WhatsAppで話した内容をSlackのエージェントは知らないし、セッションが切れたら情報が消えてしまうことも多いんですよ。
なんとかしなさいよ!お客様に同じこと何度も聞くAIなんて、使い物にならないわ!
大丈夫です、解決策があります。「Central Memory(中央共有メモリ)」というアーキテクチャを使えば、AIがちゃんと会話を覚えてくれるようになりますよ。
Central Memory?なにそれ、AIの脳みそを一箇所に集めるってこと?
いい表現ですね!簡単に言うと、すべてのAIエージェントやワークフローが共有する「外部データベース」を用意するんです。n8nは情報の「通り道」になって、記憶の「保持」は外部のデータベースに任せる、という考え方です。
ふむふむ...つまり、WhatsAppで話しても、Slackで話しても、同じ「記憶の倉庫」を見に行くってこと?
その通りです!データベースにはPostgreSQLがおすすめで、特にSupabaseのようなマネージドサービスを使うと構築が楽になることが多いですね。
📊 従来のn8nメモリ vs Central Memoryの比較
| 特性 | 従来のメモリ | Central Memory |
|---|---|---|
| 永続性 | セッション切れで消失しやすい | 半永久的に保持 |
| 共有範囲 | 単一ワークフロー内 | 全ワークフロー・全チャネル |
| 検索性 | 直近数件のみ | 全文検索・SQL可能 |
なるほど、全然違うわね。でも、具体的にどうやって実装するの?
ポイントは2つあります。「正規化(Normalization)」と「ハイドレーション(Hydration)」です。情報の入り口と出口を整えることで、AIの記憶力が格段に向上することが多いんですよ。
正規化?なにそれ、難しそう...
簡単に言うと「バラバラな形式のデータを、統一した形に変換する」ことです。WhatsAppからのメッセージも、Slackからのメッセージも、メールも、全部同じフォーマットに揃えてからデータベースに保存するんです。
あー、なるほど!引越しの荷造りみたいなものね。バラバラの荷物を同じサイズの段ボールに詰めるみたいな?
いい例えですね!まさにそのイメージです。n8nでは、ワークフローの最初のほうで「標準メッセージオブジェクト」に変換するのがおすすめです。
📦 標準メッセージオブジェクトの例
ふむふむ、session_idとかuser_idとか、いろいろ項目があるのね。
特に重要なのは「分岐する前に正規化する」という鉄則です。WhatsApp用の処理、Slack用の処理...と分岐させる前に、まず全部同じ形式に変換しておくと、後の処理がぐっと楽になりますよ。
でも、WhatsAppのWebhookってすごく複雑じゃない?ステータス更新とか余計なイベントもいっぱい来るって聞いたわよ。
おっしゃる通りです。WhatsAppは「送信済み」「既読」などのステータス更新イベントも同じWebhookに飛んでくるので、最初にフィルタリングが必要になることが多いですね。n8nのCodeノードでJavaScriptを書いて、メッセージが含まれているかどうかをチェックするのが定番です。
ハイドレーション?水分補給じゃないわよね?
ふふ、IT用語としては「データを注入して活性化させる」という意味なんです。ステートレスなAIに、推論の直前に必要な文脈(コンテキスト)を注入することで、AIは「ずっとあなたのことを覚えていた」かのように振る舞えるようになるんですよ。
※ハイドレーションとは、空っぽのテンプレートやステートレスなシステムに対して、外部からデータを注入して「使える状態」にすることを指すIT用語です。
へぇ!じゃあ、ユーザーが話しかけてきたら、データベースから過去の会話を引っ張ってきて、AIに「はい、これ読んでおいて」って渡すってこと?
まさにその通りです、エテ先輩!これを「コンテキスト・エンジニアリング」と呼ぶこともありますね。
例えるなら、お母さんが子供のことを熟知しているように振る舞わせるイメージです。子供が「お腹すいた」と言っただけで、「この子はカレーが好きで、今日は部活で疲れているから大盛りがいいだろう」と察して出してくれる、みたいな。
素敵...!AIがそんな風に気の利くアシスタントになってくれたら最高だわ。
n8nでの実装手順としては、まずPostgresノードでユーザー情報と直近の会話履歴を取得して、次にCodeノードでそれらを結合してシステムプロンプトに組み込む、という流れが基本ですね。
🔧 ハイドレーションの基本ステップ
- ユーザー情報の取得:usersテーブルから名前やメタデータを取得
- 会話履歴の取得:chat_messagesテーブルから直近N件を取得
- コンテキストの構築:取得したデータを結合してテキスト化
- AIへの注入:システムプロンプトに埋め込んでLLMに渡す
なるほどね。正規化で情報を整理して保存して、ハイドレーションで必要なときに取り出してAIに渡す...サイクルが回ってるのね。
ところで、AIがエラーを起こしたらどうするの?会話の途中でAPIタイムアウトとか起きたら大変じゃない?
いい質問ですね。「共有エラーパス」を作っておくのがおすすめです。各ワークフローに個別のエラー処理を書くんじゃなくて、エラー専用のサブワークフローを一つ作って、全部そこに集約するんです。
ふむふむ、一箇所で管理したほうがメンテナンスも楽そうね。
あと、重要なアクション(決済の承認とか)には「Human-in-the-Loop」を入れておくことをおすすめします。AIが自動処理する前に、人間の承認を挟む仕組みですね。
※Human-in-the-Loop(HITL)とは、AIや自動化システムの処理フローの中に人間による確認・承認のステップを組み込む設計手法のことです。
確かに、AIに全部任せきりも怖いものね。特にお金が絡むところは人間がチェックしたほうがいいわ。
⚠️ 実装時の注意点
- 会話履歴を全部渡すとトークン消費が大きくなるので、直近N件に絞ることが多いです
- センシティブな情報(パスワードなど)はメモリに保存しないように注意
- データベースのバックアップは定期的に取っておくのがおすすめです
やったー!これでAIがちゃんと会話を覚えてくれるようになりそうね!
はい、Central Memoryアーキテクチャを使えば、AI健忘症の問題はかなり改善できると思いますよ。
📝 今回のポイントまとめ
- AI健忘症の原因:LLMはステートレスなので、セッションごとに記憶がリセットされやすい
- Central Memory:外部データベースで記憶を一元管理するアーキテクチャ
- 正規化:異なるチャネルからの入力を統一フォーマットに変換して保存
- ハイドレーション:推論前にデータベースから文脈を取得してAIに注入
- 運用のコツ:共有エラーパスやHuman-in-the-Loopで安定性と安全性を確保
さすがランね!これで私のチャットボットもレベルアップできそうだわ!
そ、そんな...最初は難しく感じるかもしれませんが、段階的に実装していけば大丈夫ですよ。
よーし、さっそく試してみるわ!みんなもAIに記憶力を持たせたいなら、Central Memoryを試してみてね!またね!
また次回お会いしましょう。質問があればコメントで教えてくださいね。




