
📘 LangChain 기반 RAG 시스템 구축
8편. RAG 프롬프트 최적화 + 문서 재구성(Rewriting) 전략 편
RAG 시스템의 성능은 검색 품질과 LLM 프롬프트 품질이 합쳐져 결정된다.
특히 프롬프트 최적화와 문서 재구성(Rewriting)은 정확도·일관성·속도를 크게 끌어올린다.
이번 편에서는 실무에서 바로 적용할 수 있는 다음 내용을 모두 다룬다.
- RAG 구조에서 프롬프트가 맡는 역할
- RAG 전용 프롬프트 설계 패턴
- 문서 Rewriting 전략(요약, 정규화, 구조화)
- 실제 기업 대규모 문서에 맞춘 최적화 방법
- 템플릿 + 코드 제공
1. 왜 RAG에서 프롬프트 최적화가 중요한가?
LLM이 답변을 잘못하는 경우 대부분 아래 두 경우다:
✔ 1) Retrieval 결과는 충분한데,
LLM이 제대로 읽지 못하거나 문맥을 오해하는 경우.
✔ 2) Retrieval 결과가 부족한데,
LLM이 **hallucination(환각)**으로 빈칸을 채우는 경우.
RAG 프롬프트는 다음 네 가지 역할을 한다:
- LLM에게 “검색 결과를 기반으로만 대답하라”고 강제
- 리라이팅/정규화된 문서 format을 최대한 잘 활용하게 유도
- 답변 구조를 고정해 일관성 유지
- 출처 근거를 밝혀 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 자원 절감 전략
'AI·LLM 엔지니어링' 카테고리의 다른 글
| RAG Vector DB 비교: Chroma, Qdrant, Milvus, pgvector 선택 기준 (0) | 2026.07.15 |
|---|---|
| RAG 비용 최적화 — GPU·CPU 자원 절감으로 운영비 줄이는 법 (0) | 2025.11.27 |
| 〈LangChain 기반 RAG 시스템 구축〉 7편: RAG 장애 대응, 로그 분석, 관찰성(O11y) 구축 (0) | 2025.11.27 |
| 〈LangChain 기반 RAG 시스템 구축〉 6편: RAG 파이프라인 속도 최적화 & 캐싱 전략 편 (0) | 2025.11.27 |
| 〈LangChain 기반 RAG 시스템 구축〉 5편: RAG 평가 자동화 + QA 데이터셋 생성 (0) | 2025.11.27 |