RAG2026-5일24차시 · Retriever Node 분리16 / 18← 이전목차다음 →MetaContents

24차시. Retriever Node 분리

퀴즈 2 — 빈 검색어면 검색 없이 empty_query 돌려주기

빈 검색어면 검색을 하지 않고 empty_query를 반환하세요.

빈칸 코드에서 시작합니다.

Python
def retrieve(query, search):
    pass
결과 보기 (예시 풀이)
Python
# 검색 함수를 인자로 받아 부르는 작은 retrieve 입니다.
# 진짜 벡터 검색 대신 아래의 가짜 검색 함수를 넘겨 테스트합니다.
def retrieve(query, search):
    # 검색어가 None 이거나 공백뿐이면 검색을 부르지 않고 바로 돌려줍니다.
    if not query or not str(query).strip():
        return {"documents": [], "retrieval_ok": False, "fail_reason": "empty_query"}

    # 검색어가 있을 때만 검색합니다.
    docs = search(query)
    # 결과가 비면 no_result, 있으면 정상
    return {"documents": docs, "retrieval_ok": bool(docs),
            "fail_reason": "" if docs else "no_result"}

# 가짜 검색: '환불'이 들어간 질문에만 조각을 돌려줍니다.
# 불릴 때마다 한 줄을 찍어, 정말 불렸는지 눈으로 확인합니다.
def fake_search(query):
    print("   (검색 호출됨:", query, ")")
    return ["환불 조항 조각"] if "환불" in query else []

# 확인 1: 정상 검색어 → 검색이 불리고 문서 1건
print(retrieve("환불은 며칠 이내인가요?", fake_search))

# 확인 2: 공백뿐인 검색어 → '검색 호출됨'이 찍히지 않아야 합니다
print(retrieve("   ", fake_search))

# 확인 3: 검색은 했지만 결과가 없음 → no_result
print(retrieve("대표이사가 누구인가요?", fake_search))

실행 결과

출력
   (검색 호출됨: 환불은 며칠 이내인가요? )
{'documents': ['환불 조항 조각'], 'retrieval_ok': True, 'fail_reason': ''}
{'documents': [], 'retrieval_ok': False, 'fail_reason': 'empty_query'}
   (검색 호출됨: 대표이사가 누구인가요? )
{'documents': [], 'retrieval_ok': False, 'fail_reason': 'no_result'}

채점 기준: query가 비어 있으면 search를 호출하면 안 된다.

관련 교안: 24차시 「3. 실습 ① — Retriever Node 완성」

← 이전 절24차시 · 퀴즈 1 — 점수로 검색 성공과 실패 이유 가르기다음 절 →24차시 · 정리