24차시. Retriever Node 분리
퀴즈 2 — 빈 검색어면 검색 없이 empty_query 돌려주기
빈 검색어면 검색을 하지 않고 empty_query를 반환하세요.
빈칸 코드에서 시작합니다.
def retrieve(query, search):
pass결과 보기 (예시 풀이)
# 검색 함수를 인자로 받아 부르는 작은 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를 호출하면 안 된다.