RAG2026-5일30차시 · 질의 재작성 및 재검색16 / 19← 이전목차다음 →MetaContents

30차시. 질의 재작성 및 재검색

퀴즈 1 — question은 두고 query만 바꾸는 rewrite

원문 question은 두고 query와 tried_queries만 갱신하세요.

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

Python
def rewrite(state, new_query):
    pass
결과 보기 (예시 풀이)
Python
# 검색어(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는 새 항목 리스트다.

관련 교안: 30차시 「3. question과 query를 나눈 이유」

← 이전 절30차시 · 실습 1 — 질의 재작성 및 재검색 실습 따라 하기다음 절 →30차시 · 퀴즈 2 — 이미 시도한 검색어 걸러내기