서버인프라

📚 RAG 시스템 완전 정복: 개념, 아키텍처, LangChain 기반 구현까지

techwold ted 2025. 6. 4. 16:27

대형 언어 모델(LLM)은 놀라운 언어 생성 능력을 보여주지만, 자체 학습된 정보만을 기반으로 하기 때문에 최신 정보 반영이나 사내 데이터 활용에 한계가 있습니다.
이를 해결하는 접근 방식이 바로 RAG(Retrieval-Augmented Generation) 시스템입니다.

이 글에서는 RAG의 개념부터 전체 시스템 아키텍처, 구현 방법까지 자세히 정리합니다.


🔍 RAG란 무엇인가?

**RAG (Retrieval-Augmented Generation)**는
외부 지식 소스를 검색(Retrieval)하고, 그 정보를 기반으로 응답을 생성(Generation)하는 LLM 기반 시스템입니다.

✅ 핵심 아이디어:
“LLM에게 모든 정보를 기억시키지 말고, 필요한 정보를 실시간으로 찾아와서 활용하자”


🧱 RAG 시스템 아키텍처 개요

RAG 시스템은 두 단계로 나뉩니다.


🔧 1. 사전 구축 단계 (Preprocessing)

문서를 처리하여 **벡터 데이터베이스(Vector DB)**에 저장해 두는 단계입니다. 질문이 들어오기 전 미리 수행됩니다.

[문서 수집]
      ↓
[문서 청크 분할]
      ↓
[청크 임베딩 생성] ← OpenAI / Cohere / HuggingFace
      ↓
[벡터 DB 저장] ← FAISS / Qdrant / Weaviate

 

  • PDF, TXT, HTML 등 다양한 문서를 작은 단위로 나누고
  • 의미 기반 벡터로 변환한 후
  • 빠른 검색을 위해 벡터 DB에 저장합니다.

💬 2. 사용자 질의 및 응답 단계 (Query-Time)

실시간으로 사용자의 질문을 처리하고, 관련 정보를 검색해 응답을 생성합니다.

[사용자 질문 입력]
      ↓
[질문 임베딩]
      ↓
[유사 문서 검색 from 벡터 DB]
      ↓
[문서 + 질문 → LLM 전달]
      ↓
[정확한 응답 생성]

이때 LLM은 **문맥(Context)**이 포함된 프롬프트를 입력받기 때문에
"단순 생성"이 아니라 "문서 기반 정확한 생성"이 가능합니다.


🧠 왜 RAG가 필요한가?

한계RAG로 해결
LLM은 최신 정보가 부족함 실시간 검색으로 최신 정보 반영
사내 비공개 문서 접근 불가 문서를 임베딩하여 LLM에 간접 제공
잘못된 정보 생성 (할루시네이션) 검색 기반 응답으로 신뢰도 향상
LLM 파인튜닝 비용 높음 벡터 검색만으로 커스터마이징 가능
 

🛠️ LangChain으로 RAG 시스템 구현하기

LangChain은 LLM, 벡터DB, 검색기, 프롬프트 조합기 등을 모듈화된 체인 형태로 구성할 수 있는 프레임워크입니다.

✅ 기본 예시 코드

from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.llms import OpenAI
from langchain.chains import RetrievalQA
from langchain.document_loaders import TextLoader

# 1. 문서 로드 및 임베딩
loader = TextLoader("company_policy.txt")
documents = loader.load()
embedding = OpenAIEmbeddings()
db = FAISS.from_documents(documents, embedding)

# 2. 검색기 생성
retriever = db.as_retriever()

# 3. LLM QA 체인 구성
llm = OpenAI(temperature=0)
qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)

# 4. 질의 실행
query = "우리 회사의 연차 사용 규칙은?"
print(qa_chain.run(query))

 


🔗 벡터DB는 어떤 걸 써야 할까?

벡터 DB특징
FAISS 로컬 환경, 가볍고 빠름
Qdrant Rust 기반 고성능, API 지원
Weaviate GraphQL 기반 질의, 클라우드 지원
Pinecone 완전 관리형 SaaS, 생산환경에 적합
 

📊 요약: RAG 시스템의 핵심 정리

구성 요소설명
문서 → 청크 문서 분할로 정보 단위 관리
임베딩 생성 의미 벡터로 변환
벡터 검색 질문과 유사한 문서 검색
LLM 프롬프트 질문 + 문서 context 조합
응답 생성 신뢰도 높은 자연어 응답