RAG, AI의 거짓말을 막는 가장 현실적인 방법

최신 스마트폰을 구입하고 AI 비서에게 질문을 던졌다고 상상해 보자. “이번 주 소프트웨어 업데이트로 추가된 ‘매직 포토’ 기능 어떻게 써?”라고 묻자, AI 비서는 “그런 기능은 없습니다”라고 답하거나 완전히 틀린 사용법을 지어내 알려준다.

이는 AI의 기반이 되는 LLM(거대 언어 모델)이 가진 두 가지 명백한 한계 때문이다.

  1. 지식의 시점 한계 (Knowledge Cut-off): LLM은 특정 시점까지의 데이터로만 학습되므로, 가장 최신 정보(새로운 기능, 최신 뉴스 등)를 알지 못한다.
  2. 환각 (Hallucination): 정보를 모를 때, LLM은 모른다고 인정하기보다 그럴듯한 거짓 정보를 생성하는 경향이 있다.

이처럼 신뢰할 수 없는 AI는 실생활에서 유용하게 쓰기 어렵다. RAG(Retrieval-Augmented Generation, 검색 증강 생성)는 바로 이 문제를 정면으로 돌파하여, LLM을 신뢰할 수 있는 전문가로 만드는 핵심 기술이다.


RAG의 핵심 원리

RAG의 아이디어는 간단하다. LLM에게 질문에 대한 답을 바로 시키는 대신, 먼저 관련 자료를 찾아주고 그 자료를 기반으로 답하게 하는 것이다.

여기서 한 가지 의문이 들 수 있다. “그냥 문서 전체를 GPT 프롬프트에 한 번에 넣고 질문하면 안 되나?” 좋은 질문이지만, 여기에는 몇 가지 명확한 단점이 존재한다.

  • 높은 비용: LLM API는 입력되는 텍스트의 양(토큰 수)에 따라 비용이 책정된다. 긴 문서를 통째로 넣으면 비용이 기하급수적으로 증가한다.
  • 성능 저하: 더 중요한 문제로, LLM은 입력된 정보가 너무 길어지면 중간에 있는 중요한 내용을 놓치는 ‘Lost in the Middle’ 현상을 보인다. 즉, 무작정 많은 정보를 주는 것이 오히려 답변의 질을 떨어뜨릴 수 있다.

RAG는 바로 이 문제를 ‘가장 관련성 높은 정보만 정확히 추출해서’ LLM에게 제공함으로써 해결한다. 이 과정은 두 가지 핵심 동작으로 구성된다.

  • ① 검색 (Retrieval): 사용자의 질문과 가장 관련된 문서를 외부 지식 저장소에서 실시간으로 찾아낸다.
  • ② 증강 (Augmentation): 찾아낸 문서 내용을 원래 질문에 덧붙여(증강하여) LLM에게 전달한다.

RAG 시스템 구축 워크플로우

RAG 시스템은 크게 ‘데이터를 미리 준비하는 과정’과 ‘실시간으로 질문에 답하는 과정’으로 나뉜다.

단계 명칭 주요 활동 목표
1 준비 단계 (Indexing) 문서 로드 → 분할 → 임베딩 → 벡터 DB 저장 질문을 받기 전, 지식 창고를 검색 가능한 형태로 미리 구축
2 런타임 단계 (Querying) 질문 임베딩 → 유사 문서 검색 → 프롬프트 증강 → LLM 답변 생성 사용자의 질문에 대해 실시간으로 가장 정확한 답변을 생성

1단계: 데이터 준비 (Indexing)

  • 문서 로드 (Document Loading):
    • AI의 참고자료가 될 PDF, 웹페이지, 텍스트 파일 등 원본 문서들을 불러온다.
  • 텍스트 분할 (Text Splitting):
    • 불러온 문서를 청크(Chunk) 단위로 자른다.
  • 임베딩 (Embedding):
    • 이 단계가 RAG의 기술적 핵심이다. 임베딩은 텍스트를 AI가 이해할 수 있는 숫자, 즉 벡터(Vector)로 변환하는 과정이다.
    • 과거에는 단어를 단순히 숫자 1과 0으로 표현하는 원-핫 벡터(One-hot Vector)를 사용했지만, 이는 단어의 의미를 담지 못하고, 어휘 사전에 없는 단어(OOV, Out-of-Vocabulary)를 처리하지 못하는 명확한 한계가 있었다.
    • 현대의 임베딩 모델(e.g., Word2Vec, BERT)은 딥러닝을 통해 텍스트의 문맥적 의미를 밀도 높은 벡터(Dense Vector) 공간의 특정 좌표로 변환한다. ‘행복’이라는 단어는 ‘기쁨’과 가까운 좌표에, ‘슬픔’과는 먼 좌표에 위치하게 된다. 이렇게 텍스트의 의미를 벡터로 변환하여 저장하는 것이다.
  • 벡터 저장 (Vector Store):
    • 생성된 의미 벡터들을 벡터 데이터베이스(Vector DB)에 저장하고, 빠르게 검색할 수 있도록 인덱싱(Indexing)한다.

