컨텍스트 제공이 출력 품질을 결정하는 원리를 이해하고, RAG(검색 증강 생성) 아키텍처의 개념과 프롬프트 설계 방법을 익힌다.
컨텍스트가 전부다
LLM의 한계 중 하나는 학습 데이터 이후의 정보를 모른다는 것입니다. 또한 특정 조직의 내부 문서, 사적인 데이터, 실시간 정보도 모릅니다. 이 한계를 극복하는 핵심 방법이 컨텍스트 제공입니다.
컨텍스트 주입의 3가지 방법
방법 1: 직접 텍스트 삽입
"아래 회사 정책 문서를 참고해서 직원 질문에 답해줘.
문서에 없는 내용은 [정책 문서에 해당 내용 없음]으로 답해줘.
=== 정책 문서 시작 ===
[문서 내용]
=== 정책 문서 끝 ===
질문: 육아 휴직 기간은 얼마나 되나요?"
방법 2: 구조화된 컨텍스트 블록
# XML 태그로 컨텍스트 구분 (Claude에서 특히 효과적)
<context>
<company>누구나HRD</company>
<product>취업 지원 플랫폼</product>
<target_user>일본어 가능 구직자</target_user>
<current_date>2026-06-17</current_date>
</context>
<task>
위 컨텍스트를 바탕으로 신규 사용자 환영 이메일을 작성해줘.
</task>
방법 3: 동적 컨텍스트 구성 (프로그래밍)
def build_prompt(user_query, retrieved_docs):
context = "\n\n".join([
f"[문서 {i+1}]: {doc}"
for i, doc in enumerate(retrieved_docs)
])
prompt = f"""다음 문서들을 참고해서 질문에 답해줘.
문서에 없는 내용은 추측하지 말고 모른다고 해줘.
참고 문서:
{context}
질문: {user_query}"""
return prompt
RAG(Retrieval-Augmented Generation) 개념
RAG는 검색(Retrieval) + 생성(Generation)을 결합한 아키텍처입니다. 모델의 지식 한계를 외부 데이터베이스로 보완합니다.
# RAG 기본 흐름
사용자 질문
↓
[검색 엔진] → 관련 문서 top-k 추출
↓
[프롬프트 구성] = 질문 + 검색된 문서
↓
[LLM] → 문서 기반 답변 생성
↓
사용자에게 답변
RAG 프롬프트 설계 패턴
# RAG 프롬프트 템플릿 (프로덕션 수준)
SYSTEM = """당신은 [회사명] 내부 지식 베이스 기반 AI 어시스턴트입니다.
반드시 제공된 컨텍스트만을 근거로 답변하세요.
컨텍스트에 없는 내용은 추측하거나 일반 지식으로 보완하지 마세요.
답변 마지막에 [참고: 문서명 또는 섹션]을 표기하세요."""
USER = """참고 문서:
---
{retrieved_context}
---
질문: {user_question}
컨텍스트에서 관련 내용을 찾을 수 없으면
"제공된 문서에서 해당 정보를 찾을 수 없습니다"라고 답해주세요."""
컨텍스트 품질 향상 기법
1. 우선순위 지정
"여러 문서가 제공되었을 때:
- [공식 정책 문서]: 최우선 참고
- [FAQ]: 정책과 충돌 시 정책 우선
- [과거 사례]: 참고만, 규칙이 아님"
2. 컨텍스트 신선도 표시
"각 문서의 날짜를 확인하고,
6개월 이상 된 정보는 [업데이트 필요 가능] 태그를 붙여줘."
3. 컨텍스트 충돌 처리
"여러 문서에서 서로 다른 정보가 있으면:
1. 충돌 사실을 사용자에게 알려줘
2. 각 출처와 날짜를 함께 제시해줘
3. 최신 문서를 기준으로 권고사항 제시"
긴 컨텍스트 처리 전략
컨텍스트가 매우 길 때 LLM은 중간 부분을 덜 주목하는 경향이 있습니다(Lost in the Middle 현상).
# 전략 1: 중요 정보를 앞뒤에 배치
[핵심 요약] ← 문서 맨 앞
[전체 문서 내용]
[다시 한번 핵심 포인트] ← 문서 맨 뒤
# 전략 2: 청크 분할 처리
"문서가 길어서 섹션별로 처리합니다.
섹션 1/3 분석 후 중간 요약을 먼저 제공하고,
다음 섹션에서 이어서 분석하겠습니다."
# 전략 3: 관련 섹션만 추출
"전체 문서에서 질문과 관련된 섹션만 먼저 찾아줘.
관련 섹션 번호를 알려주면 해당 섹션만 상세 분석할게."
실전: 개인화된 컨텍스트 주입
def personalized_prompt(user_profile, query):
return f"""사용자 프로필:
- 이름: {user_profile["name"]}
- 직종: {user_profile["job"]}
- 경력: {user_profile["years"]}년
- 관심 분야: {", ".join(user_profile["interests"])}
위 사용자 프로필을 고려해서 다음 질문에 맞춤 답변해줘:
{query}"""
컨텍스트는 LLM에게 세계의 창입니다. RAG를 사용하면 모델의 지식 한계를 실시간 데이터베이스로 확장할 수 있습니다. "쓰레기를 넣으면 쓰레기가 나온다" — 좋은 컨텍스트가 좋은 답변의 90%를 결정합니다.
관련 검색어 · RAG 검색 증강 생성, 컨텍스트 주입 프롬프트, LLM 외부 지식, 프롬프트 컨텍스트 설계, RAG 아키텍처, AI 지식베이스 연동