Bldev's Blog

검색 증강 생성 · 인공지능

[RAG, AI] 벡터 유사도 검색과 RAG

2026. 3. 12.

벡터 유사도 검색

벡터 유사도 검색(vector similarity search)(또는 벡터 검색)이란 벡터로 표현되는 데이터를 검색하는 데이터 검색 방법이다. 벡터란 단어, 문장, 문서, 이미지, 영상 데이터의 숫자 표현이다. 머신러닝 모델과 인공지능 응용 애플리케이션에서 주로 사용되는 개념이다. 벡터는 데이터 간의 의미적(semantic) 관계와 유사도(similarity)를 확인할 수 있게 하므로 단순 키워드 기반 검색 보다 질의에 대한 의미 및 문맥에 더 적합한 검색을 가능하게 한다.

벡터 데이터베이스는 벡터 데이터의 저장소이다. 데이터를 벡터 데이터베이스에 저장하기 위해서는 데이터를 먼저 벡터로 변환해야 한다. 데이터를 간단한 형태로 변환하는 것을 임베딩(embedding)이라고 하며 데이터를 벡터 형태로 변환하는 것을 벡터화(vectorization) 또는 벡터 임베딩(vector embedding)이라고 한다.

데이터를 벡터로 임베딩하는 사전 학습 모델을 벡터 임베딩 모델(vector embedding model)이라고 하며, 예로 Word2Vec, GloVE, FastText이나 BERT(Bidirectional Encoder Representations from Transformers) 또는 RoBERTa(BERT 기반 성능 향상 모델) 같은 사전 학습된 트랜스포머(transformer) 기반 모델이 있다.

벡터 데이터베이스는 벡터 데이터를 단순히 저장하는 역할 뿐만 아니라 서로 다른 벡터 데이터 간 유사도를 계산하여 벡터 데이터를 검색하는 역할도 수행한다. 이를 유사도 검색(similarity search) 또는 시맨틱 검색(sementic search)이라고 한다.

RAG

검색 증강 생성(retrieval augmented generation, RAG)이란 LLM이 질의에 대한 답변을 생성할 때 답변에 참고할 수 있는 데이터를 먼저 검색하고 해당 데이터를 기반으로 답변을 생성하는 기술이다. 질문에 대한 답변을 생성하기 전에 답변에 참고할 수 있는 데이터를 검색하고, 답변을 기반으로 응답한다. 이때, 벡터 유사도 검색을 사용하여 전용 벡터 데이터베이스에서 데이터를 검색한다. 벡터 유사도 검색은 질의 데이터 벡터와의 유사도가 가장 높은 벡터 데이터를 검색하는 것을 말하며, RAG는 벡터 유사도 검색 방법을 사용하는 검색 기술 중 하나이다.

RAG가 해결하는 LLM의 문제점은 다음과 같다.

  • LLM은 학습하지 않은(최신화되지 않은) 데이터에 대해 응답할 수 없다. RAG 사용 시 LLM은 검색된 유사한 데이터를 컨텍스트로 사용하여 더 최신화된 데이터를 기반으로 응답을 생성한다.
  • LLM이 정확하지 않은 데이터를 응답으로 생성하는 환각(hallucination) 현상이 발생할 수 있다. RAG 사용 시 LLM은 검색된 유사한 데이터를 컨텍스트로 사용하여 더 정확하고 관련성 있는 응답을 생성한다. 이를 통해 환각 현상을 줄인다.

RAG의 동작 방식은 다음과 같다.

  1. 데이터를 벡터화한 후 벡터 데이터베이스에 저장
  2. 새로운 데이터를 벡터 데이터베이스에서 검색하여 가장 유사한 데이터를 검색
  3. LLM에 질문 시 유사한 데이터를 함께 전달한다. 즉, 프롬프트는 질문 + 유사한 데이터이다.

랭체인 (Langchain)

랭체인(LangChain)이란 LLM 프로바이더를 추상화하여 호출하는 도구이다. 다양한 기능들을 통합하여 LLM 기반으로 복잡한 작업을 수행할 수 있도록 돕는 프레임워크이다. 한마디로 랭체인은 LLM을 다양한 애플리케이션에 손쉽게 통합하기 위한 프레임워크로 볼 수 있다. 랭체인은 벡터 검색 및 RAG를 위한 프레임워크의 대명사로 널리 알려져 있으며, 유사한 프레임워크로 라마인덱스(LlamaIndex)가 있다.

랭체인과 같은 프레임워크를 사용하면 벡터 검색과 LLM 기반의 챗봇을 손쉽게 구현할 수 있다. 랭체인은 데이터를 벡터화하는 임베딩 모델 프로바이더에 대한 추상화도 제공한다. 이러한 기능들을 사용하면 데이터를 벡터 데이터베이스화하고 내부 데이터베이스를 기반으로 사용자의 질의에 답변하는 RAG 기반 LLM 챗봇 인터페이스를 단 몇줄의 코드로 손쉽게 구현할 수 있다.


참고