Tekoälyagentit · Oppitunti

Metatietosuodatus yhdistelmähakua varten

Yhdistäkää vektorien samankaltaisuus rakenteisiin suodattimiin (päivämäärä, tekijä, tunniste), jotta saatte tarkkoja ja kontekstiin sopivia hakutuloksia.

Oppitunti 2/414 vaihetta

Metatietosuodatus yhdistelmähakua varten on ilmainen Tekoälyagentit-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Tekoälyagentit-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.

Osaa tämän oppitunnin sisällöstä ei ole vielä käännetty, joten se näytetään englanniksi.

Miksi suodattaa?

Pelkällä vektorihaulla palautetaan K samankaltaisinta tekstikatkelmaa — vaikka ne kuuluisivat väärälle tenantille, olisivat väärällä kielellä tai väärästä dokumentista.

Metatietosuodattimet rajaavat haun olennaisiin osajoukkoihin ja parantavat sekä tarkkuutta ETTÄ kattavuutta.

Metatietojen tallentaminen

Liittäkää jokaiseen ingestoinnin yhteydessä käsiteltävään tekstikatkelmaan metatietosanakirja:

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

Alueen suodattimet

Useimmat vektoritietokannat tukevat myös alueen suodattimia:

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)

Suodatus Qdrantissa

Qdrantissa on monipuolinen suodatuskieli:

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
)

Esi- ja jälkisuodatus

Kaksi strategiaa:

  • Esi-suodatus — suodatus tehdään ENNEN hakua (oikein, mutta voi olla hidasta ilman indeksoituja metatietoja)
  • Jälkisuodatus — haetaan ensin ja poistetaan sitten hakuehtoon sopimattomat tulokset (nopea, mutta tuloksia voi tulla nolla)

Tuotantojärjestelmissä käytetään esi-suodatusta asianmukaisten metatietoindeksien avulla.

Hybridi vektori- ja avainsanahaku

Yhdistäkää semanttinen haku perinteiseen BM25-avainsanahakuun. Suorittakaa molemmat ja yhdistäkää pisteet (vastavuoroinen sijoitusten yhdistäminen on vakiomenetelmä):

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

Moniasiakkuus

SaaS-palvelussa JOKAISEN kyselyn on sisällettävä tenant_id-suodatus. Kovakoodatkaa se hakukerrokseenne, jotta sitä ei voi unohtaa:

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

Käyttöoikeuksien hallinta metatietojen avulla

Tallentakaa käyttäjien ja roolien käyttöoikeudet metatietoihin:

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

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

Tuoreuskorotus

Jos haluatte suosia uudempia dokumentteja, hakekaa ensin enemmän ehdokkaita ja laskekaa niiden pisteet sitten uudelleen tuoreuden perusteella:

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]

Seuratkaa metatietojen kardinaliteettia

Metatiedot, joiden kardinaliteetti on suuri (miljoonia yksilöllisiä arvoja), tekevät indekseistä valtavia. Esikoostakaa tiedot aina kun mahdollista — tallentakaa esimerkiksi aikasuodatusta varten vuosi-kuukausi täyden aikaleiman sijaan.

Aina käytettävä suodatin

Mikä suodatin jokaisen moniasiakkaisen agentin on sisällytettävä AINA?

Kertaus

Metatietosuodattimet rajaavat hakua. Yhdistäkää ne hybridi-hakuun (vektori + BM25), niin saatte parhaat tulokset. Moniasiakkuus ja käyttöoikeuksien hallinta perustuvat tähän.

Aloita maksutta

Opi Tekoälyagentit tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
60
Oppitunnit
239

Usein kysytyt kysymykset

Onko oppitunti ”Metatietosuodatus yhdistelmähakua varten” ilmainen?

Kyllä – oppitunnin ”Metatietosuodatus yhdistelmähakua varten” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Tekoälyagentit-kurssin, päivitä CoddyKit PROhon. Tekoälyagentit-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Metatietosuodatus yhdistelmähakua varten”?

Yhdistäkää vektorien samankaltaisuus rakenteisiin suodattimiin (päivämäärä, tekijä, tunniste), jotta saatte tarkkoja ja kontekstiin sopivia hakutuloksia. Harjoittelet Tekoälyagentit-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Tekoälyagentit-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Tekoälyagentit-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Metatietosuodatus yhdistelmähakua varten”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Tekoälyagentit-oppitunnilla?

Kyllä. Jokainen Tekoälyagentit-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Pinecone, Weaviate ja Qdrant: vertailu
  2. Metatietosuodatus yhdistelmähakua varten
  3. Vektorien päivittäminen ja poistaminen
  4. Etäisyysmittareiden valinta (cosine, L2, dot)
← Takaisin: Tekoälyagentit