[RAG] RAG(검색 증강 생성)란?
RAG(검색 증강 생성)는 기존 LLM의 한계를 기존 LLM의 한계를 극복하고자 고안된 기술로, LLM이 학습하지 못한 데이터 뭉치를 손에 쥐어주고, 사용자의 질문이 들어왔을 때 이를 오픈북처럼 활용할 수 있게 만들어주는 기술임.
ex)
A회사의 직원이 LLM에게 A회사의 프로젝트 일정에 대해 질문하는 상황.
기존 LLM :
사전 학습된 데이터만 가지고 있어서 답변하지 못함(검색 엔진을 활용할 수 있어도 'A회사의 프로젝트 일정'은 공공연한 정보가 아니기에 결과는 동일함.)
RAG 체인으로 호출된 LLM :
'A회사의 프로젝트 일정'이 포함된 문서를 전달 받았기에, 사용자의 질문이 들어오면 해당 정보가 포함된 문서를 읽고 그에 맞는 답변을 출력함.
Embedding이란, 우리가 사용하는 자연어를 컴퓨터가 이해할 수 있는 형태인 벡터 단위로 변환해주는 작업을 의미함.
- 수학, 물리학에서의 벡터와 LLM 기술에서의 벡터는 개념적인 부분에서 약간의 차이가 있음. 2차원 공간에서의 좌표값과 3차원 공간에서의 좌표값이라는 차이가 존재하기 때문임.
RAG 구현 기본 흐름:
LLM 객체 생성 → 데이터 로드 및 처리(의미 단위로 분할) → 데이터 임베딩(벡터로 변환) → 벡터 DB에 저장 → LLM이 검색 → LLM의 답변 생성
ChromaDB, Pinecone, FAISS, Weaviate 정도가 대표적인 VectorDB의 예시이고,
그 중 ChromaDB와 FAISS는 파이썬 라이브러리 형태로 제공됨. → 프로그램이 상당히 가볍고 편리함
아래는 RAG 프로젝트를 기획하며 비교했던 각 VectorDB의 특징(Weaviate는 고려 대상에서 제외되었음.)