RAG (인공지능)
더 많은 작업
- Retrieval-Augmented Generation; 검색 증강 생성
- 언어 모델이 답을 만들기 전에 외부 자료를 검색해 그 내용을 입력에 덧붙이는 기법
RAG(Retrieval-Augmented Generation, 검색 증강 생성)는 대형 언어 모델(LLM)이 질문을 받으면 먼저 문서 저장소, 데이터베이스, 웹 같은 외부 지식원에서 관련 자료를 찾고, 찾은 자료를 프롬프트에 넣은 상태에서 답을 생성하게 하는 기법이다. 모델 가중치에 저장된 지식(파라메트릭 메모리)만 쓰는 대신, 필요할 때 꺼내 읽는 외부 지식(비파라메트릭 메모리)을 함께 쓴다.
RAG는 LLM의 세 가지 약점을 겨냥한다. 학습 종료 시점(지식 컷오프) 이후의 정보를 모른다는 점, 사내 문서처럼 학습 데이터에 없던 지식을 모른다는 점, 그럴듯한 거짓을 만들어 내는 환각이다. 모델을 다시 학습시키지 않고 문서 저장소만 갱신하면 되므로 비용이 적고, 답변에 근거 문서를 붙여 사용자가 직접 확인하게 할 수 있다. 사내 지식 검색 챗봇, 고객 상담, 검색 엔진의 AI 요약, 코드 도우미 등 LLM을 실무에 붙이는 거의 모든 곳에서 기본 구조로 쓰인다.
LLM은 학습이 끝난 시점까지의 데이터만 안다. 새 정보를 반영하려고 모델을 다시 학습시키면 큰 계산 비용이 들고, 새 데이터로 미세 조정하면 기존 능력이 떨어지는 파국적 망각(catastrophic forgetting)이 생길 수 있다. 사용자가 검색 엔진에서 자료를 찾아 복사해 넣는 방법도 있지만 번거롭고, 초기의 검색 도구 연동은 질문을 단순한 키워드 하나로 바꿔 검색하는 수준이라 결과가 부실했다. RAG는 질의 생성, 검색, 순위화, 답변 생성을 하나의 흐름으로 묶어 자동화한 것이다.
- 2020년 2월: Google의 Kelvin Guu 등이 REALM을 발표했다. 사전 학습 단계부터 위키백과를 검색하는 잠재 검색기(latent knowledge retriever)를 언어 모델과 함께 학습시켰다.[1]
- 2020년 4월: Karpukhin 등이 질문과 문단을 각각 벡터로 인코딩해 찾는 밀집 문단 검색(DPR, Dense Passage Retrieval)을 발표했다. 이후 RAG 논문의 검색기로 쓰였다.[2]
- 2020년 5월: Facebook AI Research(현 Meta AI)의 Patrick Lewis 등 12명이 논문 「Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks」를 arXiv에 올렸고 NeurIPS 2020에 실렸다. RAG라는 이름이 여기서 나왔다. 사전 학습된 seq2seq 생성 모델(BART)을 파라메트릭 메모리로, 위키백과 밀집 벡터 인덱스를 비파라메트릭 메모리로 두고 둘을 끝에서 끝까지(end-to-end) 함께 미세 조정했다. 답 전체에 같은 검색 문서를 쓰는 RAG-Sequence와 토큰마다 다른 문서를 쓸 수 있는 RAG-Token 두 방식을 제안했다.[3]
- 2020년 9월: Meta AI가 RAG를 Hugging Face Transformers 라이브러리로 공개했다. 위키백과 인덱스를 옛 버전으로 바꾸자 모델을 다시 학습시키지 않아도 시사 문제의 답이 그에 맞게 바뀌는 실험을 소개했다.[4]
- 2021년 12월: DeepMind의 RETRO가 2조 토큰 규모의 데이터베이스에서 청크를 검색해, 매개변수가 25분의 1인 모델로 GPT-3, Jurassic-1과 비슷한 성능을 냈다.[5] 같은 달 OpenAI는 GPT-3가 텍스트 브라우저로 검색하고 출처를 인용하게 학습시킨 WebGPT를 발표했다.[6]
- 2023년 이후: ChatGPT 등장 뒤 RAG는 학습 방법이라기보다 "이미 있는 LLM에 검색 결과를 프롬프트로 넣는" 응용 구조를 가리키는 말로 넓게 쓰이게 되었다. 원 논문처럼 검색기와 생성기를 함께 학습시키지 않고, 상용 LLM API와 벡터 데이터베이스를 조합하는 방식이 표준이 되었다.
RAG 시스템은 미리 해 두는 색인(인덱싱) 단계와 질문마다 도는 검색, 증강, 생성 단계로 나뉜다.
| 단계 | 하는 일 | 주요 선택지 |
|---|---|---|
| 수집·전처리 | PDF, HTML, 위키, DB 등에서 텍스트 추출, 표·이미지 처리, 메타데이터(작성일, 권한, 출처) 부착 | 문서 파서, OCR |
| 청킹 | 문서를 검색 단위(청크)로 자름 | 고정 길이+겹침, 문장·문단 단위, 문서 구조(제목, 함수, 표) 단위, 의미 기반 분할 |
| 임베딩 | 청크를 벡터로 변환 | 임베딩 모델(밀집), 희소 표현(BM25, SPLADE) |
| 저장 | 벡터와 원문, 메타데이터를 색인 | 벡터 데이터베이스, 전문 검색 엔진, 둘 다 |
| 질의 처리 | 사용자 질문을 검색하기 좋은 형태로 바꿈 | 쿼리 재작성, 다중 쿼리, HyDE, 질문 분해 |
| 검색 | 질문 벡터와 가까운 청크를 상위 k개 찾음 | k-NN, 근사 최근접 이웃(ANN), 하이브리드 검색 |
| 재순위화 | 후보를 더 정밀한 모델로 다시 정렬하고 상위 몇 개만 남김 | 교차 인코더(cross-encoder) 리랭커, ColBERT류 후기 상호작용 |
| 증강 | 고른 청크를 질문과 함께 프롬프트에 넣음 | 출처 번호 붙이기, 압축·요약, 순서 배치 |
| 생성 | LLM이 근거를 바탕으로 답을 쓰고 출처를 인용 | 인용 강제, 근거 없으면 모른다고 답하게 지시 |
청크가 너무 작으면 앞뒤 문맥이 잘려 뜻을 잃고, 너무 크면 관련 없는 내용이 섞여 검색 정확도가 떨어지고 프롬프트가 길어진다. 수백 토큰 단위로 자르고 이웃 청크와 일부를 겹치는(overlap) 방식이 흔한 출발점이다. 문서 형식에 맞춰 자르는 것이 좋다. 코드는 함수나 클래스 단위, HTML은 표와 목록을 깨지 않게, 마크다운이나 위키 문서는 절 제목 단위로 자른다. 청크에 문서 제목이나 상위 절 제목을 덧붙여 두면 청크만 떼어 놓았을 때 생기는 문맥 손실을 줄일 수 있다. Anthropic은 2024년 9월 각 청크 앞에 "이 청크가 문서 전체에서 어떤 내용인지"를 LLM이 짧게 써 붙인 뒤 임베딩과 BM25 색인을 만드는 맥락 검색(Contextual Retrieval)을 발표했다. 자사 실험에서 검색 실패율이 맥락 임베딩만으로 35%, BM25를 더하면 49%, 리랭커까지 더하면 67% 줄었다고 밝혔다.[7]
임베딩은 텍스트를 수백~수천 차원의 실수 벡터로 바꾼 것으로, 뜻이 비슷한 문장은 벡터 공간에서 가깝게 놓인다. "자동차 고장"과 "차량 수리"처럼 겹치는 단어가 없어도 의미로 찾을 수 있고, 다국어 임베딩 모델을 쓰면 한국어 질문으로 영어 문서를 찾을 수도 있다. 가까움은 코사인 유사도, 내적, 유클리드 거리로 잰다(벡터 유사도 참고).
문서가 수백만 개를 넘으면 모든 벡터와 비교하는 정확한 k-NN은 느리므로 HNSW, IVF, PQ 같은 근사 최근접 이웃(ANN) 색인을 쓴다. 정확도를 조금 내주고 밀리초 단위 검색을 얻는다. 전용 벡터 DB(Pinecone, Weaviate, Milvus, Qdrant, Chroma), 라이브러리(FAISS), 기존 DB의 확장(PostgreSQL의 pgvector, Elasticsearch·OpenSearch의 벡터 필드)이 널리 쓰인다.
임베딩 품질이 전체 성능을 좌우한다. 일반 영어 텍스트로 학습한 모델은 법률·의학 용어나 한국어 같은 언어에서 품질이 떨어지는 경우가 많아, 도메인과 언어에 맞는 임베딩 모델을 고르거나 미세 조정한다.
밀집 벡터 검색은 의미는 잘 잡지만 제품 번호, 오류 코드, 사람 이름, 법 조항 번호처럼 정확히 일치해야 하는 문자열에 약하다. 그래서 단어 빈도 기반의 희소 검색을 함께 쓰는 하이브리드 검색이 흔하다. 대표적인 희소 방식은 TF-IDF를 개량한 BM25로, 단어가 문서에 자주 나올수록, 전체 문서에서 드물수록, 문서가 짧을수록 점수를 높게 준다. SPLADE처럼 신경망으로 희소 벡터를 만드는 방식도 있다.
두 검색 결과는 점수 척도가 달라 그대로 더할 수 없으므로, 순위만 쓰는 상호 순위 융합(RRF, Reciprocal Rank Fusion)으로 합치는 경우가 많다. 문서 d의 점수는 각 검색 결과에서의 순위 r에 대해 1/(k+r)을 모두 더한 값이고, 원 논문은 k=60을 썼다.[8]
1차 검색은 질문과 문서를 따로 인코딩하는 바이인코더(bi-encoder)라 빠르지만 거칠다. 1차로 수십~수백 개 후보를 뽑은 뒤, 질문과 문서를 한 입력으로 넣어 관련도를 직접 계산하는 교차 인코더 리랭커로 다시 정렬해 상위 3~10개 정도만 LLM에 넘긴다. 예를 들어 "파리 여행 추천 명소"에 대해 벡터 유사도는 "파리의 역사"와 "에펠탑 관광 정보"를 비슷하게 볼 수 있지만, 리랭커는 질문 의도에 더 맞는 후자를 위로 올린다. 토큰 단위 벡터를 저장해 두고 검색 뒤에 세밀하게 비교하는 ColBERT의 후기 상호작용(late interaction)도 쓰인다.[9] 순위화 단계에서 문서의 최신성, 출처 신뢰도, 권한 같은 메타데이터를 함께 반영하기도 한다.
고른 청크는 번호를 붙여 질문과 함께 프롬프트에 넣는다. 이를 "프롬프트 스터핑(prompt stuffing)"이라고도 한다. 전형적인 형태는 다음과 같다.
다음 참고 문서만 근거로 질문에 답하라. 문장마다 근거 문서 번호를 [1]처럼 달아라.
문서에 답이 없으면 "제공된 자료로는 알 수 없다"고 답하라.
[1] (청크 1 원문, 출처: 인사규정 제12조, 2026-03 개정)
[2] (청크 2 원문, 출처: 휴가 안내 FAQ)
질문: 입사 첫해 연차는 며칠인가?
생성 모델은 청크를 그대로 붙여 넣는 것이 아니라 여러 문서에 흩어진 내용을 합치고, 질문에 맞게 다시 쓰고, 서로 어긋나는 내용이 있으면 최신성과 신뢰도를 따져 정리해야 한다. 근거가 모자랄 때 모른다고 답하게 지시하는 것이 환각을 줄이는 기본 장치지만, 모델의 지시 준수 능력에 달려 있어 완전하지 않다.
아래는 BM25와 밀집 검색을 RRF로 합친 뒤 프롬프트를 만드는 예다(rank_bm25, sentence-transformers 사용).
from rank_bm25 import BM25Okapi
from sentence_transformers import SentenceTransformer
import numpy as np
docs = ["연차는 입사 1년 미만이면 1개월 개근 시 1일씩 생긴다.",
"경조 휴가는 본인 결혼 시 5일이다.",
"재택근무 신청은 전날 18시까지 한다."]
bm25 = BM25Okapi([d.split() for d in docs])
model = SentenceTransformer("intfloat/multilingual-e5-small")
doc_vecs = model.encode(["passage: " + d for d in docs], normalize_embeddings=True)
def search(query, k=2, rrf_k=60):
sparse = np.argsort(-bm25.get_scores(query.split()))
q = model.encode(["query: " + query], normalize_embeddings=True)[0]
dense = np.argsort(-(doc_vecs @ q))
score = {}
for ranking in (sparse, dense):
for rank, i in enumerate(ranking, start=1):
score[i] = score.get(i, 0) + 1 / (rrf_k + rank)
return [docs[i] for i in sorted(score, key=score.get, reverse=True)[:k]]
question = "입사 첫해 연차는 어떻게 생기나?"
context = "\n".join(f"[{n}] {c}" for n, c in enumerate(search(question), 1))
prompt = f"다음 문서만 근거로 답하고 번호를 인용하라.\n{context}\n\n질문: {question}"
# prompt를 LLM API에 보낸다
기본 구조("naive RAG")의 약점을 메우는 기법이 단계마다 나와 있다.
| 구분 | 기법 | 내용 |
|---|---|---|
| 질의 처리 | 쿼리 재작성 | 대화 맥락이 빠진 후속 질문("그건 얼마야?")을 독립된 질문으로 고치거나, 검색에 맞는 키워드로 다시 쓴다. |
| 다중 쿼리·RAG-Fusion | 한 질문을 여러 표현으로 바꿔 각각 검색하고 결과를 RRF로 합친다. | |
| 질문 분해 | 여러 단계 추론이 필요한 질문(멀티홉)을 하위 질문으로 나눠 차례로 검색한다. | |
| HyDE | LLM이 먼저 "가상의 답변 문서"를 쓰고, 질문 대신 그 문서의 임베딩으로 검색한다. 질문과 문서의 표현 차이를 줄인다. 2022년 12월 Luyu Gao 등이 발표했다.[10] | |
| 색인 | 맥락 검색 | 청크마다 문서 전체 맥락 설명을 붙여 색인한다(위 청킹 절).[7] |
| 부모-자식 청크 | 작은 청크로 검색하고, LLM에는 그 청크가 속한 더 큰 단락을 넘긴다. | |
| 요약·계층 색인 | 문서 요약이나 절 요약을 따로 색인해 큰 질문은 요약에서, 세부 질문은 원문 청크에서 찾는다. | |
| 지식 구조 | GraphRAG | 문서에서 개체와 관계를 뽑아 지식 그래프를 만들고, 그래프를 공동체(community) 단위로 묶어 요약해 둔다. "이 자료 전체의 주요 주제는?"처럼 말뭉치 전체를 봐야 하는 전역 질문에 강하다. Microsoft Research의 Darren Edge 등이 2024년 4월 발표했다.[11] |
| 구조화 데이터 RAG | 표나 DB는 벡터 검색 대신 LLM이 SQL을 만들어 조회한 결과를 넣는다(Text-to-SQL). | |
| 자기 점검 | Self-RAG | 모델이 "검색이 필요한가", "이 문서가 관련 있는가", "답이 문서로 뒷받침되는가"를 나타내는 반성 토큰(reflection token)을 스스로 생성하도록 학습시켜, 필요할 때만 검색하고 자기 답을 비평한다. 2023년 10월 Akari Asai 등이 발표했다.[12] |
| Corrective RAG(CRAG) | 가벼운 검색 평가기가 검색 결과의 품질을 판정하고, 믿기 어려우면 웹 검색으로 보충하며, 문서를 잘게 나눴다가 필요한 부분만 다시 조합(decompose-then-recompose)해 잡음을 걸러 낸다. 2024년 1월 Shi-Qi Yan 등이 발표했다.[13] | |
| 동적 RAG | 생성 도중 "언제, 무엇을" 검색할지 모델이 판단해 여러 번 검색한다. 검색한 지식을 프롬프트가 아니라 LoRA 같은 매개변수 형태로 주입하는 파라메트릭 RAG와 함께 2025년 튜토리얼로 정리되었다.[14] | |
| 에이전트 | 에이전틱 RAG | AI 에이전트가 검색을 도구로 다루며 계획, 반성, 도구 사용, 다중 에이전트 협업 패턴으로 검색 전략을 스스로 바꾼다. 검색 결과를 보고 다시 검색하거나, 벡터 DB, 웹, SQL, API 중 무엇을 쓸지 고른다.[15] 웹 검색과 브라우저 조작을 반복하는 "딥 리서치"류 기능, 모델 컨텍스트 프로토콜로 여러 데이터 소스를 연결하는 구성, 컴퓨터 사용 에이전트로 화면을 직접 보며 자료를 모으는 구성도 이 흐름에 속한다. |
검색기 쪽 학습 기법도 있다. 문서 일부를 가리고 그 문장이 어디서 왔는지 맞히게 하는 역 클로즈 과제(ICT)로 검색기를 사전 학습하거나, 검색 결과별로 생성기가 정답을 낼 가능도에 맞춰 검색기를 학습시킨다(REPLUG 등). 생성기를 검색에 맞게 처음부터 다시 설계한 RETRO 계열은 성능이 좋지만 사전 학습 비용이 크다.
RAG는 검색과 생성 두 부분을 따로, 또 함께 평가해야 한다.
| 대상 | 지표 | 의미 |
|---|---|---|
| 검색 | Recall@k, Hit rate | 정답 근거가 상위 k개 안에 들어왔는가 |
| MRR, nDCG | 정답 근거가 얼마나 위에 있는가 | |
| 맥락 정밀도·재현율(context precision/recall) | 넘긴 청크 중 쓸모 있는 비율, 필요한 정보를 다 가져왔는가 | |
| 생성 | 충실도(faithfulness, groundedness) | 답의 주장이 넘긴 문서로 뒷받침되는가(환각 여부) |
| 답변 관련성 | 답이 질문에 맞는가 | |
| 정답 일치 | 정답이 있으면 정확 일치(EM), F1, LLM 판정 |
RAGAS는 사람이 만든 정답 없이(reference-free) LLM을 판정자로 써서 충실도, 답변 관련성, 맥락 관련성을 자동 측정하는 평가 틀로, 2023년 9월 Shahul Es 등이 발표했고 같은 이름의 오픈소스 라이브러리로 널리 쓰인다.[16] 이 밖에 TruLens, DeepEval, ARES 같은 도구가 있다. 검색 성능 비교에는 여러 도메인의 검색 과제를 모은 BEIR, 오픈 도메인 질의응답에는 Natural Questions, TriviaQA, 멀티홉 질의응답에는 HotpotQA가 흔히 쓰이고, 법률 분야 LegalBench-RAG처럼 도메인 전용 벤치마크도 나오고 있다. 실무에서는 실제 사용자 질문으로 만든 평가 세트를 두고 청크 크기, 임베딩 모델, k, 리랭커를 바꿔 가며 비교하는 것이 가장 믿을 만하다.
| 항목 | RAG | 미세 조정(파인튜닝) | 긴 컨텍스트에 통째로 넣기 |
|---|---|---|---|
| 지식 갱신 | 문서 저장소만 바꾸면 즉시 반영 | 다시 학습해야 함 | 매 요청마다 넣으므로 즉시 반영 |
| 출처 제시 | 쉬움(청크 단위) | 어려움 | 가능하지만 범위가 넓음 |
| 잘 맞는 일 | 사실 조회, 자주 바뀌는 지식, 대량 문서 | 말투·형식·전문 작업 방식 습득, 짧은 입력으로 일관된 출력 | 문서가 작거나, 문서 전체를 훑어야 하는 요약·비교 |
| 비용 | 색인 비용 + 요청당 짧은 프롬프트 | 학습 비용이 큼, 추론은 저렴 | 요청당 토큰 비용이 큼(캐싱으로 완화) |
| 약점 | 검색이 틀리면 답도 틀림, 파이프라인 복잡 | 환각 제어 어려움, 망각, 권한별 분리 불가 | 컨텍스트 창 한계, 가운데 정보 누락 |
| 접근 권한 | 청크 단위로 사용자별 필터링 가능 | 모델에 섞여 분리 불가 | 요청마다 선택 가능 |
세 방법은 배타적이지 않다. 도메인 말투는 미세 조정으로, 최신 사실은 RAG로 넣는 식으로 섞어 쓴다. 긴 컨텍스트 모델이 나오면서 "RAG가 필요 없어진다"는 주장도 있으나, 2024년 Zhuowan Li 등의 비교 연구는 자원을 충분히 쓰면 긴 컨텍스트가 평균 성능에서 앞서지만 RAG가 비용에서 크게 유리하다고 보고하고, 질문마다 모델이 둘 중 하나를 고르게 하는 Self-Route를 제안했다.[17] 긴 입력의 가운데에 있는 정보를 모델이 잘 못 쓰는 현상(lost in the middle)도 보고되어 있어[18], 관련 부분만 골라 넣는 RAG의 이점은 남는다. Anthropic은 지식 베이스가 약 20만 토큰보다 작으면 RAG 없이 전부 프롬프트에 넣고 프롬프트 캐싱을 쓰는 편이 낫다고 안내한다.[7]
- 검색 엔진 통합
- Microsoft는 2023년 2월 OpenAI의 차세대 모델과 Bing 검색을 결합한 새 Bing(이후 Microsoft Copilot)을 발표했다. 검색 결과로 답을 근거화하는 자체 기술을 Prometheus라고 불렀고, 답에 출처 링크를 단다.[19]
- Google은 2023년 Search Labs에서 검색 생성 경험(SGE)을 시험한 뒤 2024년 5월 이를 AI Overviews라는 이름으로 미국 전체 사용자에게 확대했다.[20]
- 답변 엔진·챗봇
- Perplexity는 웹 검색 결과를 모아 답하고 문장마다 출처를 각주로 다는 방식을 전면에 내세운 서비스다.
- ChatGPT는 2023년부터 웹 검색(브라우징) 기능을 붙였고, 2021년 연구였던 WebGPT가 그 전신에 해당한다.
- Google NotebookLM처럼 사용자가 올린 문서만 근거로 답하는 문서 기반 도우미도 RAG 구조다.
- 기업용
- AWS(Kendra, Bedrock Knowledge Bases), Microsoft(Azure AI Search와 Azure OpenAI), Google Cloud(Vertex AI Search) 등이 사내 문서 색인과 LLM을 묶은 관리형 RAG를 제공한다. 기업용 제품은 문서별 접근 권한을 검색 단계에 반영해, 사용자가 열람할 수 있는 문서만 답의 근거로 쓰게 하는 기능을 중시한다.
- 사내 규정·매뉴얼 챗봇, 콜센터 상담 보조, 계약서·판례 검색, 의료 지침 조회, 코드 저장소 질의 등에 쓰인다. 의료 분야에서는 평가, 윤리, 임상 신뢰성 문제가 남아 있다는 체계적 문헌 고찰도 나와 있다.
| 분류 | 예 | 설명 |
|---|---|---|
| 오케스트레이션 | LangChain, LlamaIndex, Haystack, Semantic Kernel, DSPy | 문서 로더, 분할기, 임베딩, 벡터 저장소, 검색기, 프롬프트를 조합하는 라이브러리. LlamaIndex는 문서 색인과 검색에 특히 초점을 둔다. |
| 에이전트·워크플로 | LangGraph, LangChain Deep Agents | 검색을 반복하거나 분기하는 상태 기계형 워크플로, 에이전틱 RAG 구현 |
| 관측·평가 | LangSmith, RAGAS, TruLens, Phoenix | 검색된 청크, 프롬프트, 응답을 추적하고 품질을 측정 |
| 벡터 저장소 | FAISS, Pinecone, Weaviate, Milvus, Qdrant, Chroma, pgvector, Elasticsearch, OpenSearch | ANN 색인과 메타데이터 필터링 |
| 문서 처리 | Unstructured, 각종 PDF 파서, OCR | 표, 이미지, 레이아웃이 있는 문서를 텍스트와 구조로 변환 |
| 브라우저 연동 | Playwright, Browser Use | 웹 페이지를 실제 브라우저로 열어 수집하는 에이전트형 검색 |
- 검색이 틀리면 답도 틀린다
- 필요한 문서가 검색되지 않거나 엉뚱한 문서가 올라오면 생성 모델이 좋아도 답이 틀린다. "쓰레기가 들어가면 쓰레기가 나온다"는 원칙이 그대로 적용된다.
- 모델이 질문을 잘못 이해해 부적절한 검색어를 만들면(예: "오늘 서울 날씨"를 "서울 기후 특성"으로 검색) 최신 정보를 가져오지 못한다. LLM은 도구나 시스템 프롬프트가 없으면 오늘 날짜도 모른다.
- 여러 문서를 이어 붙여야 풀리는 멀티홉 질문은 여전히 어렵다.
- 근거가 있어도 환각은 남는다
- RAG는 환각을 줄일 뿐 없애지 못한다. 모델이 문서를 무시하고 학습 지식으로 답하거나, 문서 사이의 빈틈을 지어낸 내용으로 채울 수 있다.
- 사실인 문서를 문맥 없이 인용해 틀린 결론을 낼 수 있다. MIT Technology Review는 수사적 의문문으로 된 책의 장 제목("버락 후세인 오바마: 미국 최초의 무슬림 대통령?")을 근거로 AI 검색이 "미국에는 무슬림 대통령이 한 명 있었다"고 답한 사례를 들었다.[21]
- 문서끼리 내용이 어긋나면 옛 정보와 새 정보를 섞은 답을 낼 수 있다. 모델은 자기가 충분한 정보를 갖고 있지 않다는 사실을 잘 알아채지 못한다.
- 출처가 붙어 있으면 사용자가 더 쉽게 믿는 경향이 있다. 출처 제시는 정확성의 보증이 아니라 검증할 수단을 주는 것이다.
- 언어와 도메인
- 영어 중심 임베딩·모델은 한국어 질문을 영어 문서로 검색한 뒤 어색하게 옮기거나, 한국어 자료의 뉘앙스를 놓칠 수 있다. 다국어 모델과 한국어 평가 세트로 확인해야 한다.
- 운영
- 검색 API 장애나 지연이 곧 서비스 장애가 되고, 응답 시간이 길어진다. 웹 검색형은 robots.txt로 수집이 막힌 사이트를 참고할 수 없다.
- 색인을 원본과 동기화하고, 삭제된 문서를 색인에서도 지우고, 개인정보를 비식별화하는 데이터 관리 부담이 생긴다.
- 소설·시처럼 새로 지어내야 하는 작업에는 검색할 자료가 없어 도움이 되지 않고, 검색 결과에 끌려 주류 의견만 되풀이할 수 있다.
- 보안
- 간접 프롬프트 주입: 검색된 문서나 웹 페이지 안에 숨긴 지시문("이전 지시를 무시하고...")이 모델에게 명령처럼 먹힐 수 있다(간접 프롬프트 인젝션 참고). 검색 결과는 항상 신뢰할 수 없는 데이터로 다루고, 도구 권한을 최소화해야 한다.
- 지식 오염(RAG poisoning): 공격자가 지식 베이스나 검색될 웹에 조작된 문서를 심어 원하는 답을 유도한다. PoisonedRAG 연구는 수백만 개 문서가 있는 저장소에 질문당 악성 문서 5개만 넣어도 약 90% 성공률로 목표 답을 유도할 수 있다고 보고했다.[22]
- 권한 우회와 정보 유출: 벡터 DB에 권한 구분 없이 문서를 넣으면 볼 수 없는 문서가 답에 섞여 나온다. 여러 고객이 한 저장소를 쓰면 문맥 간 유출이 생길 수 있고, 임베딩에서 원문을 상당 부분 복원하는 임베딩 역전(inversion) 공격도 있다. OWASP는 2025년판 LLM 애플리케이션 10대 위험에 "LLM08: 벡터 및 임베딩 약점"을 넣고 세밀한 접근 제어, 데이터 검증, 분류, 검색 로그 감시를 권고한다.[23]
- ↑ Guu et al., REALM: Retrieval-Augmented Language Model Pre-Training, arXiv:2002.08909
- ↑ Karpukhin et al., Dense Passage Retrieval for Open-Domain Question Answering, arXiv:2004.04906
- ↑ Lewis et al., Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks, arXiv:2005.11401
- ↑ Meta AI, Retrieval Augmented Generation: Streamlining the creation of intelligent natural language processing models, 2020-09-28
- ↑ Borgeaud et al., Improving language models by retrieving from trillions of tokens, arXiv:2112.04426
- ↑ OpenAI, WebGPT: Improving the factual accuracy of language models through web browsing, 2021-12-16
- ↑ 7.0 7.1 7.2 Anthropic, Introducing Contextual Retrieval, 2024-09-19
- ↑ Cormack, Clarke, Buettcher, Reciprocal Rank Fusion outperforms Condorcet and individual Rank Learning Methods, SIGIR 2009
- ↑ Khattab, Zaharia, ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT, SIGIR 2020
- ↑ Gao et al., Precise Zero-Shot Dense Retrieval without Relevance Labels, arXiv:2212.10496
- ↑ Edge et al., From Local to Global: A Graph RAG Approach to Query-Focused Summarization, arXiv:2404.16130
- ↑ Asai et al., Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection, arXiv:2310.11511
- ↑ Yan et al., Corrective Retrieval Augmented Generation, arXiv:2401.15884
- ↑ Su et al., Dynamic and Parametric Retrieval-Augmented Generation, arXiv:2506.06704
- ↑ Singh et al., Agentic Retrieval-Augmented Generation: A Survey on Agentic RAG, arXiv:2501.09136
- ↑ Es et al., Ragas: Automated Evaluation of Retrieval Augmented Generation, arXiv:2309.15217
- ↑ Li et al., Retrieval Augmented Generation or Long-Context LLMs? A Comprehensive Study and Hybrid Approach, arXiv:2407.16833
- ↑ Liu et al., Lost in the Middle: How Language Models Use Long Contexts, arXiv:2307.03172
- ↑ Microsoft, Reinventing search with a new AI-powered Microsoft Bing and Edge, 2023-02-07
- ↑ Google, Generative AI in Search: Let Google do the searching for you, 2024-05-14
- ↑ MIT Technology Review, Why Google's AI Overviews gets things wrong, 2024-05-31
- ↑ Zou et al., PoisonedRAG: Knowledge Corruption Attacks to Retrieval-Augmented Generation of Large Language Models, arXiv:2402.07867
- ↑ OWASP GenAI Security Project, LLM08:2025 Vector and Embedding Weaknesses
- Lewis et al., Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks, NeurIPS 2020
- Asai et al., Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection, 2023
- Su et al., Dynamic and Parametric Retrieval-Augmented Generation, 2025
- Singh et al., Agentic Retrieval-Augmented Generation: A Survey on Agentic RAG, 2025
- Anthropic, Introducing Contextual Retrieval
- OWASP, LLM08:2025 Vector and Embedding Weaknesses