8강

컨텍스트 제공과 RAG 개념

3 조회 1

컨텍스트 제공이 출력 품질을 결정하는 원리를 이해하고, 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 지식베이스 연동

채용정보
공지사항
인사이트
MY