20분
함정 모음: RAG 파이프라인에서 흔한 실수
Day 4: RAG 파이프라인 구축
함정 모음: RAG 파이프라인에서 흔한 실수
RAG 기초 > Day 4: RAG 파이프라인 구축
학습 목표
RAG 파이프라인 통합 시 발생하는 흔한 실수를 파악한다 각 실수의 해결 방법을 학습한다
Common Pitfalls: 파이프라인 통합 실수
Pitfall 1: 컨텍스트 윈도우 초과
# ❌ top_k를 너무 크게 설정
retriever = vectorstore.as_retriever(
search_kwargs={"k": 20}
)
# 20개 청크 x 600자 = 12,000자
# + 프롬프트 + 질문 = 컨텍스트 초과!
# ✅ 적절한 k값과 토큰 예산 계산
import tiktoken
def count_tokens(text, model="gpt-4o-mini"):
encoder = tiktoken.encoding_for_model(model)
return len(encoder.encode(text))
MAX_CONTEXT_TOKENS = 4000
retriever = vectorstore.as_retriever(
search_kwargs={"k": 5}
)
Pitfall 2: 프롬프트에 역할 미지정
❌ "다음 문서를 참고하여 답변하세요."
→ LLM이 일반적인 톤으로 답변
→ 제조 용어 미사용, 출처 미표시
✅ "당신은 제조 현장 기술 전문가입니다.
반드시 출처를 표시하고,
안전 관련 주의사항을 포함하세요."
→ 전문적 답변, 출처 포함
Pitfall 3: 에러 핸들링 부재
# ❌ 검색 결과 없을 때 처리 없음
docs = retriever.invoke(query)
answer = llm.invoke(format_docs(docs))
# docs가 비어있으면 → 환각 답변 생성!
# ✅ 검색 결과 검증
docs = retriever.invoke(query)
if not docs:
return "관련 문서를 찾을 수 없습니다."
# 유사도 임계값 확인
if max_similarity < 0.7:
return ("관련도가 낮은 문서만 발견되었습니다. "
"질문을 더 구체적으로 해주세요.")
Pitfall 4: 동기화 안 된 임베딩 모델
❌ 월요일: text-embedding-3-small로 색인
수요일: text-embedding-3-large로 검색
→ 차원 불일치 → 검색 실패
✅ 환경 변수로 모델 고정
EMBEDDING_MODEL=text-embedding-3-small
# 색인과 검색 모두 동일 모델 참조
Pitfall 5: 청킹 경계에서 답변 불완전
질문: "서보 에러 E-001 파라미터 정상 범위는?"
검색된 청크:
"...파라미터 확인
- #2012: 서보 전류 제한 (정상:"
← 여기서 잘림!
해결:
1. overlap 충분히 설정 (15-20%)
2. Parent Document Retriever 사용
(청크가 속한 원본 문서 전체 참조)
3. 검색 결과 k를 늘려 보완 청크 확보AI로 학습하기 — 꿀팁
🧪RAG 파이프라인 통합 실수 디버깅 가이드AI 학습 팁
RAG 파이프라인 통합 단계에서 발생하는 실수는 여러 컴포넌트에 걸쳐 있어 디버깅이 어렵다. 각 단계를 격리해 원인을 찾는 방법을 학습한다.
제조 설비 RAG 파이프라인을 완성했는데 '답변이 부정확하다'는 피드백을 받았다. 다음 3가지 증상별로 체계적인 디버깅 절차를 알려줘: 1) '설비 에러코드를 물어보면 다른 설비의 정보가 나온다' (검색 단계 의심), 2) '검색된 청크는 정확한데 최종 답변에 엉뚱한 내용이 추가된다' (생성 단계 의심), 3) '오전에는 잘 작동하던 시스템이 오후에는 응답 속도가 5배 느려진다' (운영 단계 의심). 각 증상에 대해 1) 원인 가설 3가지, 2) 각 가설을 검증하는 구체적 방법(로그 확인, 테스트 쿼리, 메트릭 측정), 3) 가장 가능성 높은 해결책을 제조 RAG 맥락에서 설명해줘.
이 팁이 도움이 됐나요?