2단계: 실시간 질의응답 (Runtime)

  1. 질문 임베딩:

사용자의 질문 또한 준비 단계와 동일한 임베딩 모델을 통해 벡터로 변환된다.

  1. 유사 문서 검색:

이 질문 벡터와 벡터 DB에 저장된 문서 벡터들을 비교하여, 의미적으로 가장 유사한 상위 N개의 문서 청크를 찾아낸다.

  1. 프롬프트 증강:

검색된 문서 청크들을 원본 질문과 함께 프롬프트에 담아 LLM에게 전달할 최종 질문지(프롬프트)를 만든다.

  1. LLM 답변 생성:

LLM은 풍부한 참고 자료가 담긴 이 질문지를 바탕으로, 사실에 근거한 정확하고 상세한 답변을 생성한다.


핵심 개념 정리

벡터 데이터베이스 (Vector DB)

벡터 DB는 RAG의 심장이다. 이 DB는 저장된 벡터들 사이의 ‘의미적 거리’를 계산하여 가장 가까운(가장 유사한) 벡터를 찾아내는 데 특화되어 있다. 이때 벡터 간의 유사도는 주로 코사인 유사도(Cosine Similarity)유클리드 거리(Euclidean Distance) 같은 수학적 방법을 통해 측정된다. 기존 데이터베이스와의 차이점은 아래와 같다.

구분 벡터 DB (Vector DB) 관계형 DB (RDBMS)
주요 데이터 텍스트, 이미지 등의 비정형 데이터를 변환한 ‘벡터’ 숫자, 문자열 등 규칙이 명확한 정형 데이터
검색 방식 의미 기반 검색 (Semantic Search) “스마트폰 배터리 효율”과 “핸드폰 사용 시간”을 유사하게 인식 키워드 기반 검색 (Keyword Search) “배터리”라는 단어가 정확히 일치해야 검색됨
핵심 목표 데이터 간의 의미적 유사성 측정 데이터의 정확한 일치 여부 확인

할루시네이션 (Hallucination)

LLM이 학습 데이터에 없는 내용을 질문 받았을 때, 사실이 아닌 정보를 마치 사실인 것처럼 그럴듯하게 지어내어 답변하는 현상을 말한다.

랭체인 (LangChain)

RAG 시스템을 구성하는 문서 로드, 텍스트 분할, 임베딩, 벡터 DB 연동, LLM 호출 등 복잡한 과정을 손쉽게 연결하고 실행할 수 있도록 도와주는 개발 프레임워크다. 개발 생산성을 크게 높여준다.

청크 (Chunk)

‘덩어리’라는 뜻으로, RAG에서는 긴 문서를 AI가 효율적으로 처리하고 검색할 수 있도록 나눈 작은 텍스트 단위를 의미한다. 단순한 문단(paragraph)과는 달리, 검색과 임베딩 효율을 고려하여 크기가 조절된다.

컨텍스트 (Context)

‘문맥’ 또는 ‘참고 정보’를 의미한다. RAG에서는 검색을 통해 찾아낸 관련성 높은 문서 내용(청크)이 LLM에게 답변을 생성할 때 참고해야 할 컨텍스트로 주어진다.

청크 오버랩 (Chunk Overlap)

텍스트를 청크 단위로 나눌 때, 정보의 연속성이 끊어지는 것을 방지하기 위해 앞 청크의 끝부분과 뒤 청크의 시작 부분을 의도적으로 겹치게 만드는 기술이다.

결론

RAG는 LLM의 고질적인 문제인 ‘환각’과 ‘지식 단절’을 해결하는 가장 현실적이고 강력한 기술이다. RAG를 통해 우리는 범용 LLM을 특정 분야에 해박한 ‘전문가 AI’로 탈바꿈시킬 수 있으며, 누구나 믿고 사용할 수 있는 신뢰성 높은 AI 서비스를 구축할 수 있다. 최신 정보를 반영하는 제품 지원 챗봇부터 나만의 여행 계획을 짜주는 AI까지, RAG는 AI의 가능성을 한 단계 끌어올리는 필수적인 기술로 자리매김하고 있다.

위로 스크롤