**RAG(Retrieval-Augmented Generation)**는 **"검색 증강 생성"**으로 번역되며, AI 모델이 답변을 생성할 때 외부 지식을 실시간으로 검색해서 활용하는 기술입니다.
| 특징 | 일반 AI (GPT, Claude) | RAG AI |
|---|---|---|
| 지식 출처 | 학습 시점의 데이터만 | 최신 문서 실시간 검색 |
| 정확도 | 오래된 정보 or 환각(hallucination) | 신뢰할 수 있는 출처 기반 |
| 맞춤형 | 범용 지식만 | 회사 내부 문서, 개인 노트 등 |
| 업데이트 | 재학습 필요 | 문서만 추가하면 됨 |
예시: "우리 회사의 휴가 정책은?"
AI는 모르는 것도 자신 있게 대답하는 경향이 있습니다. RAG는 실제 문서를 기반으로 답변하므로 환각을 크게 줄입니다.
GPT-4는 2023년 4월까지의 데이터로 학습되었습니다. RAG는 오늘 작성된 문서도 검색 가능합니다.
AI 모델을 재학습(fine-tuning)하려면 수천만 원의 비용이 듭니다. RAG는 문서만 추가하면 되므로 거의 무료입니다.
회사 기밀 문서를 OpenAI에 학습시킬 수 없습니다. RAG는 로컬 또는 사내 벡터 DB에 저장하므로 안전합니다.
PDF, Word, 웹페이지 등을 읽어들여 작은 청크(chunk)로 분할합니다.
예: "1000자 단위로 나누기, 50자 중복(overlap)"
왜 분할하나요?
각 청크를 벡터(숫자 배열)로 변환합니다.
예: "RAG는 무엇인가?" → [0.23, -0.15, 0.87, ...]
사용하는 모델:
text-embedding-ada-002 (가장 인기)embed-english-v3.0sentence-transformers (무료, 오픈소스)임베딩을 벡터 데이터베이스에 저장합니다.
예: Chroma, Pinecone, Weaviate, FAISS
벡터 DB의 역할:
사용자 질문이 들어오면:
프롬프트 예시:
다음 문서를 참고하여 질문에 답하세요:
[문서 1] RAG는 Retrieval-Augmented Generation의 약자로...
[문서 2] 벡터 데이터베이스는 임베딩을 저장하고...
[문서 3] LangChain은 RAG 구현을 위한 프레임워크...
질문: RAG를 구현하려면 어떤 기술이 필요한가요?
| 프레임워크 | 설명 | 난이도 |
|---|---|---|
| LangChain | 가장 인기, 풍부한 생태계 | 중간 |
| LlamaIndex | 문서 중심, RAG에 특화 | 쉬움 |
| Haystack | 엔터프라이즈급, 확장성 | 어려움 |
2026년 추천: LangChain (커뮤니티 크고, 자료 많음)
| DB | 특징 | 가격 |
|---|---|---|
| Chroma | 로컬 실행, 무료, 초보자 최적 | 무료 |
| Pinecone | 클라우드, 관리 간편, 무료 티어 | 무료~유료 |
| Weaviate | 오픈소스, 자가 호스팅 가능 | 무료 |
| FAISS | Facebook 개발, 속도 빠름 | 무료 |
2026년 추천: Chroma (로컬에서 빠르게 시작)
| 모델 | 비용 | 성능 |
|---|---|---|
| OpenAI ada-002 | $0.0001/1K 토큰 | 높음 |
| Cohere embed-v3 | $0.0001/1K 토큰 | 높음 |
| sentence-transformers | 무료 (로컬) | 중간 |
2026년 추천: OpenAI ada-002 (정확도 & 속도 균형)
# Python 3.10 이상
pip install langchain openai chromadb pypdf
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
# PDF 로드
loader = PyPDFLoader("company_policy.pdf")
documents = loader.load()
# 청크로 분할 (1000자, 50자 중복)
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=50
)
chunks = text_splitter.split_documents(documents)
print(f"총 {len(chunks)}개의 청크 생성")
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
# OpenAI 임베딩 모델
embeddings = OpenAIEmbeddings(model="text-embedding-ada-002")
# Chroma 벡터 DB에 저장
vectordb = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
persist_directory="./chroma_db" # 로컬 저장
)
print("벡터 DB 생성 완료!")
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
# GPT-4 모델
llm = ChatOpenAI(model="gpt-4", temperature=0)
# RAG 체인 생성
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=vectordb.as_retriever(search_kwargs={"k": 3}), # top 3개 검색
return_source_documents=True
)
# 질문하기
query = "우리 회사의 연차 정책은?"
result = qa_chain({"query": query})
print(f"답변: {result['result']}")
print(f"출처: {result['source_documents']}")
답변: 귀사의 휴가 정책에 따르면, 연차는 입사 1년 차 15일,
2년 차부터 매년 1일씩 증가하여 최대 25일입니다.
출처: [company_policy.pdf, 3페이지]
검색된 문서를 다시 한번 평가해서 정확도 높이기:
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import CohereRerank
compressor = CohereRerank(model="rerank-english-v3.0")
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor,
base_retriever=vectordb.as_retriever()
)
문서에 메타데이터(날짜, 작성자, 카테고리)를 추가하면 필터링 가능:
vectordb.similarity_search(
query="연차 정책",
filter={"category": "HR", "year": 2026} # HR 문서만 검색
)
기존 RAG의 한계: 한 번의 검색만 수행 Agentic RAG: AI가 여러 번 검색하고, 추가 질문하고, 외부 API 호출까지!
예시: "애플의 최신 실적과 경쟁사 비교"
구현: LangGraph, AutoGPT
기존 RAG의 한계: 문서 간 관계 파악 못함 Graph RAG: 문서를 지식 그래프로 변환 → 복잡한 추론 가능
예시: "블릭의 상사의 상사는 누구?"
구현: Neo4j + LangChain
RAG는 2026년 AI 활용의 핵심 기술입니다. 다음과 같은 상황에서 RAG를 고려하세요:
✅ 회사 내부 지식 베이스: 규정, 매뉴얼, 회의록 검색 ✅ 고객 지원 챗봇: 제품 문서 기반 자동 답변 ✅ 개인 노트 AI: Notion, Obsidian 노트를 AI에게 학습 ✅ 학술 연구: 논문 수백 편을 검색하고 요약
RAG는 복잡해 보이지만, 실제로는 4단계(로드-임베딩-저장-검색)만 이해하면 됩니다. 오늘 당장 시작해서, 나만의 맞춤형 AI를 만들어보세요!
참고 자료: