30차시. 질의 재작성 및 재검색
퀴즈 1 — question은 두고 query만 바꾸는 rewrite
원문 question은 두고 query와 tried_queries만 갱신하세요.
빈칸 코드에서 시작합니다.
def rewrite(state, new_query):
pass결과 보기 (예시 풀이)
# 검색어(query)만 바꾸고, 사용자가 친 원문(question)은 돌려주지 않습니다.
def rewrite(state, new_query):
return {
"query": new_query,
# 새 항목 하나만 리스트로 줍니다. 앞의 기록에 이어 붙이는 일은 reducer 가 합니다.
"tried_queries": [new_query],
"rewrites": state.get("rewrites", 0) + 1,
}
# 그래프가 노드의 반환값을 State 에 합치는 방식을 흉내 냅니다.
def merge(state, update):
new_state = dict(state)
for key, value in update.items():
if key == "tried_queries":
# tried_queries 는 operator.add 처럼 이어 붙입니다.
new_state[key] = state.get(key, []) + value
else:
new_state[key] = value
return new_state
q = "반품하고 싶은데 언제까지 가능해요?"
state = {"question": q, "query": q, "tried_queries": [q], "rewrites": 0}
# 1회차 재작성
update = rewrite(state, "환불 신청 기한 규정")
print("반환값:", update)
# 반환값에 question 이 없어야 합니다.
print("question 을 돌려주는가:", "question" in update)
state = merge(state, update)
# 2회차 재작성
state = merge(state, rewrite(state, "환불 가능 기간"))
# question 은 처음 그대로, query 는 마지막 검색어, tried_queries 는 세 개가 쌓여야 합니다.
print("question:", state["question"])
print("query:", state["query"])
print("tried_queries:", state["tried_queries"])
print("rewrites:", state["rewrites"])
실행 결과
반환값: {'query': '환불 신청 기한 규정', 'tried_queries': ['환불 신청 기한 규정'], 'rewrites': 1}
question 을 돌려주는가: False
question: 반품하고 싶은데 언제까지 가능해요?
query: 환불 가능 기간
tried_queries: ['반품하고 싶은데 언제까지 가능해요?', '환불 신청 기한 규정', '환불 가능 기간']
rewrites: 2채점 기준: question을 return하면 오답이다. tried_queries는 새 항목 리스트다.