Retrieval Augmented Generation (RAG)
RAG는 외부 지식 베이스에서 관련 구절을 검색해 LLM의 프롬프트에 추가하므로, 최신의 비공개 인용 가능 출처에 근거한 답변을 생성할 수 있습니다.
검색 증강 생성(RAG)은 대규모 언어 모델 (LLM)이 쿼리 시점에 외부 지식 소스에서 검색한 문서를 질문 옆에 프롬프트로 삽입해 질문에 답하는 기법입니다. LLM의 학습 데이터에는 기준일 이후의 정보가 없고 기업 내부 문서도 포함되지 않으므로, 검색 없이는 사실을 알지 못하거나 그럴듯한 내용을 지어내는 환각이 발생합니다. 이 용어는 Facebook AI Research의 Patrick Lewis와 동료들이 2020년에 발표한 지식 집약적 NLP 작업을 위한 검색 증강 생성 논문에서 비롯됐습니다. 이 논문은 사전 학습된 BART 생성기를 Wikipedia의 고밀도 벡터 인덱스에 적용하는 신경망 검색기와 결합해, 오픈 도메인 질의응답 작업 세 가지에서 당시 최고 성능을 기록했습니다. 오늘날 이 용어는 먼저 검색하고 다음에 생성하는 모든 시스템을 가리킵니다.
RAG 파이프라인 작동 방식#
RAG는 두 단계로 실행됩니다. 먼저 색인 작업을 미리 수행합니다. 문서를 예를 들어 시맨틱 청킹으로 여러 문단으로 나누고, 각 문단을 임베딩으로 변환한 다음, 벡터를 벡터 데이터베이스에 저장합니다. 쿼리 시점에는 동일한 모델로 질문을 임베딩하고 벡터 검색으로 가장 가까운 문단을 찾은 뒤, 지침과 해당 문단, 질문을 포함하는 프롬프트를 구성합니다. 그러면 LLM은 제공된 텍스트에 근거한 답변을 작성하고 각 주장의 출처 문단을 인용할 수 있습니다.
프로덕션 시스템은 이 핵심 단계 주변에 추가 작업을 수행합니다. 하이브리드 검색은 벡터 유사도와 키워드 매칭을 결합해 부품 번호와 같은 정확한 용어를 놓치지 않도록 하고, 재순위화 모델은 더 정밀한 모델로 상위 후보의 순서를 다시 정합니다. 컨텍스트 검색은 색인 전에 LLM이 각 청크 앞에 해당 청크가 문서 내 어디에 있는지 설명하는 짧은 메모를 추가하게 합니다. LangChain과 LlamaIndex 같은 프레임워크는 이러한 구성요소를 패키지로 제공합니다.
검색 및 증강 단계는 Sentence Transformers 라이브러리를 사용하면 몇 줄의 Python 코드로 구현할 수 있습니다:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
# Knowledge base: passages the LLM never saw during training
passages = [
"Badge access to Building C requires a safety briefing completed within the last 12 months.",
"The cafeteria in Building A serves breakfast from 7:00 to 9:30 on weekdays.",
"Forklift operators must renew their certification every three years.",
]
passage_embeddings = model.encode(passages)
# Retrieve: embed the question and keep the most similar passage
question = "How often do I need to redo forklift training?"
scores = model.similarity(model.encode(question), passage_embeddings)[0]
context = passages[int(scores.argmax())]
# Augment: put the retrieved passage in the prompt the LLM will answer from
prompt = f"Answer using only this context.\nContext: {context}\nQuestion: {question}"
print(prompt)출력에는 질문이 의미상 일치하는 지게차 자격 인증 문단을 포함하는 프롬프트가 표시됩니다. 질문은 재교육을 받아야 하는지 묻고, 문단은 자격 인증 갱신을 설명하기 때문입니다. 어떤 LLM이든 이 프롬프트를 바탕으로 답변할 수 있으며, 모델을 재학습하지 않고도 문단을 매일 변경할 수 있습니다.
RAG, 파인튜닝, 긴 컨텍스트 비교#
- 파인튜닝: 새로운 예제로 모델 가중치를 업데이트합니다. 동작, 스타일, 출력 형식을 변경하는 데 효과적이지만 자주 바뀌는 사실을 추가하는 방법으로는 느리고 인용할 출처도 남기지 않습니다. 따라서 많은 시스템은 형식 조정에는 파인튜닝을, 지식 제공에는 RAG를 사용합니다.
- 긴 컨텍스트 윈도우: 토큰 100만 개를 입력받는 모델은 대규모 문서 모음을 직접 읽을 수 있지만, 질의할 때마다 모든 토큰에 대한 비용이 발생하고 입력이 길어질수록 정확도가 낮아집니다. 이러한 현상을 컨텍스트 로트라고 합니다. RAG는 중요한 내용이 담긴 구절만 전달합니다.
여러 변형이 기본 패턴을 확장합니다. GraphRAG는 지식 그래프에서 검색하고, 에이전트형 RAG는 에이전트가 검색 시점과 위치를 결정하도록 하며, 멀티모달 RAG는 텍스트뿐 아니라 이미지, 동영상, 오디오도 검색합니다.
RAG 활용 분야#
- 기업용 챗봇: 내부 어시스턴트는 정책, 위키, 과거 지원 티켓을 바탕으로 답변하고 각 답변의 출처가 된 문단을 링크합니다.
- 고객 지원: 어시스턴트는 답변 전에 고객의 정확한 제품 모델에 대한 매뉴얼과 해당 고객의 주문 이력을 검색합니다.
- 헬스케어: 임상 어시스턴트는 최신 지침과 의약품 참고 자료를 검색해, 모델의 기억이 아니라 검증 가능한 출처를 근거로 답변합니다.
RAG는 동영상에 관한 질문에도 답변할 수 있습니다. LLM은 질문마다 몇 시간 분량의 영상을 확인할 수 없으므로, 먼저 RAG와 컴퓨터 비전을 결합해 영상 자료를 검색 가능한 레코드로 변환합니다. Ultralytics YOLO26을 추적 모드로 실행하면 모든 프레임에서 각 객체의 클래스, 박스, 유지되는 추적 ID를 보고하며, 파이프라인은 이 정보를 행으로 저장합니다. 따라서 "오늘 아침 3번 도크에 트럭이 몇 대 들어왔나요?"와 같은 질문은 동영상 대신 해당 행을 검색합니다.
RAG 답변이 잘못되는 이유#
RAG는 두 단계 중 한 곳에서 실패합니다. 검색 실패는 정답이 포함된 문단이 프롬프트에 전달되지 않는 경우입니다. 청킹 과정에서 문단이 분리되거나 임베딩 모델이 동의어를 놓치거나, 문단의 순위가 상위 k개 결과의 기준보다 낮을 수 있습니다. 이는 테스트 질문 집합을 대상으로 k에서의 재현율로 측정합니다. 생성 실패는 올바른 문단이 전달됐지만 모델이 이를 무시하거나 잘못 읽거나 모순되는 답변을 생성하는 경우입니다. Ragas 같은 평가 라이브러리는 두 측면을 모두 평가합니다. 검색기는 컨텍스트 재현율로, 생성기는 답변 내 주장 중 검색된 컨텍스트가 뒷받침하는 비율인 충실도로 평가합니다.










