AI.zip
  • AI 모델
  • 방법론
  • AI 서비스
  • 가격 비교
  • 블로그

AI.zip

AI 모델, 서비스, 방법론을 큐레이션하는 에디토리얼 플랫폼

탐색

  • AI 모델
  • AI 서비스
  • 방법론
  • 블로그

커뮤니티

  • 소개
  • 디스코드 참여
  • 문의

법적고지

  • 이용약관
  • 개인정보처리방침

© 2026 ai.zip. All rights reserved.

Discord 커뮤니티
블로그RAG 완전 구현 가이드: 검색 증강 생성 시스템 만들기 (2025)

RAG 완전 구현 가이드: 검색 증강 생성 시스템 만들기 (2025)

튜토리얼
2026년 3월 28일약 2분

핵심 포인트

  • 1.RAG가 필요한 이유 LLM은 학습 데이터 이후의 정보를 모릅니다
  • 2.회사 내부 문서, 최신 뉴스, 개인 데이터에 대한 질문에 답하려면 외부 지식을 연결해야 합니다
  • 3.RAG는 검색(Retrieval)과 생성(Generation)을 결합해 이 문제를 해결합니다

RAG가 필요한 이유

LLM은 학습 데이터 이후의 정보를 모릅니다. 회사 내부 문서, 최신 뉴스, 개인 데이터에 대한 질문에 답하려면 외부 지식을 연결해야 합니다. RAG는 검색(Retrieval)과 생성(Generation)을 결합해 이 문제를 해결합니다.

mermaid
flowchart LR
    Q[사용자 질문] --> E[임베딩 변환]
    E --> VS[(벡터 DB)]
    VS --> |상위 k개 청크| R[관련 문서]
    R --> P[프롬프트 구성]
    Q --> P
    P --> LLM[LLM 생성]
    LLM --> A[최종 답변]

핵심 컴포넌트

1. 문서 청킹 (Chunking)

청킹 방법이 RAG 품질의 50%를 결정합니다:

python
from langchain.text_splitter import RecursiveCharacterTextSplitter

# 기본 청킹 (비추천)
simple_splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50
)

# 의미 단위 청킹 (권장)
semantic_splitter = RecursiveCharacterTextSplitter(
    chunk_size=800,
    chunk_overlap=100,
    separators=["

", "
", ".", "!", "?", " "],
    length_function=len,
)

# 문서 처리
docs = semantic_splitter.split_documents(raw_docs)

청킹 전략 비교:

전략청크 크기적합한 경우
Fixed size500-1000자일반 텍스트
Semantic가변논문, 기술 문서
Sentence1-3문장QA 시스템
Parent-Child중첩정밀 검색

벡터 DB 선택

python
# Chroma (로컬 개발)
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(
    documents=docs,
    embedding=embeddings,
    persist_directory="./chroma_db"
)

# pgvector (프로덕션 PostgreSQL)
from langchain_postgres import PGVector
vectorstore = PGVector.from_documents(
    documents=docs,
    embedding=embeddings,
    connection="postgresql://user:pass@host/db",
    collection_name="my_docs",
)

# 검색
results = vectorstore.similarity_search_with_score(
    query="RAG 청킹 방법",
    k=5
)

주요 벡터 DB 비교:

mermaid
quadrantChart
    title 벡터 DB 비교 (확장성 vs 관리 용이성)
    x-axis 관리 어려움 --> 관리 쉬움
    y-axis 소규모 --> 대규모
    quadrant-1 엔터프라이즈
    quadrant-2 확장성 우선
    quadrant-3 프로토타입
    quadrant-4 균형
    Pinecone: [0.85, 0.75]
    Weaviate: [0.40, 0.80]
    Chroma: [0.90, 0.30]
    pgvector: [0.60, 0.60]
    Qdrant: [0.55, 0.70]

고급 검색 전략

하이브리드 검색 (BM25 + 벡터)

python
from langchain.retrievers import EnsembleRetriever
from langchain_community.retrievers import BM25Retriever

# BM25 (키워드 검색)
bm25_retriever = BM25Retriever.from_documents(docs)
bm25_retriever.k = 3

# 벡터 검색
vector_retriever = vectorstore.as_retriever(search_kwargs={"k": 3})

# 앙상블 (0.5:0.5 가중치)
ensemble_retriever = EnsembleRetriever(
    retrievers=[bm25_retriever, vector_retriever],
    weights=[0.5, 0.5]
)

리랭킹 (Cohere Rerank)

python
from langchain.retrievers.contextual_compression import ContextualCompressionRetriever
from langchain_cohere import CohereRerank

compressor = CohereRerank(model="rerank-multilingual-v3.0", top_n=3)
compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor,
    base_retriever=ensemble_retriever
)

