자신감 넘치는 답변 뒤에 숨겨진 지식의 격차
언어 모델은 방대한 학습 과정에서 습득한 패턴을 바탕으로 질문에 답하는 데 탁월합니다. 하지만 회사의 최신 내부 정책 업데이트나 어제 발생한 사건처럼 학습 데이터에 포함되지 않은 정보에는 접근할 수 없습니다. 예를 들어, 지난주에 변경된 특정 내부 "refund policy"에 대해 물어보면, 확신에 차 있지만 부정확하거나 일반화된 답변을 내놓을 가능성이 높습니다.
이러한 "지식의 격차"를 해결하기 위해 Retrieval-Augmented Generation(RAG)이 등장합니다. RAG는 모델 자체를 더 똑똑하게 만들거나 핵심 지식을 업데이트하는 것이 아닙니다. 대신, 사용자의 특정 질문에 답하기 위해 적절한 시점에 관련 외부 정보를 모델에 제공하는 것입니다.
전문가에게 답변하기 전 컨닝 페이퍼를 건네주는 것과 같습니다. 애플리케이션은 먼저 별도의 지식 베이스(주로 vector database)에서 질문과 직접 관련된 정보를 검색합니다. 이 데이터베이스는 문서, 기사, 내부 정책을 의미를 담은 수치 형태의 embeddings로 변환하여 저장합니다.
만약 "how do I get my money back"이라고 질문하면, vector database는 질문에 정확한 단어가 포함되지 않았더라도 "refund policy"라는 제목의 문서를 찾아낼 수 있습니다. 이렇게 검색된 텍스트는 프롬프트에 추가되어 언어 모델이 정확한 답변을 구성하는 데 필요한 구체적인 맥락을 제공합니다. 이 과정을 통해 모델은 명시적으로 학습하지 않은 문서에 대한 질문에도 답변할 수 있게 됩니다.
"Refund Policy"가 "Get My Money Back"과 매칭되는 이유
제목과 약간 다른 단어를 사용하여 문서를 검색해 본 적이 있나요? 기존 검색 엔진은 거의 완벽한 키워드 일치를 요구하기 때문에 어려움을 겪는 경우가 많습니다. "how do I get my money back"이라고 입력하면 "Refund Policy"라는 제목의 문서는 검색되지 않을 수 있습니다. 바로 여기서 semantic search가 판도를 바꿉니다.
Semantic search는 단순히 단어 자체가 아니라 단어 뒤에 숨겨진 의미를 이해합니다. "get my money back"과 "refund policy"가 동일한 핵심 개념을 전달한다는 것을 인식하기 때문에 두 개념을 연결할 수 있습니다. 이 마법은 텍스트를 수치로 표현한 embeddings를 통해 일어납니다.
Embedding을 방대한 다차원 공간의 한 점이라고 생각해보세요. "apple"과 "orange"처럼 의미가 비슷한 단어나 구는 이 공간에서 매우 가까운 위치에 놓입니다. 반면 "car"와 같이 전혀 관련 없는 개념은 훨씬 멀리 떨어져 있게 됩니다. 우리는 이를 2~3차원으로 시각화할 수 있지만, 실제 텍스트 embeddings는 복잡한 의미론적 관계를 포착하기 위해 수백 또는 수천 개의 차원을 사용합니다.
이러한 숫자들의 집합을 vectors라고 합니다. vector database는 이 vectors를 원본 텍스트 조각과 함께 저장합니다. 질문을 하면 질문 역시 embedding으로 변환됩니다. 그런 다음 데이터베이스는 질문의 vector와 가장 가까운 vector를 가진 텍스트 조각을 빠르게 찾아내어 가장 의미적으로 관련성이 높은 정보를 검색합니다. 이를 통해 시스템은 표현 방식이 다르더라도 질문과 직접적으로 관련된 정확한 원문 구절을 가져올 수 있습니다.
RAG가 출처를 바탕으로 답변할 수 있게 하는 4단계 과정
Retrieval-Augmented Generation(RAG)을 통해 AI가 학습하지 않은 정보를 사용하여 질문에 답하는 방법은 다음과 같습니다. 이는 문서와 언어 모델 사이에서 이루어지는 영리한 4단계 과정입니다.
먼저, 원본 문서는 더 작은 청크(chunk)로 분할됩니다. 각 청크는 의미를 담고 있는 긴 숫자 목록인 임베딩(embedding)으로 변환됩니다. 이를 거대한 다차원 차트 위의 좌표에 단어를 매핑하는 것으로 생각하면 됩니다. 이러한 임베딩은 원본 텍스트 청크와 함께 벡터 데이터베이스(vector database)라고 불리는 특수 데이터베이스에 저장됩니다.
질문을 하면, 해당 질문도 동일한 임베딩 과정을 거칩니다. 그 후 벡터 데이터베이스는 질문의 임베딩과 수치적으로 가장 가까운 임베딩을 가진 청크를 찾습니다. 이는 정확한 단어가 일치하지 않더라도 의미론적으로 유사한 텍스트를 검색할 수 있음을 의미합니다.
다음으로, 애플리케이션은 원래 질문에 검색된 텍스트 청크를 추가하여 확장된 프롬프트를 생성합니다. 이 증강된 프롬프트는 언어 모델로 전송됩니다. 예를 들어, 환불 정책에 대해 질문했다면 프롬프트는 다음과 같이 바뀔 수 있습니다: "다음 문맥을 사용하여: [검색된 환불 정책 텍스트], 환불받는 방법을 설명해 주세요."
언어 모델은 제공된 이 최신 문맥을 사용하여 답변을 생성합니다. 모델은 학습 데이터에서 사실을 기억해 내는 것이 아니라, 그 순간 전달받은 특정 정보를 처리하는 것입니다. 즉, 회사 내부 문서나 어제 발생한 사건에 대해서도 자신 있게 답변할 수 있습니다. 더 자세한 기술적 내용은 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 원문 논문을 확인하세요.
이 글이 마음에 드셨나요? 매일 아침 이런 글을 메일로 받아보세요.
하루 한 통 · 두 번의 클릭으로 구독 취소 · 제3자 추적 없음
단순 RAG의 한계와 향후 과제
단순 Retrieval-Augmented Generation (RAG)은 실무에서 빠르게 한계에 부딪힙니다. 때때로 의미론적 검색은 관련 없는 청크를 가져오거나, 유사한 의미를 갖지 않는 오류 코드와 같은 중요한 정확한 일치 항목을 놓치기도 합니다. 또한 임베딩을 다시 빌드하지 않으면 문서 업데이트 내용을 알 수 없습니다.
그렇기 때문에 프로덕션 RAG 시스템은 종종 키워드 검색(keyword search)과 벡터 검색을 결합합니다. 두 방식 모두에서 결과를 가져온 다음, "리랭커(reranker)" 모델을 사용하여 실제 관련성에 따라 정렬합니다. 이는 모델의 동작을 영구적으로 변경하고 업데이트를 위해 재학습이 필요한 파인튜닝(fine-tuning)과 달리, RAG를 민첩하고 최신 상태로 유지하게 해줍니다.
더 긴 컨텍스트 윈도우가 만능 해결책이라고 착각하지 마세요. 거대 언어 모델조차도 방대한 양의 텍스트를 효율적으로 처리하는 데 어려움을 겪습니다. agentic RAG와 같은 고급 RAG 접근 방식은 반복적인 검색을 도입하여 AI가 스스로 질문을 정교화하도록 합니다. 또 다른 혁신인 GraphRAG는 데이터 포인트 간의 관계를 발견하여, 단순한 청크 검색을 넘어 지식 베이스에 대한 더 미묘한 이해를 가능하게 합니다.
자주 묻는 질문(FAQ)
AI에서 RAG란 무엇인가요?
Retrieval-Augmented Generation (RAG)은 관련 외부 정보를 검색하여 언어 모델에 제공함으로써, 해당 문맥을 사용하여 답변할 수 있도록 하는 기술입니다.
벡터 데이터베이스는 RAG에 어떻게 도움이 되나요?
텍스트 임베딩을 저장하고, 문구는 다르더라도 의미가 사용자의 질문과 가까운 구절을 검색합니다.
RAG가 AI 환각(hallucination)을 제거하나요?
아니요. RAG는 소스 자료를 기반으로 응답을 생성할 수 있게 하지만, 관련 없거나 불완전한 검색 및 모델 오류로 인해 여전히 잘못된 답변이 생성될 수 있습니다.
RAG와 파인튜닝은 어떻게 다른가요?
RAG는 질문 시점에 관련 정보를 제공하는 반면, 파인튜닝은 추가 학습을 통해 모델이 학습한 동작 자체를 변경합니다.

