RAG
Retrieval-Augmented Generation
검색 증강 생성. 외부 지식을 검색하여 LLM 응답의 정확도를 높이는 기술. 할루시네이션 감소.
Retrieval-Augmented Generation
검색 증강 생성. 외부 지식을 검색하여 LLM 응답의 정확도를 높이는 기술. 할루시네이션 감소.
RAG(Retrieval-Augmented Generation, 검색 증강 생성)는 대규모 언어 모델(LLM)이 응답을 생성하기 전에 외부 지식 베이스에서 관련 정보를 검색하여 활용하는 기술입니다. 이를 통해 LLM의 지식 한계를 극복하고, 최신 정보나 특정 도메인 지식을 반영한 정확한 답변을 제공할 수 있습니다.
RAG는 2020년 Facebook AI Research에서 처음 제안되었으며, LLM의 할루시네이션(환각) 문제를 해결하기 위한 대안으로 급부상했습니다. 기존 LLM은 학습 데이터에만 의존하여 최신 정보 반영이 어렵고, 사실과 다른 내용을 생성하는 문제가 있었습니다.
RAG의 핵심 원리는 "검색 + 생성" 2단계 파이프라인입니다. 먼저 사용자 질문을 임베딩하여 벡터 데이터베이스에서 유사한 문서를 검색(Retrieval)하고, 검색된 문서를 컨텍스트로 LLM에 전달하여 응답을 생성(Generation)합니다. 이 과정에서 Chunking, Embedding, Vector Search가 핵심 기술로 사용됩니다.
실무에서 RAG는 기업 내부 문서 검색, 고객 지원 챗봇, 법률/의료 전문 어시스턴트 등에 필수적으로 적용됩니다. Fine-tuning보다 비용 효율적이며, 지식 베이스 업데이트만으로 즉시 최신 정보를 반영할 수 있어 엔터프라이즈 AI 솔루션의 표준이 되었습니다.
LangChain을 활용한 기본 RAG 파이프라인 예제입니다.
# pip install langchain langchain-openai chromadb
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA
# 1. 문서 로드 및 청킹
documents = ["AI는 인공지능의 약자입니다...", "머신러닝은 AI의 하위 분야입니다..."]
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
splits = text_splitter.create_documents(documents)
# 2. 임베딩 및 벡터 저장소 생성
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(splits, embeddings)
# 3. RAG 체인 구성
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever(search_kwargs={"k": 3})
)
# 4. 질의 실행
response = qa_chain.invoke({"query": "AI와 머신러닝의 관계는?"})
print(response["result"])