완성된 RAG 파이프라인

python
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough

llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

prompt = ChatPromptTemplate.from_template('''
다음 컨텍스트를 기반으로 질문에 답하세요.
컨텍스트에 없는 내용은 "모르겠습니다"라고 답하세요.

컨텍스트:
{context}

질문: {question}

답변:
''')

def format_docs(docs):
    return "

".join(doc.page_content for doc in docs)

rag_chain = (
    {"context": compression_retriever | format_docs, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

# 사용
response = rag_chain.invoke("회사 휴가 정책이 어떻게 되나요?")
print(response)

RAG 평가 지표

python
from ragas import evaluate
from ragas.metrics import (
    faithfulness,
    answer_relevancy,
    context_recall,
    context_precision,
)

result = evaluate(
    dataset=eval_dataset,
    metrics=[
        context_precision,    # 검색된 컨텍스트 정밀도
        context_recall,       # 관련 정보 재현율
        faithfulness,         # 답변의 사실 충실도
        answer_relevancy,     # 답변 관련성
    ],
)
print(result.to_pandas())

지표 해석:

  • Faithfulness > 0.8: 할루시네이션 낮음
  • Context Precision > 0.7: 검색 품질 양호
  • Answer Relevancy > 0.8: 질문에 잘 답함

프로덕션 체크리스트

  • 청크 크기 실험 (500/800/1200자 비교)
  • 임베딩 모델 선택 (OpenAI vs BGE vs E5)
  • 하이브리드 검색 + 리랭킹 적용
  • RAGAS로 자동 평가 파이프라인 구축
  • 답변 캐싱 (동일 질문 반복 비용 절감)
  • Guardrails 적용 (악의적 쿼리 필터링)

LangChain 공식 문서와 RAGAS GitHub를 함께 참고하세요. 청킹 전략 실험이 가장 큰 품질 향상을 가져옵니다.

이 글에서 다루는 AI

Google: Gemini 2.5 Flash

Google · 모델

OpenAI: GPT-4o

OpenAI · 모델

Anthropic: Claude Sonnet 4.5

Anthropic · 모델

관련 글 더 보기

가이드2026년 4월 6일

AI 재귀적 자기 개선 완전 가이드: 특이점 논쟁부터 실전 활용까지

비교2026년 4월 6일

Cursor vs GitHub Copilot vs Windsurf: AI 코딩 어시스턴트 비교 (2026)

비교2026년 4월 6일

GPT-5.4 vs Claude Opus 4.6 vs Gemini 2.5 Pro: 2026 플래그십 AI 비교

비교2026년 4월 6일

Auto Research vs AutoML: LLM 자율 연구와 자동 ML의 핵심 차이

ai.zip 커뮤니티에 참여하세요

AI 소식·유용한 링크 공유, 새 모델/서비스 토론까지 -- Discord에서 함께해요.

Discord 참여하기

이전글

AI로 데이터 분석하기: Code Interpreter, PandasAI, 실전 활용법

다음글

프롬프트 엔지니어링 완전 가이드: 2025년 최신 기법

댓글

0개

댓글을 작성하려면

로그인

해주세요

글 정보

튜토리얼
2026년 3월 28일2분

관련 글

AI 재귀적 자기 개선 완전 가이드: 특이점 논쟁부터 실전 활용까지

가이드

Cursor vs GitHub Copilot vs Windsurf: AI 코딩 어시스턴트 비교 (2026)

비교

GPT-5.4 vs Claude Opus 4.6 vs Gemini 2.5 Pro: 2026 플래그십 AI 비교

OpenAI API Platform

서비스

Claude API

서비스

Vertex AI

서비스

RAG (Retrieval-Augmented Generation)

방법론

Advanced RAG

RAG (Retrieval-Augmented Generation)

Modular RAG

RAG (Retrieval-Augmented Generation)

Agentic RAG

RAG (Retrieval-Augmented Generation)

비교

Auto Research vs AutoML: LLM 자율 연구와 자동 ML의 핵심 차이

비교

NotebookLM + Genspark로 PPT 10분 만들기: 직장인 발표자료 완전 가이드

튜토리얼

관련 모델

Google: Gemini 2.5 Flash

Google

OpenAI: GPT-4o

OpenAI

Anthropic: Claude Sonnet 4.5

Anthropic

관련 서비스

OpenAI API Platform

Claude API

Vertex AI

관련 방법론

RAG (Retrieval-Augmented Generation)

Advanced RAG

RAG (Retrieval-Augmented Generation)

Modular RAG

RAG (Retrieval-Augmented Generation)