本当に優れた検索エンジンを作るのはどれほど難しいことでしょうか? — Index: AI エージェント専用に設計された、ミリ秒レベルの動的ドキュメント検索システム。 @opennote創設者Abhiによるこの技術プレゼンテーションは、同社が独自に開発した検索システム「Index」に焦点を当てています。このシステムは人間ベースの検索エンジンではなく、AIエージェントがユーザーの個人的知識ベース内で極めて高速かつ正確な検索を実現できるように設計されています。 なぜ既存の検索システムはインテリジェントエージェントのニーズを満たせないのでしょうか?従来の検索エンジンは人間向けに設計されています。人間はシステムの癖を徐々に理解し、単語の置き換えや補足、欠陥の無視などを学習します。しかし、インテリジェントエージェントにはこの能力が全くありません。すべての検索はゼロから始まり、記憶も知識ベースに対する「感覚」も持ち合わせていません。さらに深刻なのは、 • インテリジェントエージェントは幻覚の影響を非常に受けやすく、コンテキストが少しでも間違っていると、応答全体が崩壊してしまいます。 • Opennote は通常、数千 (数億ではない) のドキュメントのみを処理し、エラーに対する許容度は事実上ゼロであるため、最初の試行で最も正確なセグメントが見つかることが必要です。 • この製品は一般消費者を対象としているため、調査ツールのように数秒待つことはできません。エンドツーエンドのレイテンシは数百ミリ秒以内で安定している必要があります。 著者らは、インデックスが以下のほぼ矛盾する要件を同時に満たす必要があることを繰り返し強調しています。 1. 極めて低い遅延:P99 < 300ms(世界中どこでも同じ速度) 2. 高精度: 同じ概念が異なる文書に現れる場合、最も正確なコンテキストを持つものを見つけることも必要です。 3. マルチテナントと動的スコープ: パフォーマンスを低下させることなく、「自分だけ」、「友達と共有」、「コミュニティ全体」、「およびパブリックページ」の任意の組み合わせの同時検索をサポートします。 4. グローバルな低レイテンシ: ユーザーとエージェントは地球の反対側にいる可能性があります。 5. データは決して静的ではありません。ユーザーはいつでも編集、共有、削除、権限の変更を行うことができます。 主要な技術の選択(その多くは直感に反するもの) 1. 選択されたストレージおよびコア検索エンジンは、Pinecone、Weaviate、Qdrant、Chroma などの主流の専用ベクター データベースではなく、PlanetScale でホストされている Postgres (pgvector + pg_trgm + tsvector) です。 その理由は次のとおりです。 • 非常に高速なメタデータフィルタリングにより、ベクトル計算前の候補セットを最小限に抑えます。• 真のハイブリッド検索(フルテキスト + あいまい一致 + セマンティクス)をネイティブにサポートします。 • マルチテナント境界、動的フィルタリング、UPSERT/DELETE はすべて本質的に効率的です。• 実際のテストでは、P99 レイテンシが 475 ミリ秒から 209 ミリ秒に短縮されました。 2. グローバル分散ランタイム アーキテクチャ全体は、Cloudflare エコシステム上で実行されます: Workers + Hyperdrive + R2 + Workers AI + Vectorize + KV。 メリットは、コードが世界中の数十のエッジノードで自然に実行され、データベースにアクセスするときに、Hyperdrive によって高速化された後、ローカルアクセスと同じくらい高速に感じられることです。 3. ドキュメント処理パイプライン(取り込み) 完全にステートレスなWorker + R2オブジェクトストレージ設計を採用し、Workerの128MBのメモリ制限に厳密に適合しています。プロセスは以下のとおりです。 1. 再帰ブロック分解(あらゆる種類の乱雑な文書に対して十分に堅牢) 2. ハッシュを使用して、古いチャンクと新しいチャンクを正確に比較し、実際に変更された部分のみを再計算します。 3. 変更された部分のみを再埋め込みます(費用と時間を節約) 4. ドキュメントと重要な段落の要約を生成し、エージェントに「ドキュメント全体の内容」に関する追加のコンテキストを提供します。 5. 新しいチャンクのUPSERT 6. 古いチャンクを削除し、キャッシュの無効化をトリガーします。 4. 検索プロセス 1. エージェントからクエリを受信すると、まずパラメータのクリーニングとフィルタ条件の連結を実行します。 2. Postgres では、メタデータを使用して、検索スペース (テナント、ソース、タグ、時間、明示的な除外など) を事前に最小化します。 3. フィルタリングされたデータセットに対して全文検索とベクトル検索を並列に実行します。 4. 2 セットのスコアを 0 ~ 1 に正規化し、アルファと呼ばれるパラメーターを使用してそれらを動的に融合します (0 = 純粋なキーワード、1 = 純粋なセマンティクス)。 5. データベース内で重複排除、ソート、およびトップ K 検索を実行します。 6. オプションとして、Workers AI を使用して軽量の再ソートを実行し、最終的に結果を返します。 5. キャッシュシステム(最も巧妙な部分) 通常のキャッシュはドキュメントの更新後にダーティになります。著者はこの問題を完全に解決するために 3 層のメカニズムを設計しました。 • 正確なキャッシュ: 同じクエリ + 同じフィルタリング条件がキーと値のペアに直接ヒットします。 • セマンティックキャッシング:クエリ埋め込みをVectorizeで保存し、類似クエリをキャッシュできるようにします。 • 転置インデックスの無効化:各チャンクは、キャッシュに出現するクエリを記録します。チャンクが無効になると、関連するすべてのキャッシュが事前に削除されます。 これにより、データベースへの負荷が大幅に軽減され、古いコンテンツが返されることがなくなります。 実際のテスト結果は、標準データセット MSMARCO (10,000 の質問と回答のペア) + BGE-M3 モデルを使用して ChromaDB と厳密に比較されました。 4つの指標(Recall@10、MRR@10、MAP@10、NDCG@10)において、IndexはChromaとほぼ同等か、わずかに上回っています。また、ハイブリッド検索、マルチテナント分離、動的フィルタリングといった追加機能も備えています。実際の本番環境では、P99レイテンシは300ミリ秒以内で安定しています。 Index は現在、Opennote コミュニティ機能の完全な検索負荷を正式に担っています。 著者は、現在の索引は単なる「検索」ツールであり、次のステップはそれを「理解」ツールに進化させることだと考えています。 • チャンク間に時間的、因果的、進化的関係性を追加する。 • 重要度/人気度のシグナルを導入する。 • より小規模で高速、かつ特化した埋め込みモデルの開発を継続する。 • エージェントが複数段階の検索戦略をカスタマイズできるようにする。 最終的な目標は、インテリジェント エージェントが毎回ゼロから盲目的に推測するのではなく、ユーザーの知識ベースの「メンタル モデル」を真に所有できるようにすることです。
スレッドを読み込み中
X から元のツイートを取得し、読みやすいビューを準備しています。
通常は数秒で完了しますので、お待ちください。
