検索アーキテクチャ
Nowledge Memが6つの検索戦略を組み合わせて、言葉が一致しない場合でも適切なメモリを見つける仕組み。
個人の知識を検索することは、ウェブを検索することとは異なります。 探しているのは、自分自身が保存したもの、自分の言葉で、時には数か月前に保存したものです。 最大の課題は速度ではありません。 今質問をどのように表現するかと、その時答えをどのように表現したかの間のギャップです。
Nowledge Memはこれを、複数の角度から同時に検索し、その結果を統合することで解決します。
6つの検索戦略
すべての検索クエリは、最大6つの並列戦略を通過します。
セマンティック検索。 ベクトル埋め込みを使用して、クエリの意味と各メモリの意味を比較します。 「API認証」は、言葉が異なっていても「JWTトークン設定」を見つけます。 これはほとんどのクエリにとって主要なシグナルです。
全文検索。 言語を考慮したトークン化によるキーワードマッチングで、CJK(中国語、日本語、韓国語)もサポートします。 正確な用語、名前、コード識別子を覚えている場合に役立ちます。
エンティティ検索。 ナレッジグラフを使用して、関連するエンティティにリンクされたメモリを見つけます。 「データベースパフォーマンス」を検索すると、メモリのテキストに「データベースパフォーマンス」が一度も言及されていなくても、共有されたエンティティ接続を通じて「PostgreSQLインデックス作成」に関するメモリが浮かび上がることがあります。
コミュニティ検索。 ナレッジグラフは関連するエンティティをコミュニティ(強く接続されたノードのクラスター)にグループ化します。 コミュニティ内を検索すると、直接的なキーワードやセマンティックマッチングでは見つからないかもしれないメモリが浮かび上がります。
ラベル検索。 クエリが割り当てたラベルと一致する場合、そのラベルを持つメモリの関連性が高まります。 これにより、あなた自身の整理構造が検索結果に影響を与えることができます。
グラフトラバーサル。 関係エッジ(EVOLVESチェーン、エンティティリンク、Crystalソース)をたどり、テキストの類似性ではなくグラフ構造を通じてクエリに関連するメモリを見つけます。
高速モードと詳細モード
すべての検索が6つの戦略すべてを最大限に活用する必要があるわけではありません。
高速モード(ほとんどのクエリで100ms未満)は、セマンティック検索、全文検索、エンティティマッチングを並列で実行します。 約90% のクエリを適切に処理します。 これがデフォルトです。
詳細モードは、高速な結果の上にLLMを活用した分析を追加します。 クエリの意図(事実を調べているのか?概念を探索しているのか?関係をたどっているのか?)を分類し、それに応じて戦略の重みを調整します。 また、HyDE(仮説文書埋め込み)を使用して大きな表現ギャップを埋めたり、オプションでLLMを用いて上位結果を再評価してランキングを改善したりすることもできます。
詳細モードは、時間的意図を含むクエリ(「前四半期に何を決定したか?」)や、高速モードの結果が低信頼度の場合に自動的にトリガーされます。 手動でトリガーすることもできます。
結果のランク付け方法
最終的なランキングは、上記の戦略からのシグナルとメモリレベルのスコアリングを統合します。
- セマンティック関連性が支配的な要素です。 クエリに意味的に近いメモリは、他のシグナルに関係なく上位にランクされます。
- 減衰スコアは、最近および頻繁にアクセスされたメモリに適度なブーストを与えます。 詳細はメモリの減衰を参照してください。
- 信頼スコアは、強力な証拠(多数のアクセス、EVOLVESリンク、Crystal引用)を持つメモリに小さな追加ブーストを提供します。
Crystal(合成された参照知識)は、裏付けられた高信頼度の知識を表すため、ランキングブーストを受けます。 EVOLVESチェーン内の現在のメモリはデフォルトで返されます。 置き換えられたメモリはグラフ履歴に残り、履歴を明示的に要求した場合に含めることができます。
すべての結果には、利用可能な場合source_thread_idが含まれます。
エージェントやツールがメモリ自体を超えたより多くのコンテキストを必要とする場合、元の会話を取得できます。
時間的検索
時間参照を含むクエリ(「2020年に何が起こったか?」、「前四半期の決定」)は、時間的マッチングを有効にします。 システムは各メモリに対して2つの独立したタイムスタンプを追跡します。
- イベント時間: その出来事が起こった時
- 記録時間: それを保存した時
時間的マッチングは関連性ブーストを追加しますが、セマンティック関連性を上書きしません。 正しい期間のメモリであっても、上位にランクされるには意味的に関連している必要があります。 時間はシグナルであり、フィルターではありません。
日付の精度は明示的に追跡されます。 メモリのイベント時間が年までしかわからない場合、システムは月を知っているふりをしません。
