AI-agenter · leksjon

Metadatafiltrering for hybridsøk

Kombiner vektorlikhet med strukturerte filtre (dato, forfatter, tagg) for presis og kontekstuell gjenfinning.

Leksjon 2 av 414 trinn

Metadatafiltrering for hybridsøk er en gratis leksjon i AI-agenter på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i AI-agenter, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i AI-agenter inneholder totalt 4 leksjoner.

Deler av denne leksjonen er ennå ikke oversatt og vises på engelsk.

Hvorfor filtrere?

Et rent vektorsøk returnerer de K mest liknende tekstbitene — selv om de tilhører feil tenant, feil språk eller feil dokument.

Metadatafiltre avgrenser søket til relevante delmengder, slik at du får både presisjon OG recall.

Lagring av metadata

Knytt en metadataordbok til hver tekstbit ved innlesing:

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'
    }
)

Intervallfiltre

De fleste vektordatabaser støtter også intervallfiltre:

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)

Filtrering i Qdrant

Qdrant har et rikt filtreringsspråk:

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
)

Forhåndsfiltrering kontra etterfiltrering

To strategier:

  • Forhåndsfiltrering — bruk filteret FØR søket (korrekt, men kan være tregt uten indeksert metadata)
  • Etterfiltrering — søk og fjern deretter treff som ikke samsvarer (raskt, men kan returnere null resultater)

Produksjonssystemer bruker forhåndsfiltrering med riktige metadataindekser.

Hybrid vektor + nøkkelord

Kombiner semantisk søk med klassisk BM25-nøkkelordsøk. Kjør begge, og kombiner poengene (reciprocal rank fusion er standarden):

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])

Støtte for flere leietakere

I SaaS må ALLE spørringer filtreres med tenant_id. Hardkod dette i innhentingslaget, slik at det ikke kan glemmes:

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

Tilgangskontroll via metadata

Lagre bruker- og rolletillatelser i metadata:

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

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

Prioritering av nyere innhold

Hvis du vil prioritere nyere dokumenter, henter du først flere kandidater og beregner deretter poengene på nytt basert på aktualitet:

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]

Følg med på metadatakardinaliteten

Metadata med høy kardinalitet (millioner av unike verdier) gjør indeksene enorme. Aggreger på forhånd når det er mulig — lagre for eksempel år-måned i stedet for et fullstendig tidsstempel ved tidsfiltrering.

Alltid aktivt filter

Hvilket filter skal alle agenter med flere leietakere ALLTID inkludere?

Oppsummering

Metadatafiltre avgrenser søket. Kombiner dem med hybrid (vektor + BM25) for best mulig resultat. Støtte for flere leietakere og tilgangskontroll bygger på dette.

Gratis å komme i gang

Lær deg AI-agenter med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
60
Leksjoner
239

Ofte stilte spørsmål

Er leksjonen «Metadatafiltrering for hybridsøk» gratis?

Ja – hele teksten i «Metadatafiltrering for hybridsøk» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av AI-agenter-kurset, kan du oppgradere til CoddyKit PRO. Kurset i AI-agenter inneholder totalt 4 leksjoner.

Hva lærer jeg i «Metadatafiltrering for hybridsøk»?

Kombiner vektorlikhet med strukturerte filtre (dato, forfatter, tagg) for presis og kontekstuell gjenfinning. Du øver på AI-agenter med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med AI-agenter?

Ingen tidligere erfaring er nødvendig. AI-agenter på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Metadatafiltrering for hybridsøk»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne AI-agenter-leksjonen?

Ja. Alle AI-agenter-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Pinecone, Weaviate, Qdrant: sammenligning
  2. Metadatafiltrering for hybridsøk
  3. Oppdatere og slette vektorer
  4. Velge avstandsmål (cosine, L2, dot)
← Tilbake til AI-agenter