15차시. 기본 RAG 앱 만들기
퀴즈 2 — 빈 질문이면 검색하지 않고 안내만
빈 질문이면 검색을 호출하지 않고 안내만 반환하세요.
빈칸 코드에서 시작합니다.
def guard(question, search):
pass결과 보기 (예시 풀이)
def guard(question, search):
# None이거나, 공백을 걷어 내면 아무것도 없는 질문은 검색하지 않습니다.
if not question or not question.strip():
return {"answer": "질문을 입력하세요", "sources": []}
# 내용이 있는 질문만 검색 함수에 넘깁니다.
return search(question)
# 가짜 검색 함수입니다. 불린 횟수를 세어 검색이 호출됐는지 확인합니다.
calls = []
def fake_search(q):
calls.append(q)
return {"answer": f"'{q}' 검색 결과", "sources": [{"file": "manual.pdf", "page": 2}]}
# 공백만 있는 질문 -> 안내만 나오고 검색은 불리지 않아야 합니다.
print(guard(" ", fake_search))
print("검색 호출 횟수:", len(calls))
# 빈 문자열과 None도 같습니다.
print(guard("", fake_search))
print(guard(None, fake_search))
print("검색 호출 횟수:", len(calls))
# 내용이 있는 질문 -> 이번에는 검색이 한 번 불립니다.
print(guard("환불은 며칠 이내인가요?", fake_search))
print("검색 호출 횟수:", len(calls))
실행 결과
{'answer': '질문을 입력하세요', 'sources': []}
검색 호출 횟수: 0
{'answer': '질문을 입력하세요', 'sources': []}
{'answer': '질문을 입력하세요', 'sources': []}
검색 호출 횟수: 0
{'answer': "'환불은 며칠 이내인가요?' 검색 결과", 'sources': [{'file': 'manual.pdf', 'page': 2}]}
검색 호출 횟수: 1채점 기준: strip 후 빈 문자열이면 search를 호출하면 안 된다.