"ChatGPT는 2021년 이후 데이터를 모른다." 이 문제를 해결하려고 PDF 파일을 업로드해봤는데, 정작 제대로 된 답변을 못 받은 경험 있으신가요? 또는 회사 내부 문서, 고객 데이터, 기술 매뉴얼처럼 외부 AI가 절대 알 수 없는 정보를 기반으로 챗봇을 만들고 싶었지만 어디서부터 시작해야 할지 막막했나요?
답은 RAG(Retrieval-Augmented Generation) 시스템입니다. 2026년 현재, RAG는 더 이상 연구실 프로젝트가 아닙니다. LangChain과 ChromaDB 덕분에 개발자 경험 1년 차도 30분 만에 작동하는 RAG 챗봇을 만들 수 있습니다.
GPT-4, Claude, Gemini 같은 대형 언어 모델(LLM)은 학습 데이터 기준 시점까지의 정보만 압니다.
RAG는 이 문제를 3단계로 해결합니다:
예시:
사용자: "2025년 3분기 매출은 얼마야?"
[RAG 시스템]
1. 질문을 벡터로 변환
2. 벡터 DB에서 유사 문서 검색 → "2025 Q3 재무 보고서.pdf" 찾음
3. 관련 페이지 내용을 GPT에게 전달:
"이 문서에 따르면 2025년 3분기 매출은 45억원입니다. 답변해줘."
4. GPT: "2025년 3분기 매출은 45억원입니다. (출처: 2025 Q3 재무 보고서)"
LangChain은 RAG 구축에 필요한 모든 컴포넌트를 제공합니다:
pip install chromadb2026년 1-2월, 수십 개의 완전한 RAG 튜토리얼이 공개되었습니다:
모두 실제 작동하는 코드를 제공합니다. 복붙 가능합니다.
pip install langchain chromadb openai pypdf
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
# PDF 로딩
loader = PyPDFLoader("company_docs.pdf")
documents = loader.load()
# 청킹 (1000자 단위, 200자 오버랩)
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
chunks = text_splitter.split_documents(documents)
핵심 팁: chunk_size는 1000-1500자가 적당합니다. 너무 작으면 문맥 손실, 너무 크면 검색 정확도 하락.
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
# 임베딩 모델 (OpenAI text-embedding-3-small)
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
# ChromaDB에 저장
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
persist_directory="./chroma_db" # 로컬 저장
)
비용: OpenAI 임베딩은 100만 토큰당 $0.02. 10,000페이지 PDF도 $5 이하.
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
# LLM 설정
llm = ChatOpenAI(model="gpt-4-turbo", temperature=0)
# RAG 체인
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff", # 모든 검색 결과를 한번에 전달
retriever=vectorstore.as_retriever(search_kwargs={"k": 3}), # 상위 3개 검색
return_source_documents=True # 출처 문서 반환
)
query = "2025년 3분기 매출은 얼마인가요?"
result = qa_chain({"query": query})
print("답변:", result["result"])
print("출처:", result["source_documents"][0].metadata)
결과 예시:
답변: 2025년 3분기 매출은 45억원입니다.
출처: {'source': 'company_docs.pdf', 'page': 12}
| DB | 장점 | 단점 | 추천 용도 |
|---|---|---|---|
| ChromaDB | 설치 간단, 무료, 로컬 실행 | 대규모 확장 제한적 | MVP, 프로토타입 |
| Pinecone | 관리형 서비스, 무한 확장 | 유료 ($70/월~) | 프로덕션, 대용량 |
| Weaviate | 오픈소스, 하이브리드 검색 | 자체 호스팅 필요 | 온프레미스, 커스터마이징 |
| FAISS | Meta 개발, 초고속 | 메모리 기반, 영속성 없음 | 실험, 벤치마킹 |
문제: "1000자로 자르면 문장이 중간에 끊깁니다"
해결책:
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200,
separators=["
", "
", ". ", " ", ""] # 우선순위대로 분할
)
벡터 검색만으로는 정확한 키워드 매칭이 약합니다. 하이브리드 검색 추가:
from langchain.retrievers import BM25Retriever, EnsembleRetriever
# BM25 (키워드 검색)
bm25_retriever = BM25Retriever.from_documents(chunks)
# 벡터 검색
vector_retriever = vectorstore.as_retriever()
# 하이브리드 (50:50 가중치)
ensemble_retriever = EnsembleRetriever(
retrievers=[bm25_retriever, vector_retriever],
weights=[0.5, 0.5]
)
회사: B2B SaaS 스타트업
문제: 고객 문의 중 80%가 "이미 문서에 있는 내용"
해결: 700페이지 기술 문서 → RAG 챗봇 구축
결과:
회사: 로펌
문제: 변호사들이 판례 검색에 하루 2-3시간 소비
해결: 10년치 판례 문서(50,000건) → Pinecone + GPT-4 RAG
결과:
회사: 중견 제조업체
문제: 신입 사원 온보딩에 3개월 소요
해결: 작업 매뉴얼, 사내 위키, 과거 프로젝트 문서 → RAG 시스템
결과:
RAG로 검색한 문서를 줬는데도 LLM이 지어내는 경우가 있습니다.
대책:
temperature=0으로 설정 (창의성 제거)예: "Q3 매출은 45억" 문장이 두 청크로 나뉘면 검색 실패.
대책: chunk_overlap=200 이상 설정
대책:
가트너는 2026년까지 엔터프라이즈 AI 앱의 70%가 RAG를 사용할 것이라 예측했습니다. 이유는 간단합니다:
당신의 프로젝트에도 "AI가 우리 데이터를 알아야 한다"는 요구사항이 있다면, RAG가 답입니다. 30분만 투자해서 첫 프로토타입을 만들어보세요. 🚀
어떤 문서를 RAG로 만들고 싶으신가요? 회사 매뉴얼? 고객 FAQ? 기술 블로그? 댓글로 공유해주세요!