0Pricing
AI Agents · レッスン

ハイブリッド検索のためのメタデータフィルタリング

ベクトル類似度と構造化フィルター(日時、作成者、タグ)を組み合わせ、正確で文脈に即した検索を実現します。

「ハイブリッド検索のためのメタデータフィルタリング」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

フィルタリングの理由

純粋なベクトル検索では、最も類似したK個のチャンクが返されます。たとえそれらが別のテナント、別の言語、または別のドキュメントに属していてもです。

メタデータフィルターによって検索対象を関連するサブセットに絞り込めるため、適合率と再現率の両方を高められます。

メタデータの保存

取り込み時に、すべてのチャンクへメタデータのdictを付加します。

metadata = {
    'tenant_id': 'acme',
    'language': 'en',
    'source': 'help-docs',
    'updated_at': '2024-08-12',
    'tags': ['shipping', 'returns']
}
for k, v in metadata.items():
    print(f"{k}: {v}")

Filtering in Pinecone

results = index.query(
    vector=query_vec,
    top_k=5,
    filter={
        'tenant_id': 'acme',
        'language': 'en'
    }
)

範囲フィルター

ほとんどのベクトルDBは範囲フィルターにも対応しています。

filter = {
    'updated_at': {'$gte': '2024-01-01'},
    'score': {'$gt': 0.5}
}
print(filter)

In and Not-In

filter = {
    'tags': {'$in': ['shipping', 'returns']},
    'archived': {'$ne': True}
}
print(filter)

Qdrantでのフィルタリング

Qdrantには豊富なフィルタリング言語があります。

from qdrant_client.models import Filter, FieldCondition, MatchValue

filter = Filter(must=[
    FieldCondition(key='tenant_id', match=MatchValue(value='acme')),
    FieldCondition(key='language', match=MatchValue(value='en'))
])

results = client.search(
    collection_name='docs',
    query_vector=query_vec,
    query_filter=filter,
    limit=5
)

事前フィルターと事後フィルター

方法は2つあります。

  • 事前フィルター — フィルターを適用してから検索します(正確ですが、メタデータにインデックスがないと遅くなる可能性があります)
  • 事後フィルター — 検索してから一致しない結果を除外します(高速ですが、結果がゼロになる可能性があります)

本番システムでは、適切なメタデータインデックスを使って事前フィルターを行います。

ベクトル + キーワードのハイブリッド検索

セマンティック検索と従来型のBM25キーワード検索を組み合わせます。両方を実行してスコアを統合します(通常は相互順位融合を使います)。

def rrf(vec_results, bm25_results, k=60):
    scores = defaultdict(float)
    for rank, doc in enumerate(vec_results):
        scores[doc.id] += 1 / (k + rank)
    for rank, doc in enumerate(bm25_results):
        scores[doc.id] += 1 / (k + rank)
    return sorted(scores.items(), key=lambda x: -x[1])

マルチテナンシー

SaaSでは、すべてのクエリでtenant_idによるフィルタリングを行う必要があります。検索ラッパーにハードコードして、付け忘れを防いでください。

def search(query, tenant_id, top_k=5):
    return index.query(
        vector=embed(query),
        top_k=top_k,
        filter={'tenant_id': tenant_id}
    )

メタデータによるアクセス制御

ユーザーやロールの権限をメタデータに保存します。

metadata = {
    'visibility': 'public',         # or 'internal', 'restricted'
    'department': 'engineering',
    'allowed_roles': ['engineer', 'manager']
}

# At query time:
filter = {'allowed_roles': {'$contains': current_user_role}}

新しさのブースト

新しいドキュメントを優先するには、より多くの候補を取得してから、新しさに基づいて再スコアリングします。

candidates = index.query(vector=query_vec, top_k=50)
scored = [
    (c.score * recency_factor(c.metadata['updated_at']), c)
    for c in candidates
]
scored.sort(reverse=True)
final = scored[:5]

メタデータのカーディナリティに注意

カーディナリティの高いメタデータ(数百万件の一意な値)は、インデックスを巨大にします。可能な場合は事前に集約してください。たとえば、時間によるフィルタリングには完全なタイムスタンプではなく、年月を保存します。

常に適用するフィルター

マルチテナントエージェントが必ず含めるべきフィルターは何でしょうか。

まとめ

メタデータフィルターによって検索範囲を絞り込めます。ハイブリッド検索(ベクトル + BM25)と組み合わせると、最良の結果が得られます。マルチテナンシーとアクセス制御はこれに依存します。

よくある質問

「ハイブリッド検索のためのメタデータフィルタリング」レッスンは無料ですか?

はい。「ハイブリッド検索のためのメタデータフィルタリング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。

「ハイブリッド検索のためのメタデータフィルタリング」で何を学びますか?

ベクトル類似度と構造化フィルター(日時、作成者、タグ)を組み合わせ、正確で文脈に即した検索を実現します。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

AI Agentsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「ハイブリッド検索のためのメタデータフィルタリング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAI Agentsレッスンでコードを書いて実行できますか?

はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Pinecone、Weaviate、Qdrantの比較
  2. ハイブリッド検索のためのメタデータフィルタリング
  3. ベクトルの更新と削除
  4. 距離指標の選択(cosine、L2、dot)
← AI Agentsに戻る