Pemfilteran Metadata untuk Pencarian Hibrida
Gabungkan kemiripan vektor dengan filter terstruktur (tanggal, penulis, tag) untuk mendapatkan pengambilan yang tepat dan kontekstual.
Pemfilteran Metadata untuk Pencarian Hibrida adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
Mengapa Melakukan Penyaringan?
search vektor murni mengembalikan K potongan yang paling mirip — meskipun potongan tersebut berasal dari penyewa, bahasa, atau dokumen yang salah.
Penyaring metadata membatasi cakupan search pada subset yang relevan, sehingga memberi Anda precision AND recall.
Menyimpan Metadata
Lampirkan kamus metadata ke setiap potongan saat memasukkan data:
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'
}
)Penyaring Rentang
Sebagian besar basis data vektor juga mendukung penyaring rentang:
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)
Penyaringan di Qdrant
Qdrant memiliki bahasa penyaringan yang kaya:
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
)Penyaringan Awal vs Penyaringan Akhir
Dua strategi:
- Penyaringan awal — terapkan penyaring THEN lakukan search (benar, tetapi dapat lambat tanpa metadata yang diindeks)
- Penyaringan akhir — lakukan search lalu buang hasil yang tidak cocok (cepat, tetapi dapat mengembalikan nol hasil)
Sistem produksi melakukan penyaringan awal dengan indeks metadata yang sesuai.
Vektor Hibrida + Kata Kunci
Gabungkan search semantik dengan search kata kunci klasik BM25. Jalankan keduanya, lalu gabungkan skornya (penggabungan peringkat timbal balik adalah metode standar):
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])Multitenansi
Dalam SaaS, EVERY query harus disaring berdasarkan ID penyewa. Tanamkan aturan ini secara permanen dalam pembungkus pengambilan data Anda agar tidak dapat terlupakan:
def search(query, tenant_id, top_k=5):
return index.query(
vector=embed(query),
top_k=top_k,
filter={'tenant_id': tenant_id}
)Kontrol Akses melalui Metadata
Simpan izin pengguna/peran dalam metadata:
metadata = {
'visibility': 'public', # or 'internal', 'restricted'
'department': 'engineering',
'allowed_roles': ['engineer', 'manager']
}
# At query time:
filter = {'allowed_roles': {'$contains': current_user_role}}Peningkatan Berdasarkan Kebaruan
Untuk mengutamakan dokumen yang lebih baru, ambil lebih banyak kandidat lalu hitung ulang skornya berdasarkan kebaruan:
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]Perhatikan Kardinalitas Metadata
Metadata berkardinalitas tinggi (jutaan nilai unik) membuat indeks menjadi sangat besar. Lakukan agregasi awal jika memungkinkan — misalnya, simpan tahun-bulan, bukan stempel waktu lengkap, untuk penyaringan berdasarkan waktu.
Penyaring yang Selalu Aktif
Penyaring apa yang harus ALWAYS disertakan oleh setiap agen multitenansi?
Ringkasan
Penyaring metadata membatasi cakupan search Anda. Gabungkan dengan hybrid (vektor + BM25) untuk mendapatkan hasil terbaik. Multitenansi dan kontrol akses bergantung pada hal ini.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pemfilteran Metadata untuk Pencarian Hibrida” gratis?
Ya — teks lengkap “Pemfilteran Metadata untuk Pencarian Hibrida” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pemfilteran Metadata untuk Pencarian Hibrida”?
Gabungkan kemiripan vektor dengan filter terstruktur (tanggal, penulis, tag) untuk mendapatkan pengambilan yang tepat dan kontekstual. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AI Agents?
Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Pemfilteran Metadata untuk Pencarian Hibrida” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?
Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pinecone, Weaviate, Qdrant: Perbandingan
- Pemfilteran Metadata untuk Pencarian Hibrida
- Memperbarui dan Menghapus Vektor
- Memilih Metrik Jarak (cosine, L2, dot)