20

프로덕션 RAG, 이렇게 하면 망한다

Day 4: 프로덕션 RAG

학습 목표

프로덕션 RAG 구현 시 자주 발생하는 실수를 파악한다 각 실수에 대한 해결책을 설명할 수 있다

프로덕션 RAG, 이렇게 하면 망한다


실수 1: Self-RAG 판단이 너무 느리다

검색 필요성 판단: 300ms
관련성 평가 (5개 문서): 1500ms (300ms x 5)
답변 생성: 500ms
충실도 검증: 300ms
유용성 평가: 300ms

총: 2,900ms -> 3초 가까이!

해결:

1. 검색 필요성: 규칙 기반 + LLM (안전/규격은 규칙으로 바로 YES)
2. 관련성 평가: 배치로 한 번에 (5개를 한 프롬프트로)
3. 유용성 평가: 생략 가능 (Faithfulness로 대체)

최적화 후: ~1,200ms

실수 2: Corrective RAG의 대안 검색이 없다

# 잘못된 코드
if all(relevance == INCORRECT for relevance in relevances):
    return "관련 정보를 찾을 수 없습니다."  # 포기?

해결: 3단계 폴백

# 1차: 쿼리 수정 후 재검색
refined_q = rewrite_query(question)
docs = search(refined_q)

# 2차: 동의어 확장 검색
expanded_q = expand_synonyms(question)
docs = search(expanded_q)

# 3차: 범위 확대 (필터 완화)
docs = search(question, filter=None)  # 필터 없이 전체 검색

# 최종: 솔직한 답변
if not docs:
    return "해당 정보가 현재 데이터베이스에 없습니다. 담당자에게 문의하세요."

실수 3: 안전 관련 질문을 Simple로 분류한다

# 위험한 코드
질문: "프레스 안전 간격은?"
분류: "simple" (일반 상식으로 판단)
답변: "보통 600mm 정도입니다." (틀림! KOSHA 기준 800mm)

해결: 안전 키워드는 반드시 검색

SAFETY_KEYWORDS = ["안전", "위험", "보호구", "kosha", "msds", ...]

if any(kw in question.lower() for kw in SAFETY_KEYWORDS):
    strategy = "safety"  # LLM 분류 건너뛰기

실수 4: 캐시를 무한정 유지한다

# 잘못된 코드
cache[question] = answer  # TTL 없음
# 매뉴얼이 업데이트되어도 옛날 답변을 계속 반환!

해결: TTL + 문서 업데이트 시 무효화

cache_ttl = 3600  # 1시간

# 문서 업데이트 시
def invalidate_cache():
    cache.clear()
    logger.info("Cache invalidated due to document update")

체크리스트

  • Self-RAG 판단 지연 최적화 (규칙 기반 + 배치 평가)
  • Corrective RAG 3단계 폴백 구현
  • 안전 키워드 우선 감지 (LLM 분류 전)
  • 캐시 TTL 설정 + 문서 업데이트 무효화
  • 로깅: 전략 선택, 판단 결과, 응답 시간 기록
AI로 학습하기 — 꿀팁
프로덕션 RAG 실수 점검AI 학습 팁

벡터DB 인덱스 갱신 누락, 캐싱 전략 오류, 청크 메타데이터 미저장 등 프로덕션 RAG의 흔한 실수가 없는지 검증해 보세요.

프로덕션 제조 RAG 배포 시 흔한 실수에 대한 아래 주장이 맞는지 검증해줘. (1) 'Weaviate나 Qdrant를 사용하면 PDF가 업데이트될 때 벡터DB가 자동으로 동기화된다.' (2) '동일 쿼리에 대한 응답 캐싱은 제조 현장처럼 반복 질문이 많은 경우 반드시 도입해야 한다.' (3) '청크에 출처 문서명, 섹션, 페이지 번호를 메타데이터로 저장하면 최종 답변 품질에는 영향이 없지만 감사 추적에 유용하다.' (4) 'CRAG(Corrective RAG)는 검색 신뢰도가 낮을 때 반드시 웹 검색 도구로 폴백해야 한다.' 제조 RAG 운영 맥락에서 교정해줘.
이 팁이 도움이 됐나요?