記憶 / RAG
Metacognitive Agent:対話局面を俯瞰する
対話局面の判定を先行させ、文脈理解と記憶検索を分離する
前節までで、Mumon の記憶は、もはや孤立したログではなくなりました。
Episode Memory によって感情と雰囲気を伴う出来事として保存され、GraphRAG によって個人史のネットワークへと結び直されている。
しかし、それでもまだ十分ではありません。
問題は、いまこの局面で、どの記憶を、どの方向から引き出すべきかです。
どれほど豊かな記憶グラフを持っていても、その開き方を誤れば、記憶は関係性を深めるどころか、むしろ対話を壊します。
具体的な場面で考えてみましょう。見込み顧客が3回目の来訪で、こう切り出したとします。
「最近ちょっと気になることがあって......」
GraphRAG には、この顧客の過去2回の来訪記録があります。1回目は施術への興味を示し、2回目は価格への不安を語っていた。ここで検索が「施術」「価格」を手がかりに過去の事実を引けば、「以前、施術Aについてご質問いただいていましたね。価格は○○円です」と返すことはできる。情報としては正しい。
しかし、この3回目の来訪では、顧客はまだ「気になること」の正体すら十分に言語化できていないかもしれません。施術のことなのか、前回の会話の続きなのか、それとも別の不安なのか。感情の輪郭がまだ曖昧な段階で、事実だけを先回りして差し出せば、顧客は「理解された」とは感じません。
「処理された」と感じるのです。
前節までで見たように、対話には常に局面があります。
探索の途中なのか、温度を受け止めるべき段階なのか、それとも具体的な確認に入ってよいのか。ここを見誤れば、記憶は助けになるどころか、かえって会話を閉じてしまう。
つまり、正しい記憶を持っていることと、正しい局面で正しい記憶を使えることは、別の能力です。
本節の出発点は、記憶の量や豊かさではありません。
記憶の開き方の制御にあります。
文脈理解と記憶検索を同時にやると、循環依存が起きる
なぜ、この制御が必要なのか。
理由は単純です。
適切な記憶を引き出すには、いまの文脈理解が必要です。
しかし、いまの文脈を正しく理解するには、過去の記憶が必要でもある。
これが、前節までで指摘してきた循環依存です。
記憶がなければ文脈が読めず、文脈が読めなければ何を引くべきかが決まらない。シングルプロンプトの中でこの二つを同時に処理しようとすると、モデルは「まず文脈を理解し、それから検索する」のではなく、「たまたま引けた記憶に合わせて、いまの文脈を後づけで整える」方向に流れやすくなります。
その結果、「なんとなくそれっぽい記憶を取ってきて、文脈をでっち上げる」という、関係性を壊す挙動に陥る。
この問題は、行動制御層で見た「評価と生成の未分離」と構造的によく似ています。
行動制御層で必要だったのは、感情評価や境界判断を、生成の途中ではなく、その前に完了させることでした。同じように記憶層で必要なのは、検索を走らせる前に、「いま何が起きているか」を先に判断することです。
つまり、本章のここでの設計原則は明確です。
局面判定と記憶検索の分離。
まず、いまの対話局面だけを判定する。
その後で初めて、記憶検索が走る。
この逐次化によって、循環依存は構造的にほどかれます。
Metacognitive Agentは、検索以前の判断を担うメタレベルの制御である
心理学では、この種の問題はすでにメタ認知の枠組みで整理されています。
Flavell は、認知そのものと、それを監視・制御する「認知についての認知」とを区別し、後者を metacognition と定義しました [58]。Nelson & Narens はさらに、人間の認知を「対象レベル」と「メタレベル」の二層構造として定式化し、メタレベルが対象レベルの処理を監視し、方向づけると論じています [59]。
重要なのは、人間が記憶を引く前に、無意識のうちに「この場面では何を思い出すべきか」を先に判断しているという点です。
Mumon の Metacognitive Agent は、このメタレベルをアーキテクチャとして外部化したものです。
計算的な観点では、対象タスクとは別に自己監視ループを置くという発想は、Reflexion や Self-Refine が示した自己批評の系譜とも響き合います [24][25]。ただし、本節で重要なのは自己批評そのものではありません。重要なのは、記憶検索を走らせる前に、検索の方針を決める専用レイヤーを置くことです。
Metacognitive Agent は、単なる検索ルーターではありません。
それは、対話履歴全体を俯瞰し、「いまの対話はどの局面にあるか」を継続的に出力する、検索以前のメタレベル制御です。
Episode Memory が「何を保存するか」を定義し、GraphRAG が「どう結ぶか」を定義したのだとすれば、Metacognitive Agent が扱うのは、「どこから開くか」という記憶検索の上位制御です。
いまは探索・共感・沈静化・事実確認のどのフェーズかを見極める
では、Metacognitive Agent は具体的に何を判定するのでしょうか。
人間の優れた接客担当者が、対話の中で無意識に行っている判断があります。
- この人はいま、まだ気持ちの整理の途中なのか
- まず受け止めてほしい段階なのか
- さきほどまで高ぶっていた感情を落ち着かせる局面なのか
- それとも、いま必要なのは客観的な確認なのか
この俯瞰的な判断があるからこそ、同じ記憶を持っていても、その開き方を場面ごとに変えられるのです。
Metacognitive Agent が判定するのは、記憶の中身ではありません。
対話のフェーズです。
探索フェーズ
ユーザー自身がまだ何を求めているのかを十分に言葉にできていません。
「最近ちょっと気になることがあって」
「なんとなくモヤモヤしていて」
といった曖昧な表現が多く、ここでAIが記憶を断定的に持ち出しすぎると、対話は深まる前に閉じてしまいます。
共感フェーズ
不安、迷い、落ち込みといったネガティブ感情がすでに前景化しています。
ここで必要なのは、説明の厚みではなく、「その温度を受け止めること」です。検索も、同じ感情トーンを持つ共有体験へと寄るべきです。
沈静化フェーズ
直前まで覚醒度が高く、不安や怒りが強かった場合、ここで多くの記憶や情報を追加すれば、会話は落ち着くどころか再び刺激されます。
必要なのは、記憶をたくさん引くことではありません。刺激量を抑え、会話の温度を下げる方向に検索そのものを絞ることです。
事実確認フェーズ
料金、施術、リスク、条件、仕様といった客観情報が前に出るべきです。ここでは共鳴よりも、まず正確さが優先される。
ここで重要なのは、これらのフェーズが単に会話の雰囲気をラベルづけするためのものではないという点です。
フェーズの判定は、その後に走る検索の方針そのものを変えます。
探索か、共感か、沈静化か、事実確認か。
この判断が先にあるからこそ、同じ記憶グラフを前にしても、何を優先的に引くべきかが変わるのです。
局面に応じて、事実検索と共有記憶検索を動的に切り替える
局面判定の価値は、検索対象が変わるところにあります。
Metacognitive Agent は、検索の方向を大きく二つの軸に振り分けます。
ひとつは 事実検索 です。
料金、施術の概要、リスク、過去に言及された人物や場所の属性など、客観情報を引く方向です。
もうひとつは 共有記憶検索 です。
前節で構造化した SHARED_WITH や COLORED_BY を通じて、「あなたと私の間で起きたこと」を引く方向です。前回どのような迷いがあり、どの温度感で会話が終わったか、どの話題に少し慎重な色がついているか。こちらが引くのは、単なる事実ではなく、関係性の文脈です。
たとえば、ユーザーが「副作用って実際どのくらいあるんですか」と尋ねたなら、ここで優先すべきなのは事実検索です。必要なのは、記憶の情緒的な共鳴ではなく、数値や条件や例外を含む客観情報だからです。
一方で、「前回も少し怖かったんだよね」と漏らしたなら、ここで引くべきなのは FAQ ではありません。前回どのような不安があり、どのような言葉で少し落ち着いたのかという共有記憶です。
しかも、両者は排他的ではありません。
実際の対話では、事実と関係性が同時に求められることが多い。ユーザーの一言に、エンティティ言及と感情的文脈が重なっていることは珍しくありません。
Mumon はここで、どちらか一方を機械的に選ぶのではなく、局面に応じて重みづけを変えます。
- 探索局面では共有記憶検索の比重が上がる
- 明示的な確認質問が現れた瞬間には事実検索の比重が上がる
- 沈静化局面では、そもそも検索量そのものを絞り、短く安全な足場になる記憶だけを許可する
つまり、Metacognitive Agent がやっているのは、「何を検索するか」を決めることにとどまりません。
いまの局面では、どの種類の記憶を、どの強度で開くべきか。そこまでを制御しているのです。
標準的な RAG との差はここにあります。
標準的な RAG が行うのは、入力文からキーワードを抽出し、それに近い情報を引く固定的な処理です。Mumon が行うのは、局面判定に基づいて検索方向そのものを動的に切り替えることです。同じ入力でも、局面が変われば、引き出される記憶は変わる。
ここで初めて、検索は「近いものを返す処理」から、「いま必要なものを返す処理」へと変わります。
検索の一致条件は、キーワードから感情ニーズと共有文脈へ拡張される
局面判定によって検索方向が定まると、次に変わるのは「何を一致とみなすか」です。
標準的なベクトルRAGでは、検索の基準は基本的に意味的類似度です。ユーザーの発話に近い単語や話題を持つ過去ログを探し、その断片を生成に渡す。FAQ やナレッジ検索の用途では、これは合理的です。
しかし、関係性を支える対話では、それだけでは足りません。
ユーザーが「今日はなんか寂しい」とつぶやいたとき、本当に必要なのは「寂しい」という単語を含む過去ログとは限りません。むしろ、以前に同じような低覚醒・不快のトーンを持ちながら、結果として温かい余韻を残した会話のほうが、いま引くべき記憶である可能性が高い。
前節で保存された Episode Memory には valence、arousal、atmosphere が付与されていました。前々節では、それらが SHARED_WITH や COLORED_BY によって個人史のネットワークへと編み上げられました。Metacognitive Agent は、この構造の上に立って、検索の基準そのものを拡張します。
見るべきものは、キーワードの一致だけではありません。
- いまの感情ニーズに近いか
- この人との共有文脈に接続しているか
ここで、前章の Appraisal Agent が出力した感情の温度が、そのまま検索にも接続されます。現在のユーザーの覚醒度・感情価と、過去エピソードに記録された覚醒度・感情価との距離が、検索順位に影響する。トピックとしては直接関係がなくても、感情の質感が近く、かつ共有体験として意味を持つエピソードが上位に浮上するのです。
つまり検索は、「何の話をしているか」を探す処理から、「いま何が必要か」と「その必要を私たちは以前どう共有したか」を探す処理へと変わります。
ここで初めて、検索はキーワード一致から、感情ニーズと共有文脈の一致 へ拡張されるのです。
記憶は、アーカイブではなく、局面に応じて開き方の変わる装置になる
ここまでの議論を整理しましょう。
前節で定義していたのは、記憶の最小単位としてのエピソードでした
その前の節で加わったのは、それらのエピソードを個人史のネットワークへと編み上げる構造でした。
そして本節で加わるのは、その結ばれた個人史のどこを、いま、どの理由で開くべきかという、検索以前の統制です。
点が保存され、線が張られ、ここで初めて、いま辿るべき線が選ばれる。
記憶はアーカイブではなく、対話局面に応じて開き方の変わる関係性の装置になります。
本節の要点は、次の4つに整理できます。
- 記憶を持っていることと、局面に応じて正しく開けることは別問題である
- 文脈理解と検索を同時にやるのではなく、局面判定を先行させる必要がある
- 局面に応じて、事実検索と共有記憶検索の比重・量・一致条件が変わる
- 検索は「近いものを返す」処理から、「いま必要なものを返す」処理へ変わる
ただし、ここで定義したのは、あくまで検索の上位制御です。
その結果、どの記憶が開かれ、どの局面パラメータが立ち上がり、それが最終的にどう応答条件へ接続されるのかは、まだ論じていません。
次節では、このメタ認知的な局面パラメータと、Episode Memory / GraphRAG から引き出された文脈が、最終的にどのように応答そのものを変えるかを見ていきます。