개발

LLM과 RAG(Retrieval-Augmented Generation)의 관계 설명

highsoo 2025. 7. 1. 13:00

📌 LLM + RAG란?

🔹 정의:

**RAG (Retrieval-Augmented Generation)**는
**LLM의 한계(지식 cutoff, 환각 현상)**를 보완하기 위해
외부 지식을 검색(Retrieval)해서 답변 생성(Generation)에 활용하는 구조입니다.


🔁 기본 작동 흐름

사용자 질문 ↓ [1] 검색: 벡터 DB 또는 검색엔진에서 관련 문서 검색 ↓ [2] 생성: 검색된 내용을 LLM이 이용해 답변 생성

🔧 RAG 구성 요소

구성 요소역할대표 예시
📥 Query Input 사용자 질문 입력 "삼성전자 주가 분석해줘"
🔍 Retriever 관련 정보를 외부 DB나 문서에서 검색 Elasticsearch, FAISS, Weaviate
📚 Knowledge Base 검색 대상 문서 (PDF, DB, 웹크롤링 등) 사내 문서, 위키, 법령, 논문 등
✏️ LLM (Generator) 검색 결과를 활용하여 자연어 답변 생성 GPT-4, Claude, Mistral
🧠 (Optional) Re-Ranker 검색된 결과 중 더 유의미한 것만 선택 Cohere Reranker, BGE-Reranker 등
 

📊 예시: 일반 LLM vs RAG 기반 LLM

질문일반 LLMRAG 사용 시
“2024년 삼성전자 영업이익은?” (잘못된 추측 가능) 최신 기사에서 실제 수치 인용
“내 회사 내부 규정 요약해줘” 잘 모름 내부 문서를 기반으로 정확히 요약
 

✅ RAG의 장점

항목설명
🧠 최신 정보 활용 가능 훈련되지 않은 정보도 실시간 검색으로 사용
❌ 환각(Hallucination) 감소 사실 기반 답변 가능
🔒 프라이빗 지식 활용 기업 내부 문서에 특화된 응답 가능
💸 비용 절감 전체 LLM 파인튜닝 대신 문서만 관리하면 됨
 

🧠 대표적인 RAG 구현 프레임워크

도구설명
LangChain Python 기반 RAG 파이프라인 제작 도구
LlamaIndex 문서 → 벡터화 → LLM 연결 쉽게 구성
Haystack 오픈소스 검색 기반 LLM 어플리케이션 빌더
Pinecone / Weaviate 벡터 DB로 대규모 문서 검색 지원
 

💼 실전 적용 예

분야사용 예시
기업 지식 검색 “사내 휴가 정책 알려줘” → 내부 문서에서 추출
고객 응대 “이 제품 환불 규정은?” → 약관 문서에서 검색
금융 “2023년 분기 실적 비교해줘” → 보고서 검색 후 요약
의료 “이 증상 관련 논문 찾아줘” → PubMed 등에서 논문 검색 후 요약
 

📌 요약

요소내용
개념 LLM이 외부 지식을 검색해서 답변 생성
핵심 장점 환각 감소, 최신 정보 반영, 사내문서 대응
주요 기술 벡터 검색 (FAISS, Pinecone) + LLM (GPT 등)
활용 분야 챗봇, 검색, 문서 요약, 내부 시스템 질의 등

이제 개발을 해보기전에 ~

 

LLM + RAG (Retrieval-Augmented Generation) 시스템을 실제로 개발하는 방법을 단계별로 자세히 설명드릴게요.


🧱 전체 구조 요약

scss
복사편집
[1] 문서 준비 및 벡터화 [2] 벡터 DB 구축 [3] 사용자 질문 입력 [4] 관련 문서 검색 (Retriever) [5] 검색 결과 + 질문 → LLM에 전달 [6] LLM이 답변 생성 (Generator)

🛠️ 개발 방법: 단계별 설명

✅ 1단계: 개발 환경 준비

필수 도구:

  • Python 3.8+
  • LangChain (또는 LlamaIndex, Haystack)
  • OpenAI API Key (또는 다른 LLM)
  • FAISS 또는 Pinecone (벡터 DB)
  • 문서 자료 (PDF, TXT, CSV 등)

설치 예시:

pip install langchain openai faiss-cpu tiktoken chromadb

✅ 2단계: 문서 임베딩(Embedding) 및 벡터 저장

예: PDF를 벡터화하여 FAISS DB에 저장

from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS

# 1. 문서 로딩 및 분할
loader = PyPDFLoader("내부규정.pdf")
documents = loader.load()

splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
docs = splitter.split_documents(documents)

# 2. 임베딩 생성 및 벡터 저장
embedding = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(docs, embedding)

# 저장
vectorstore.save_local("faiss_index")

✅ 3단계: 사용자 질문 → 관련 문서 검색 → LLM에 전달

from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
from langchain.vectorstores import FAISS

# 벡터 DB 로딩
db = FAISS.load_local("faiss_index", embedding)
retriever = db.as_retriever()

# LLM + RAG QA 시스템
qa_chain = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(model="gpt-4", temperature=0),
    retriever=retriever,
    return_source_documents=True
)

# 질문 입력
query = "내부 규정에서 연차 휴가 일수는 몇 일인가요?"
result = qa_chain(query)

print("답변:", result["result"])

💡 결과

✅ GPT-4가 자체적으로 답을 상상하지 않고,
✅ 실제 문서에서 검색된 내용만 바탕으로 정확한 답변을 제공합니다.


📦 추가 고급 기능

기능설명
🧠 Re-ranking 여러 검색 결과 중 가장 관련 있는 문서만 선택
📄 문서 유형 다양화 PDF, TXT, Word, CSV, 웹페이지 등 지원
🔐 보안 문서 처리 내부망 전용 RAG 시스템 구축 가능
🌐 실시간 웹 검색 연동 외부 뉴스/블로그 검색과 결합 가능 (ex: SerpAPI)
 

✅ 실전 예제 깃허브

프로젝트설명
LangChain RAG Example 공식 예제 코드 다수
LlamaIndex PDF 등 다양한 문서로 빠른 RAG 구축
Haystack 오픈소스 QA 시스템용 프레임워크
 

📌 요약

단계설명
1 문서 로딩 + 텍스트 분할
2 임베딩 생성 → 벡터 DB 저장
3 질문 → 관련 문서 검색 → LLM에 연결
4 LLM이 문서 기반 응답 생성

개발은 별다른것이 없어 보이네요~ 그냥 하면 될듯.

 

근데 도데체 LLM, RAG, AI Agent 등 용어만 계속 만들어내고 있는 느낌인데, 각각의 차이가 뭘까요?