GraphRAGと永続的なコンテキストメモリがAIチャットボットに組み込まれ始めており、ページを更新したり新しいブラウザタブを開いたりしても、会話が維持されるようになっています。開発者によれば、この組み合わせによって、多くの対話型アシスタントのユーザーを悩ませてきた、タブを閉じると忘れてしまう「タブ・キル(tab-kill)」現象が解消されるといいます。
なぜ従来のアプローチでは不十分なのか
ほとんどのチャットベースのAIシステムは、標準的な検索拡張生成(RAG)に依存しています。このパイプラインは、現在の質問に類似したテキストの断片を抽出し、それらを言語モデルに投入して回答を返します。「フランスの首都はどこですか?」といった単一の事実の検索であれば、この手法はうまく機能します。
しかし、RAGはユーザーの入力をすべて独立したリクエストとして扱います。数分前に行われた発言に依存する追跡質問があったとしても、モデルはその文脈を記憶していません。その結果、チャットボットは同じことを繰り返すよう求めてきたり、以前の詳細を無視した回答をしたりすることになります。問題は知能の欠如ではなく、「状態(state)」の欠如なのです。
GraphRAG:平坦なテキストをネットワークへと変える
GraphRAGは検索ステージを再構築します。無関係なテキストの塊のリストではなく、グラフを構築します。
- **ノード(Nodes)**は、人物、製品、イベントなどのエンティティを表します。
- **エッジ(Edges)**は、それらの間の関係(誰が何を供給しているか、どのプロジェクトがどのコンポーネントに依存しているかなど)を捉えます。
グラフは接続をエンコードしているため、システムは「マルチホップ推論(multi-hop reasoning)」を実行できます。つまり、平坦なテキスト検索では答えられないようなクエリに対しても、複数のドキュメントにわたる事実の連鎖を辿って回答できるのです。また、サブグラフ全体の要約を生成することもでき、断片的な抜粋の集まりではなく、トピックの簡潔な概要をユーザーに提供できます。
コンテキストメモリ:会話を記憶する
永続的なコンテキストメモリは、グラフの上に時間的なレイヤーを追加します。これは以下の3つの部分に分かれます。
- **短期メモリ(Short-term memory)**は、現在のターンごとの対話を保持するため、ユーザーは数文前に行った主張を再度述べる必要がありません。
- **長期メモリ(Long-term memory)**は、セッションをまたいでユーザーに関する特定の事実(好みの言語、繰り返される問題、過去の購入履歴など)を記録します。
- **選択的メモリ(Selective memory)**は、何を保持するかを決定し、ストレージの肥大化を防ぐために、フィラー(つなぎ言葉)や無関係な雑談を破棄します。
ユーザーがタブを閉じた後に戻ってきたとき、長期ストレージは関連する背景情報を呼び出すことができ、チャットボットは前回のセッションの続きから会話を再開できます。
各ツールの使い分け
- 接続の欠落によるコストが低い、単純な事実確認には標準的なRAGを使用します。
- 誤った回答のコストが高い場合や、複数のドキュメントに分散した情報を結びつける必要がある場合は、GraphRAGを導入します。
- アプリケーションが再訪ユーザーを認識する必要がある場合や、数日から数週間にわたって個別の文脈を維持する必要がある場合は、コンテキストメモリを追加します。
これらのレイヤーを構築することは、単にプラグインを差し込むような簡単な作業ではありません。ソースデータが変更されるたびにGraphRAGインデックスを更新する必要があり、メモリ・ストアには関連性とストレージコストのバランスをとるためのポリシーが必要です。過剰な保持(発言されたすべての言葉を保存すること)は、検索速度を急速に低下させ、モデルをノイズで埋め尽くしてしまいます。
トレードオフ
コンテキストメモリは「忘却」の問題を解決します。デメリットは運用面にあります。ライブグラフと選択的なメモリキャッシュを維持するには、継続的なエンジニアリングの努力が必要です。
今後の注目点
まとめ: GraphRAGは関係性のバックボーンを提供し、永続的なコンテキストメモリは時間的な接着剤を提供します。これらが組み合わさることで、チャットボットはタブやセッションをまたいで会話の文脈を維持できるようになり、ストレスの溜まるリセット作業をシームレスな会話へと変えることができます。
