0Pricing
AI Agents · Lekcja

Filtrowanie metadanych w wyszukiwaniu hybrydowym

Połącz podobieństwo wektorowe z filtrami strukturalnymi (data, autor, tag), aby uzyskać precyzyjne wyszukiwanie uwzględniające kontekst.

Filtrowanie metadanych w wyszukiwaniu hybrydowym to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.

Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.

Po co filtrowanie?

Czyste wyszukiwanie wektorowe zwraca K najbardziej podobnych fragmentów — nawet jeśli należą one do niewłaściwego dzierżawcy, są w niewłaściwym języku lub pochodzą z niewłaściwego dokumentu.

Filtry metadanych ograniczają wyszukiwanie do odpowiednich podzbiorów, zapewniając precyzję ORAZ czułość.

Przechowywanie metadanych

Podczas ingestii należy dołączyć słownik metadanych do każdego fragmentu:

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

Filtry zakresu

Większość wektorowych baz danych obsługuje również filtry zakresu:

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)

Filtrowanie w Qdrant

Qdrant ma bogaty język filtrowania:

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
)

Pre-filter a post-filter

Istnieją dwie strategie:

  • Pre-filter — najpierw zastosuj filtr, A NASTĘPNIE wyszukuj (poprawne, ale może być powolne bez zindeksowanych metadanych)
  • Post-filter — wyszukaj, a następnie odrzuć niepasujące wyniki (szybkie, ale może zwrócić zero wyników)

Systemy produkcyjne stosują pre-filter przy użyciu odpowiednich indeksów metadanych.

Hybrydowe wyszukiwanie wektorowe i słów kluczowych

Połącz wyszukiwanie semantyczne z klasycznym wyszukiwaniem słów kluczowych BM25. Uruchom oba rodzaje wyszukiwania i połącz wyniki (standardem jest reciprocal rank fusion):

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

Obsługa wielu dzierżawców

W systemie SaaS KAŻDE zapytanie musi być filtrowane według tenant_id. Należy zakodować ten filtr na stałe w wrapperze wyszukiwania, aby nie można było o nim zapomnieć:

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

Kontrola dostępu za pomocą metadanych

Uprawnienia użytkowników i ról należy przechowywać w metadanych:

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

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

Premiowanie aktualności

Aby preferować nowsze dokumenty, należy pobrać więcej kandydatów, a następnie ponownie ocenić ich według aktualności:

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]

Uwaga na kardynalność metadanych

Metadane o wysokiej kardynalności (miliony unikalnych wartości) powodują, że indeksy stają się ogromne. Jeśli to możliwe, należy agregować dane wstępnie — na przykład przechowywać rok i miesiąc zamiast pełnego znacznika czasu do filtrowania po czasie.

Filtr zawsze aktywny

Jaki filtr powinien ZAWSZE zawierać każdy agent obsługujący wielu dzierżawców?

Podsumowanie

Filtry metadanych ograniczają zakres wyszukiwania. Należy połączyć je z wyszukiwaniem hybrydowym (wektorowym + BM25), aby uzyskać najlepsze wyniki. Obsługa wielu dzierżawców i kontrola dostępu opierają się na tym mechanizmie.

Często zadawane pytania

Czy lekcja „Filtrowanie metadanych w wyszukiwaniu hybrydowym” jest bezpłatna?

Tak — pełny tekst „Filtrowanie metadanych w wyszukiwaniu hybrydowym” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.

Co nauczysz się w „Filtrowanie metadanych w wyszukiwaniu hybrydowym”?

Połącz podobieństwo wektorowe z filtrami strukturalnymi (data, autor, tag), aby uzyskać precyzyjne wyszukiwanie uwzględniające kontekst. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć AI Agents?

Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Filtrowanie metadanych w wyszukiwaniu hybrydowym”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?

Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Pinecone, Weaviate, Qdrant: porównanie
  2. Filtrowanie metadanych w wyszukiwaniu hybrydowym
  3. Aktualizowanie i usuwanie wektorów
  4. Wybór miar odległości (cosinusowa, L2, iloczyn skalarny)
← Powrót do AI Agents