RAG란?
LLM이 외부 지식(DB, 문서 등)을 검색해서 참고한 뒤, 그걸 바탕으로 응답을 생성하는 방식임.
1. RAG를 사용하는 이유
1. 허위 응답을 제어하여 신뢰성 있는 답변을 얻을 수 있음.
- LLM은 학습된 범위 내에서만 답변 가능하기 때문에, 답이 없을 경우 그럴듯한 허위 정보(Hallucination)를 만들어내기도 함.
- 하지만 RAG는 외부 문서 기반의 응답이므로 보다 정확하고 신뢰성 있는 답변을 이끌어낼 수 있음.
2. 최신 정보를 사용자에게 제공할 수 있음.
- LLM은 학습 이후 고정된 정보를 기반으로 응답하지만, RAG는 외부 문서만 갱신하면 최신 정보도 반영 가능
3. 비용적으로 효율적임.
- FM ( ≈ Base Model )을 조직이나 도메인별 정보를 위해 재교육하기 위해선 비용이 많이듬.
4. 개발자의 제어력 강화 ⭐️⭐️
LLM은 확률 분포 기반으로 가장 그럴듯한 응답"을 생성하기 때문에 아래와 같은 한계가 존재함.
- 출처 불명: 어떤 데이터에 기반한 응답인지 확인 불가
- 고정된 지식: 프롬프트만으로는 새로운 요구사항 반영 어려움
- 보안 제약: 학습되지 않은 민감정보 접근 불가 / 학습된 정보는 제어 어려움
- 수정 어려움: 잘못된 응답의 원인 추적 또는 수정이 어려움
- 테스트 비효율: 모델 자체를 수정해야 하므로 반복 테스트 번거로움
이러한 한계는 Retrieval-Augmented Generation (RAG) 방식으로 보완할 수 있음.
RAG의 해결 방식 요약
출처 불명 | LLM이 참고할 문서의 출처를 명시적으로 지정 가능 |
지식 고정 | 문서만 바꿔도 응답 변화, 다양한 요구사항에 적응 가능 |
보안 문제 | 인증 기반 문서 접근 제한 가능 |
수정 어려움 | 문서 기반이므로 즉각적인 소스 수정 가능 |
테스트 어려움 | "문서 수정 → 응답 확인" 루틴으로 개선 속도 향상 |
2. 작동 원리
1. 외부 데이터 생성
- API, 데이터베이스, 문서 리포지터리 등에서 외부 데이터 수집
- 수집된 데이터를 임베딩(Embedding) 하여 벡터 형식으로 변환하고 벡터 DB에 저장
2. 쿼리 임베딩 및 관련 정보 검색
- 사용자 쿼리를 벡터 표현으로 임베딩
- 벡터 DB에서 유사도가 높은 문서를 검색하여 관련 정보 추출
3. 문서 청킹 및 컨텍스트 삽입 (Chunking + Enhanced Context Injection)
- 검색된 문서를 문맥에 맞게 청킹(Chunking)
→ 긴 문서를 작은 단위로 나누어 검색 정확도 향상 - 적절히 나눠진 정보를 LLM 프롬프트에 삽입
→ Context Injection을 통해 더 정확한 응답 유도
4) 응답 생성
- 확장된 프롬프트를 바탕으로 Generator(GPT 등)가 응답 생성=
5) 데이터 최신화 관리
- 문서의 변경 사항 반영을 위해 비동기 또는 배치 방식으로 임베딩 갱신
- 실시간 처리 또는 주기적 작업을 통해 항상 최신 정보를 반영
참고자료
https://aws.amazon.com/ko/what-is/retrieval-augmented-generation/