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

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

4. 실습 ① — Rewrite 프롬프트

출처: 원본 PDF 30차시_재작성노드실습.pdf 8쪽 · 쪽 그림 8쪽

📝 prompts.py에 추가

출력
REWRITE_PROMPT = ChatPromptTemplate.from_template(
    "당신은 문서 검색을 돕는 질의 재작성 전문가입니다.\n"
    "아래 질문으로 문서를 검색했지만 관련 자료를 찾지 못했습니다.\n"
    "검색이 더 잘 되도록 질의를 다시 작성하십시오.\n\n"
    "[원본 질문]\n{question}\n\n"
    "[이미 시도한 질의 - 반복하지 마십시오]\n{tried}\n\n"
    "[실패 이유]\n{reason}\n\n"
    "[재작성 규칙]\n"
    "1. 일상적 표현을 문서에서 쓸 법한 공식 용어로 바꾸십시오.\n"
    "   예) 반품 -> 환불 / 택배비 -> 배송비 / 비번 -> 비밀번호\n"
    "2. 구어체를 문어체로 바꾸십시오.\n"
    "3. 군더더기를 빼고 핵심 명사 위주로 3~8단어로 압축하십시오.\n"
    "4. 원본의 의미를 바꾸지 마십시오.\n"
    "5. 이미 시도한 질의와 다르게 작성하십시오.\n\n"
    "[출력 - 재작성된 질의만 한 줄로. 다른 말 금지]"
)

⚠️ 규칙 4번이 가장 중요합니다
"원본의 의미를 바꾸지 마십시오"
이게 없으면 LLM이 질문을 확대 해석합니다.
"반품 언제까지?" → "환불 및 교환 규정 전반"
→ 엉뚱한 문서가 검색됩니다
재작성은 표현만 바꾸는 것이지
질문의 범위를 넓히는 것이 아닙니다.

4-1) tried 목록이 필요한 이유

🔁 같은 재작성이 반복되는 문제
1회차 재작성: "환불 신청 기한" → 실패
2회차 재작성: "환불 신청 기한" → 똑같음!
LLM은 같은 입력에 같은 출력을 냅니다(temperature=0).
그래서 이미 시도한 질의를 알려주고
"다르게 써라"고 지시해야 합니다.
이를 위해 State에 tried_queries를 누적합니다.
18차시에서 배운 Reducer가 여기서 쓰입니다.

← 이전 절30차시 · 3. question과 query를 나눈 이유다음 절 →30차시 · 5. 실습 ② — Rewrite Node 구현