RAG에 벡터DB가 필요하다는 건 어디서 시작된 개구리인지…

벡터db건 뭐건 사실은 그냥 검색만 구현하면 되는 걸텐데요...

Gemini :
네, RAG(Retrieval-Augmented Generation)에서 벡터 데이터베이스(Vector Database) 의 사용은 2020년 관련 논문이 처음 발표되면서부터 그 개념적인 토대가 마련되었습니다.
RAG는 기본적으로 검색(Retrieval)생성(Generation) 을 결합하는 방식인데, 이 검색 단계에서 벡터 임베딩과 이를 효율적으로 저장하고 검색하는 벡터 데이터베이스가 필수적인 역할을 하게 됩니다.
💡 RAG와 벡터 DB의 시작점
RAG에서 벡터 DB가 필요하다는 아이디어는 다음의 주요 논문과 개념에서 출발했습니다.

  1. RAG의 탄생: Lewis et al. (2020) 논문
  • 논문 제목: "Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks" (지식 집약적 자연어 처리 작업을 위한 검색 증강 생성)
  • 핵심: 이 논문에서 RAG라는 용어와 프레임워크가 처음 제시되었습니다.
  • Retriever의 역할: 논문에서 제안된 RAG 모델은 Retriever(검색기)Generator(생성기) 로 구성됩니다. Retriever는 위키피디아와 같은 대규모 데이터셋에서 쿼리와 관련된 문서(latent documents) 를 검색합니다.
  • 벡터 인덱스 사용: 이 초기 RAG 모델은 문서를 검색하기 위해 데이터셋에 벡터 인덱스(Vector Index) 를 사용하여 사전 학습된 검색기(pretrained retriever) 가 문서를 가져올 수 있도록 했습니다.
  • 결론: RAG의 핵심 단계인 '검색' 이 쿼리 및 문서의 벡터 표현을 기반으로 유사성을 계산하여 이루어지기 때문에, 효율적인 검색을 위한 벡터 저장소(Vector Store) 또는 벡터 인덱스의 개념이 필수적으로 내포되었습니다.
  1. 벡터 임베딩과 유사도 검색
    벡터 데이터베이스가 RAG의 필수 요소가 된 근본적인 이유는 다음과 같습니다.
  • 임베딩(Embedding): RAG 시스템에서 외부 지식(문서, 텍스트)과 사용자의 쿼리(질문)는 모두 벡터(Vector) 라는 수학적 표현으로 변환됩니다. 이 벡터는 텍스트의 의미를 고차원 공간에 밀집된 숫자의 배열로 나타냅니다.
  • 유사도 검색(Similarity Search): 벡터 공간에서 쿼리 벡터와 가장 가까운 거리에 있는 문서 벡터를 찾는 것이 곧 의미적으로 가장 유사한(Relevant) 문서를 찾는 것을 의미합니다.
  • 벡터 DB의 역할: 벡터 데이터베이스는 이러한 수많은 문서 벡터들을 저장하고, 주어진 쿼리 벡터에 대해 가장 유사한 벡터를 빠르고 효율적으로 검색하기 위해 특화된 데이터베이스입니다. 따라서 RAG의 검색 성능을 극대화하는 데 필수적입니다.
    요약: 벡터 DB가 필요한 이유
    LLM이 학습하지 않은 최신/도메인 특정 지식에 접근하게 하려면, 단순히 키워드 매칭(전통적인 검색)이 아닌 의미적 유사성을 기반으로 정보를 찾아야 합니다. 벡터 DB는 이 의미적 유사성 기반 검색을 효율적으로 수행하기 위해 RAG 프레임워크에 자연스럽게 통합된 핵심 기술입니다.

사실 rag에 필요한 건 검색 기능이고, 덴스 벡터로 임베딩해서 vectorDB에 푸시하고 코사인 유사도 검색하는 건 검색엔진을 구현하는 여러 방법 중 하나일 뿐인지라... 굳이 vectorDB 안 쓸 이유는 없는데, 정말 필수냐고 하면 오랫동안 잘 써오던 검색엔진 알고리즘 많은데 싶어서 고개가 갸우뚱하긴 합니다.

싸고 대부분 프로덕션 LLM들이 써서요.
사실 web 서버도 그렇게치면 인프라기능 추가하면 디스크에서 전부 가능하니 dbms도 필요없죠ㅋㅋ

사용자 query의 임베딩값(벡터)을 key로 하는 일종의 유사도/의미검색에 db가 필요하다는 것은 맞고요. key가 벡터 형태니 벡터db도 맞죠.