1.1.1 RAG란?
RAG는 검색 증강 생성(Retrieval-Augmented Generation)의 약자로, LLM이 단순히 학습된 데이터에 의존해 답변을 생성하는 것이 아니라, 외부 데이터베이스나 문서에서 관련 정보를 검색(Retrieval)한 후, 이를 활용하여 답변을 생성(Generation)하는 기법을 의미합니다.

OpenAI, 메타, 구글 등 여러 AI 연구기관에서 LLM의 성능과 신뢰성을 향상시키기 위한 중요한 방법론으로 RAG를 채택하고 있습니다.
1.1.2 RAG의 필요성
기존의 LLM( ex. GPT-4, LLaMA, Claude 등)은 사전 학습된 데이터만을 활용하여 답변을 생성합니다. 이로 인해 다음과 같은 문제가 발생할 수 있습니다.
1) 최신 정보 반영 불가
LLM은 미리 학습된 데이터만 알고 있으며, 이후 발생한 최신 정보는 반영하지 않습니다. 예를 들어, GPT-4o는 2024년 4월까지의 정보는 알고 있지만, 2025년의 최신 연구 결과나 뉴스, 법률 변경 사항 등을 모릅니다.
예를 들어, 2025년 2월 현재 미국 대통령이 누구인지 물어본다면 도널드 트럼프 후보가 당선되었을 가능성이 있다고 답변합니다.
이와 같은 문제를 해결하기 위해서는 모델 자체를 최신 데이터로 재학습시켜야 하지만, 쉬운 일이 아닙니다. 그래서 RAG를 사용하여 최신 문서나 데이터베이스에서 검색한 후 최신 정보가 포함된 상태로 답변을 생성해야 합니다.
2) 데이터의 한계
LLM은 일반적인 지식에 대한 학습은 잘 되어 있지만, 특정 도메인( ex. 의료, 법률, 기업 내부 문서, 과학 논문)과 같은 전문 지식을 학습하는 데는 한계가 있습니다. 이를 해결하기 위해서는 LLM이 모르는 특정 도메인의 데이터베이스( ex. 회사 내부 문서, 법률 데이터 등)에서 정보를 검색하도록 구성해야 합니다.
3) 환각 현상
LLM은 자신이 모르는 정보라도 가장 '그럴듯한' 답변을 생성하려고 하며, 때때로 사실이 아닌 내용을 사실처럼 말하는 문제가 발생할 수 있습니다. 이를 환각(Hallucination) 현상이라고 합니다. 이 문제를 해결하기 위해서는 RAG를 사용하여 실제 문제를 검색한 후, 이를 기반으로 신뢰도 높은 답변을 생성하거나 출처를 명확히 제공하여 사용자가 정보를 검증할 수 있도록 해야 합니다.
4) 시간과 비용에 대한 투자
LLM을 특정 데이터셋으로 재학습하려면 많은 비용과 시간이 필요합니다. 그러나 RAG를 활용하면 LLM을 수정하지 않고도 활용할 수 있습니다. 외부 검색 시스템과 결합하여 필요한 정보를 즉시 반영할 수 있기 때문입니다. 그래서 재학습보다는 RAG를 사용하여 검색한 정보를 기반으로 즉시 답변을 생성하는 것이 효율적입니다.
1.1.3 RAG의 핵심원리
RAG는 검색, 정보 증강, 응답 생성이라는 세가지 핵심 단계로 구성됩니다.
1) 검색 단계(Retrieval)
검색 단계는 RAG의 첫 번째 핵심 과정으로, 사용자의 질문(Query)에 대해 가장 관련성이 높은 정보를 검색하여 LLM에 제공합니다. 이 단계가 중요한 이유는 LLM이 검색한 문서를 기반으로 더 정확한 응답을 생성할 수 있도록 도와주기 때문입니다.
특히 벡터 검색(Vector Search) 기술을 활용하면 데이터베이스에서 질문과 유사한 문서를 효율적으로 찾아 LLM에 제공할 수 있어, 더욱 정교한 답변을 생성할 수 있습니다.
2) 정보 증강 단계(Augmentation)
정보 증강 단계는 RAG의 두 번째 핵심 과정으로, LLM이 답변을 더 잘 만들 수 있도록 외부 정보를 찾아와 보강해줍니다. 즉, 검색된 문서를 원래 입력(Prompt)에 추가해서 모델에게 제공하는 단계라고 할 수 있습니다. 이 과정에서 모델은 외부로부터 얻은 최신 정보나 관련 데이터를 포함하여 더 정확하고 풍부한 응답을 생성할 수 있습니다.
3) 응답 생성 단계(Generation)
응답 생성 단계는 RAG의 마지막 과정으로, 검색된 문서 내용을 바탕으로 LLM이 최종적인 응답을 생성하는 과정입니다. 이 단계에서는 LLM이 검색된 정보를 적절히 활용하여 신뢰도 높은 답변을 생성하는 것이 핵심 목표입니다. 즉, 단순히 학습된 데이터를 기반으로 답변하는 것이 아니라, 실제 검색된 문서에서 추출한 데이터를 활용하여 더욱 정확하고 근거를 갖춘 응답을 제공합니다.
1.1.4 RAG 구현 방법
RAG를 구현하는 과정은 크게 데이터베이스 구축 -> 벡터 검색 -> LLM과 통합 세 단계로 나눌 수 있습니다. 물론 그래프 데이터베이스도 활용할 수 있지만 여기서는 벡터를 기준으로 설명합니다.
1) 데이터베이스 구축
RAG의 필수적인 초기 단계로 , 문서를 벡터(Vector)로 변환하여 벡터 데이터베이스에 저장하는 단계입니다. 이때 활용할 수 있는 문서는 단순한 텍스트뿐만 아니라 연구 논문, 기업 내부 데이터, 웹 문서, 기술 문서 등 다양한 형태의 데이터가 포함할 수 있습니다.
[RAG에 사용할 수 있는 문서]
- JSON, CSV 등의 구조화된 데이터
- PDF, DOCX 등의 문서 파일
- 데이터베이스(SQL, NoSQL)
- 웹사이트 크롤링 데이터
LLM이 더 정확하고 신뢰성 있는 답변을 생성할 수 있도록, 체계적이고 구조화된 방식으로 데이터를 저장하는 것이 핵심입니다. 이를 위해 OpenAI의 text-embedding-ada-002 같은 임베딩 모델을 사용하여 텍스트를 벡터로 변환한 후 FAISS, Pinecone, Weaviate, Chroma 같은 벡터 데이터베이스(벡터 저장소)에 저장할 수 있습니다.
2) 벡터 검색
사용자의 질문을 벡터 형태로 변환하여 검색하는 기술을 의미합니다. 기존의 키워드 검색 방식과 달리, 벡터 검색은 문서의 의미적 유사성을 고려하여 더욱 정교한 검색 결과를 제공할 수 있습니다.
FAISS를 이용하여 벡터 검색을 구현하는 방법은 다음과 같습니다.
# 랭체인에서 PDF 문서를 불러오기 위해 사용하는 코드
from langchain.document_loaders import PyPDFLoader
# PDF 문서 로드
loader = PyPDFLoader("data/company_documents.pdf")
document = loader.load()
from langchain.vectorstores import FAISS
from langchain_openai import OpenAIEmbededings
# 문서를 벡터로 변환하여 저장
vectorstores = FAISS.from_documents(documents, OpenAIEmbededings())
3) LLM과 통합
마지막으로 LLM과 통합하여 검색 기반 답변을 생성합니다. 사용자 질문과 RAG 검색 결과를 LLM 모델에 보내 결과를 생성하는 단계입니다.
예시코드는 다음과 같습니다.
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA
# OpenAI LLM 모델 로드
llm = ChatOpenAI(model_name= "gpt-4")
# 검색을 위한 QA 체인 생성
qa_chain = RetrievalQA.from_chain_type(
llm,
retriever= vectorstores.as_retriever()
)
# 사용자 질문 입력
query = "우리 회사의 최신 제품은 무엇인가요?"
result = qa_chain.invoke({"query": quety})
print(result["result"])
지금까지 RAG의 개념에 대해 알아봤습니다. 이제 본격적으로 VectorRAG와 GraphRAG에 대해 알아보겠습니다.
'생성형 AI > 랭체인으로 RAG 개발하기: VectorRAG & GraphRAG' 카테고리의 다른 글
| 5. VectorRAG 실습 : OpenAI API 사용 - 5 (0) | 2025.10.03 |
|---|---|
| 5. VectorRAG 실습 : OpenAI API 사용 - 4 (1) | 2025.10.03 |
| 5. VectorRAG 실습 : OpenAI API 사용 - 3 (0) | 2025.10.03 |
| 5. VectorRAG 실습 : OpenAI API 사용 - 2 (0) | 2025.10.03 |
| 5. VectorRAG 실습 : OpenAI API 사용 - 1 (1) | 2025.10.03 |