JevとMilvusを使った検索
ベクトル検索は、クエリに関連する情報を検索します。有用な検索アプリケーションを構築するには、どの文章が実際に質問に答えているか、以前の回答を再利用できるか、エージェントが検索を終了するのに十分な証拠を持っているかといった判断も必要となります。
MilvusとJevは、このワークフローの異なる部分を担当します。Milvusは埋め込みベクトルを保存し、候補レコードを取得します。この際、製品バージョンやナレッジベースの範囲といった制約条件に対して、メタデータフィルターが適用されます。一方、Jevは、取得されたテキストの意味を指示内容と照らし合わせて評価します。アプリケーションは、Jevの判断結果を利用して、証拠を選択したり、次の検索ステップを制御したりすることができます。
Jevはどのような役割を果たすのでしょうか?
Jevへのリクエストには、コンテキストと1つ以上の判断対象となる質問が含まれます。その型付き出力には、固定された選択肢からの選択、順序付きスコア、および「はい/いいえ」の確率が含まれます。これらの出力により、アプリケーションコードは自由形式の説明を解析することなく意思決定を行うことができます。必要に応じて、生成モデルが回答やフォローアップの検索クエリを作成することも可能です。
例えば、ユーザーが「Atlas v2のインストール方法」を尋ねたとします。Milvusは検索範囲をv2のドキュメントに限定し、インストール、アップグレード、トラブルシューティングに関する類似の文章を返します。その後、Jevはどの文章が初期設定について説明しているかを評価します。アプリケーションは、選択された証拠を回答生成モデルに渡します。
役割分担は明確です:
- Milvusによる検索:必要なメタデータ制約の範囲内で候補を見つける。
- Jevによる判定:質問およびタスク固有の基準に基づいて、それらの候補を評価する。
- アプリケーションコードでの処理:結果の並べ替え、文脈のフィルタリング、回答の再利用、または検索の継続。
一部の決定は検索の前に実行されます。Jevは、検索範囲を選択したり、ドキュメントがコレクションに入る前にその内容を評価したりすることができます。アクセス制御や厳密なフィルタリングは、引き続きアプリケーションの責任となります。
検索シナリオを確認する
「Search with Jev」コレクションには、実行可能なチュートリアルが9つ収録されています。各チュートリアルでは、小規模な合成データセットを使用し、検索されたレコード、判定、およびその結果として行われたアクションを示しています。
より適切な証拠を選択する
- 検索結果の再ランク付け:ドキュメントやコーディングエージェントの記憶を再順序付けします。ノートパソコンのポートエラーに関する記憶は、コンテナの接続問題に似ている場合があります。より有用な記憶とは、コンテナとホスト間の実際の修正内容を記録したものです。
- 検索されたコンテキストのフィルタリング:Milvusがバージョンフィルタを適用した後、初期インストール手順と、アップグレードやトラブルシューティングに関する記述を区別します。
- グラフ関係の再ランク付け:書籍の著者に関する質問に答えるには、書籍と著者の関連付けと、著者と出生地の関連付けの両方を選択し、ソースの文章を取得する際にもその順位を維持します。
検索と回答の再利用の制御
- 検索をいつ停止するかを決定する:生成モデルは蓄積された証拠から検索を提案する一方、Jevは元の質問に回答可能かどうかを判断する。例には、直接的な回答、2ホップの質問、および回答を得られずに検索制限に達する利用不可能な事実が含まれる。
- 検索クエリのルーティング:ドキュメント検索、請求情報検索、メモリ検索のいずれかを選択し、対応するMilvusフィルターを適用する。範囲外のクエリは別の経路をたどる。
- セマンティックキャッシュの再利用の妥当性確認:類似したキャッシュされたリクエストを取得し、その回答が新しいリクエストのタスク、言語、および文脈の要件も満たしているかどうかを確認します。
ナレッジパイプラインの改善と点検
- インデックス作成前のドキュメントのキュレーション:実質的な運用ガイダンスと、宣伝目的や不完全な資料を区別し、それぞれに対して個別のインデックス作成、レビュー、除外処理を行います。
- 検索された文章のスクリーニング:通常のセキュリティアドバイスは保持しつつ、アシスタントを別のサイトへ誘導しようとするテキストを特定します。これは追加のスクリーニング手順であり、セキュリティの保証ではありません。
- 検索エビデンスの評価:文章の関連性、エビデンスが十分かどうか、および回答に根拠のない主張が含まれていないかを判断する。例では、区別を明確にするために、意図的にエビデンスを削除したり、根拠のない記述を追加したりしている。
既製の再ランク付けインターフェース
Milvus Modelは、アプリケーション側のJevRerankFunction を提供します。クエリと候補文書のテキストを渡すと、関連度順にソートされ、元のインデックス付きでスコア付けされた結果を受け取ることができます。これらのインデックスを使用して、Milvusから返されたレコードの順序を変更してください。
Jevの統合がマージされました。現在のAPIについては、実装およびコンストラクタのオプションを参照してください。TYPESAFE_API_KEY を受け入れ、デフォルトではjev-latest となります。この統合を含むパッケージバージョンを使用してください。
現在のラッパーは、クレーム・アンド・エビデンス方式の関連性プロンプトを使用しています。この基準がタスクに適しているか確認してください。メモリ互換性、停止、ルーティングなどのカスタム判定については、リンク先のチュートリアルに従い、TypeSafe APIを直接使用してください。チュートリアルでは、Pythonアプリケーションコードからの直接的なAPI呼び出しが示されています。
Milvusで試してみる
Colabで再ランキングチュートリアルを開き、候補の検索とランキングから始めましょう。ローカル環境のセットアップやチュートリアルの完全な一覧については、コレクションのREADMEを参照してください。
サンプルでは、埋め込み用にGemini API キーを、Jev 用にTypeSafe API キーを使用しています。「agentic-search」チュートリアルでは、クエリおよび回答の生成にも Gemini を使用しています。サンプルテキストはこれらの API プロバイダーに送信されるため、呼び出しによってクレジットが消費される場合があります。
チュートリアルはデフォルトでMilvus Liteを使用して実行され、Milvus サーバーまたはZilliz Cloud への接続オプションが含まれています。どの展開環境においても、作業分担は同じです。Milvus が候補を抽出すると、アプリケーションは関連するテキストを Jev に送信して判定を行います。
これらの例は、独自の基準や閾値を設定するための出発点として扱ってください。関連性スコアが高いからといって回答が正しいとは限らず、また、これらの小規模な教育用データセットでは、本番環境での精度や速度は保証されません。
実装例と評価結果の確認
以下のオープンソースプロジェクトでは、これらのアイデアをより大規模な検索ワークフローに応用しています。リンク先のレポートでは、各実験のデータセット、比較結果、および制限事項について解説されています。
| プロジェクト | 検索のユースケース | Jevの取り組み |
|---|---|---|
| MemSearch | コーディングエージェント向けの永続的なMarkdownメモリ | Jevの実装・評価 |
| ベクトルグラフ RAG | マルチホップ質問に対するベクトルおよびグラフ検索 | Jevの実装・評価 |
| DeepSearcher | 非公開知識に対する反復検索 | 実験実行ツール·検索停止評価(スタンドアロン実験) |
| GPTCache | 互換性のあるリクエストに対する回答の再利用 | Jev実装・評価 |
DeepSearcherの貢献は、スタンドアロンの検索停止実験です。その他の実装リンクは、タスク固有のJev統合を示しています。これらのプロジェクトの結果は、共通のベンチマークとして扱うのではなく、それぞれの評価コンテキストにおいて解釈されるべきです。