RAG2026-5일11차시 · Retriever 기초 실습9 / 18← 이전목차다음 →MetaContents

11차시. Retriever 기초 실습

6. 실습 ③ — metadata 필터로 범위 좁히기

출처: 원본 PDF 11차시_Retriever기초실습.pdf 13~14쪽 · 쪽 그림 13쪽 14쪽

6차시에서 metadata에 category를 넣어둔 것을 기억하시나요? 이제 쓸 차례입니다.

📝 조건 검색

Python
# 인사규정 문서에서만 검색
retriever = store.as_retriever(
    search_kwargs={
        "k": 3,
        "filter": {"category": "인사규정"},
    }
)
docs = retriever.invoke("휴가는 며칠인가요?")

# 특정 파일에서만 검색
retriever = store.as_retriever(
    search_kwargs={
        "k": 3,
        "filter": {"filename": "2026_취업규칙.pdf"},
    }
)

🎯 필터가 유용한 상황
① 문서가 여러 종류일 때
인사규정 · 영업매뉴얼 · 제품설명서가 한 인덱스에
→ 질문 주제에 맞는 것만 검색
② 최신 문서만 봐야 할 때
metadata에 year를 넣어두고 2026년 것만 필터
③ 권한 제어가 필요할 때
사용자 부서와 문서 부서를 맞춰 필터
④ 검색 정확도를 올리고 싶을 때
범위가 좁아지면 엉뚱한 문서가 섞일 확률이 줄어듭니다

⚠️ FAISS의 필터 한계
FAISS는 필터 기능이 단순합니다.
"이 값과 정확히 일치" 정도만 됩니다.
복잡한 조건이 필요하다면
(예: "2024년 이후 AND 인사팀 OR 총무팀")
→ Chroma나 Qdrant로 바꾸는 것을 고려하세요.
10차시에서 배웠듯이 코드는 거의 그대로입니다.

← 이전 절11차시 · 5. 실습 ② — Top-K 실험다음 절 →11차시 · 7. 실습 ④ — 문맥 조립하기