하이브리드 검색을 위한 메타데이터 필터링
벡터 유사도와 구조화된 필터(날짜, 작성자, 태그)를 결합해 정확하고 맥락에 맞는 검색을 구현해보세요.
하이브리드 검색을 위한 메타데이터 필터링은(는) CoddyKit의 무료 AI Agents 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Agents 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.
이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.
필터링이 필요한 이유
순수 벡터 검색은 가장 유사한 K개 청크를 반환하지만, 해당 청크가 잘못된 테넌트, 잘못된 언어 또는 잘못된 문서에 속해 있을 수도 있습니다.
메타데이터 필터는 검색 범위를 관련 하위 집합으로 제한하여 정밀도 AND 재현율을 높여 줍니다.
메타데이터 저장
데이터를 수집할 때 모든 청크에 메타데이터 딕셔너리를 연결하십시오:
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'
}
)범위 필터
대부분의 벡터 데이터베이스는 범위 필터도 지원합니다:
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)
큐드런트에서 필터링하기
큐드런트에는 풍부한 필터링 언어가 있습니다:
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
)사전 필터와 사후 필터
두 가지 전략이 있습니다:
- 사전 필터 — 필터를 적용한 THEN 검색(정확하지만 색인된 메타데이터가 없으면 느릴 수 있음)
- 사후 필터 — 검색한 다음 일치하지 않는 항목을 제거(빠르지만 결과가 없을 수 있음)
운영 환경의 시스템은 적절한 메타데이터 색인을 사용해 사전 필터를 적용합니다.
하이브리드 벡터 + 키워드
의미 검색과 기존 BM25 키워드 search를 결합하십시오. 두 검색을 모두 실행한 다음 점수를 결합합니다(상호 순위 융합이 표준 방식입니다):
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에서는 EVERY query에 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]메타데이터 카디널리티에 주의하십시오
카디널리티가 높은 메타데이터(고유 값이 수백만 개)는 색인을 크게 만듭니다. 가능하면 미리 집계하십시오. 예를 들어 시간 필터링에 전체 타임스탬프 대신 연-월을 저장할 수 있습니다.
항상 적용하는 필터
멀티테넌트 에이전트가 ALWAYS 포함해야 하는 필터는 무엇입니까?
복습
메타데이터 필터는 검색 범위를 제한합니다. 최상의 결과를 얻으려면 하이브리드 검색(벡터 + BM25)과 결합하십시오. 멀티테넌시와 접근 제어는 이에 의존합니다.
자주 묻는 질문
“하이브리드 검색을 위한 메타데이터 필터링” 강의는 무료인가요?
네 — “하이브리드 검색을 위한 메타데이터 필터링” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Agents 강의 전체를 잠금 해제할 수 있습니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.
“하이브리드 검색을 위한 메타데이터 필터링”에서 뭘 배우나요?
벡터 유사도와 구조화된 필터(날짜, 작성자, 태그)를 결합해 정확하고 맥락에 맞는 검색을 구현해보세요. 브라우저에서 직접 실행하는 실습 코드로 AI Agents을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
AI Agents을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 AI Agents은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“하이브리드 검색을 위한 메타데이터 필터링” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 AI Agents 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 AI Agents 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Pinecone, Weaviate, Qdrant 비교
- 하이브리드 검색을 위한 메타데이터 필터링
- 벡터 업데이트 및 삭제
- 거리 측정 기준 선택(코사인, L2, 내적)