본문 바로가기

AI·LLM 엔지니어링

〈LangChain 기반 RAG 시스템 구축〉 8편: RAG 프롬프트 최적화 + 문서 재구성(Rewriting) 전략 편

반응형

 

📘 LangChain 기반 RAG 시스템 구축

8편. RAG 프롬프트 최적화 + 문서 재구성(Rewriting) 전략 편 

RAG 시스템의 성능은 검색 품질LLM 프롬프트 품질이 합쳐져 결정된다.
특히 프롬프트 최적화와 문서 재구성(Rewriting)은 정확도·일관성·속도를 크게 끌어올린다.

이번 편에서는 실무에서 바로 적용할 수 있는 다음 내용을 모두 다룬다.

  • RAG 구조에서 프롬프트가 맡는 역할
  • RAG 전용 프롬프트 설계 패턴
  • 문서 Rewriting 전략(요약, 정규화, 구조화)
  • 실제 기업 대규모 문서에 맞춘 최적화 방법
  • 템플릿 + 코드 제공

1. 왜 RAG에서 프롬프트 최적화가 중요한가?

LLM이 답변을 잘못하는 경우 대부분 아래 두 경우다:

✔ 1) Retrieval 결과는 충분한데,

LLM이 제대로 읽지 못하거나 문맥을 오해하는 경우.

✔ 2) Retrieval 결과가 부족한데,

LLM이 **hallucination(환각)**으로 빈칸을 채우는 경우.


RAG 프롬프트는 다음 네 가지 역할을 한다:

  1. LLM에게 “검색 결과를 기반으로만 대답하라”고 강제
  2. 리라이팅/정규화된 문서 format을 최대한 잘 활용하게 유도
  3. 답변 구조를 고정해 일관성 유지
  4. 출처 근거를 밝혀 Hallucination 방지

2. RAG 최적화용 프롬프트 구조(정석)

아래는 기업 환경에서 가장 효과적인 구조다.


[SYSTEM] 역할/제약/출처 요구사항 명시

당신은 기업 내부 문서 기반으로 질문에 정확하게 답변하는 AI입니다.
답변은 반드시 제공된 문서(Context)에서 근거를 찾아 작성하세요.

금지:
- Context에 없는 사실을 추정하여 답변 금지
- 개인적 의견 금지
- 문서와 다르면 반드시 "정보 없음"으로 답변

출력:
- 최종 답변
- 문서 출처 목록

[CONTEXT] 검색된 문서 목록

<context>
{{retrieved_docs}}
</context>

[USER] 실제 질문

질문: {{user_query}}

[ASSISTANT] 출력 포맷

[답변]
...

[출처]
- 문서명: …
- 문서명: …

3. 섹션별 프롬프트 개선 방법

✔ 1) SYSTEM 메시지 — 절대적 기준을 고정

  • “추정 금지”
  • “근거 기반”
  • “정확한 출처”
    이 세 가지가 hallucination을 70% 이상 줄인다.

✔ 2) CONTEXT — 정규화된 포맷이 중요

retrieved docs는 다음과 같이 정제해서 넣는 것이 가장 좋다.

[문서명: A_정책문서]
- 내용 1
- 내용 2

[문서명: B_업무가이드]
- 내용 1
- 내용 2

문서 원문 전체를 그대로 넣는 것은 절대 비추천이다.
구조화가 핵심이다.

✔ 3) OUTPUT FORMAT — 일관성 확보

서비스 QA·모니터링에서 대답 포맷이 반드시 일정해야 한다.


4. 문서 재구성(Rewriting) 전략 — 정확도 2배 향상

기업 문서는 대부분 아래와 같은 문제를 갖는다.

  • 문단이 너무 길음
  • 계층 구조가 없거나 엉망
  • 시간에 따라 내용이 뒤섞임
  • PDF 변환으로 구조가 깨져 있음
  • 표/목록/코드가 섞여 있음

이를 해결하는 것이 **문서 Rewriting(재구성)**이다.
Rewriting은 4단계로 구성된다.


1) 정규화(Normalization)

  • 제목, 소제목 구조 정리
  • 표/코드/리스트를 별도 섹션으로 분리
  • 날짜·버전 패턴 통일
  • 기업 내 문서 형식 통일

2) 분해(Chunking)

문서 chunk는 다음과 같이 나누는 것이 실무 최적이다:

  • semantic splitting
  • section 기반 splitting
  • 표/코드는 별도 chunk
  • chunk overlap: 80~120 token

3) 압축(Summarization)

LLM 사용 시, chunk가 길수록 성능이 떨어진다.
chunk당 다음 요약 포맷이 효과적이다.

[핵심 요약]
- 주요 정책 요약
- 중요한 숫자/규정
- 적용 대상
- 유의사항

4) 중요한 문서는 QA Pair 생성(Rewriting for QA)

FAQ/예시질문/케이스 기반 QA를 자동 생성해
retrieval 품질을 원천적으로 높일 수 있다.


5. Rewriting 파이프라인 예시(LangChain)

from langchain.prompts import ChatPromptTemplate
from langchain.schema import Document
from langchain.chat_models import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini")

rewrite_prompt = ChatPromptTemplate.from_template("""
다음 문서를 RAG 검색에 최적화된 형태로 재구성하세요.

요구사항:
- 핵심 요약 포함
- 계층 구조 명확히
- 표/코드/리스트는 별도 블록으로 분리
- 답변은 JSON 형태로 제공

문서:
{content}
""")

def rewrite_document(text):
    result = llm.invoke(rewrite_prompt.format(content=text))
    return Document(page_content=result.content)

6. 프롬프트 최적화를 통한 문제 해결 실사례

❗ 문제 1: 같은 질문에 답변이 매번 달라짐

→ 출력 포맷 명시 + 정규화된 문서 적용으로 해결

❗ 문제 2: 문서 없는 내용을 환각으로 생성

→ “추정 금지” + 출처 요구 → hallucination 60~70% 감소

❗ 문제 3: 특정 섹션만 읽고 뒤쪽 문서를 무시

→ 문서 Rewriting에서 “핵심요약”을 앞에 배치하여 해결


7. 실전 프롬프트 템플릿(완성본)

System

당신은 기업 내부 문서 기반으로만 답변하는 전문 AI입니다.
Context 외 정보는 절대 생성하지 않습니다.
출처를 반드시 답변에 포함하세요.

Template

<context>
{{context}}
</context>

질문:
{{query}}

출력 포맷:
[답변]
...

[출처]
- 문서명: …

8. 실전 팁(3개)

💡 팁 1 — “추정 금지 + 출처 표기”는 가장 강력한 Hallucination 방지

두 줄의 문구만 넣어도 정확도가 현저히 올라간다.


💡 팁 2 — 문서 Rewriting은 RAG 전체 품질의 50%

Retrieval을 튜닝하기 전 문서 품질부터 개선하는 것이 더 효과적이다.


💡 팁 3 — chunk는 길게 만드는 것이 아니라 “의미 단위로 명확하게”

token 길이보다
정확한 구조화가 성능을 결정한다.


9. 다음 편 예고

📌 9편. RAG 시스템 비용 최적화 + GPU/CPU 자원 절감 전략

 

반응형