본문 바로가기

AI·LLM 엔지니어링

LangChain RAG 구축 2편: 임베딩 모델 선택과 Vector DB 구축

반응형

요약: RAG 검색 품질을 좌우하는 임베딩 모델 선택 기준과 Vector DB 저장·검색 구조를 정리합니다.

대상 독자: Chroma, FAISS, Milvus, pgvector 같은 Vector DB를 RAG에 연결하려는 개발자

핵심 키워드: 임베딩 모델, Vector DB, LangChain, Chroma, FAISS, pgvector

반응형

 

LangChain 기반 RAG 시스템 구축

2편. 임베딩 & 벡터DB 구축 편 

1편에서는 데이터를 어떻게 수집·정제하고 구조화하는지 다뤘다.
이제 준비된 Chunk들이 있다면, 다음 단계는 다음 두 가지다:

임베딩(Embedding) 생성
벡터DB(Vector Database) 적재 및 검색 구조 설계

이 두 요소가 RAG 성능을 결정짓는 핵심이다.
이번 편에서는 실제 사내 환경 기준으로 가장 많이 사용하는 선택지와
경험 기반 최적화 포인트까지 정리해본다.


1. 전체 구성 흐름

[문서 Chunk 데이터]
     ↓
[임베딩 모델 적용]
     ↓
[벡터 생성]
     ↓
[벡터DB 저장]
     ↓
[검색(Search) → LLM 답변]

이 흐름에서 역할이 가장 중요한 단계가 임베딩 모델 선택이다.
모델 선택이 잘못되면 검색 품질이 망가지고, LLM이 엉뚱한 문서를 찾는다.


2. 임베딩 모델 선택 전략

임베딩 모델은 크게 3가지 계열이 실무에서 많이 쓰인다.

① 오픈소스 임베딩 모델 (추천)

  • BAAI/bge-m3
  • bge-large-ko
  • jina-embeddings-v3
  • mxbai-embed-large
  • KoSimCSE

장점

  • 로컬 설치 가능 → 사내망 환경에서 필수
  • 비용 없음
  • RAG 최적화 모델이 많음

단점

  • GPU 요구
  • 품질이 모델마다 편차 있음

② 클라우드 임베딩 (OpenAI, Azure)

  • text-embedding-3-large
  • text-embedding-3-small

장점

  • 품질 매우 좋음
  • 구축이 쉬움

단점

  • 사내망에서는 사용 불가
  • 비용 증가
  • 민감 문서 반출 문제 있음

③ 멀티모달 임베딩 모델

PDF에 이미지·표가 많은 회사 문서라면 아래 모델을 고민:

  • jina-clip-v3
  • SigLip

3. 실무 기준 모델 추천

시나리오 추천 모델

사내 폐쇄망, GPU 있음 BAAI/bge-m3
한국어 문서 중심 bge-large-ko, KoSimCSE
이미지+텍스트 혼합 jina-clip-v3
성능 최우선 text-embedding-3-large

4. LangChain에서 임베딩 생성하기

아래는 가장 많이 쓰는 bge 계열 임베딩 모델 기반 예제.

from langchain_community.embeddings import HuggingFaceEmbeddings

model_name = "BAAI/bge-m3"

emb = HuggingFaceEmbeddings(
    model_name=model_name,
    model_kwargs={"device": "cuda"}
)

vectors = emb.embed_documents([ch["text"] for ch in records])

5. 벡터DB 선택 기준

RAG의 검색 품질, 속도, 업데이트 편의까지 전부 여기에 달려 있다.

🔥 실무에서 가장 많이 쓰는 4대 벡터DB

벡터DB 장점 단점

FAISS 빠름, 무료, 단일 파일 저장 분산 X, 운영 기능 없음
Chroma 로컬 개발 최강, 간편 대규모 운영에는 부족
Weaviate 벡터DB 중 기능 최강 운영 부담, Kubernetes 필요
PGVector 기존 PostgreSQL 환경과 통합 대규모에선 느릴 때 있음

6. 실무 추천 아키텍처

사내 구축 기준으로 가장 안정적인 조합:

bge-m3 (임베딩)
+ 
FAISS 또는 Chroma (벡터DB)

규모가 커지면:

bge-m3
+
Weaviate 클러스터 (1~3노드)

7. LangChain + Chroma 구현 예시

가장 쉬운 벡터DB 예제:

from langchain_community.vectorstores import Chroma

vector_store = Chroma.from_texts(
    texts=[rec["text"] for rec in records],
    embedding=emb,
    metadatas=[rec["metadata"] for rec in records],
    persist_directory="./db"
)

vector_store.persist()

검색 테스트:

results = vector_store.similarity_search("계약 해지 절차 알려줘", k=3)
for r in results:
    print(r.page_content[:200], r.metadata)

8. FAISS 기반 구축 예시

from langchain_community.vectorstores import FAISS

db = FAISS.from_texts(
    texts=[rec["text"] for rec in records],
    embedding=emb
)

db.save_local("./faiss-db")

검색:

db.similarity_search("인사평가 기준 알려줘", k=5)

9. 검색 품질 향상 기법

✔ 1) Hybrid Search

BM25 + 벡터 검색을 혼합

✔ 2) Reranking

bge-reranker-large 등으로 1차 검색 결과 재정렬

✔ 3) Metadata Filtering

문서 유형/부서/날짜로 필터링

LangChain 예시:

vector_store.similarity_search(
    "보안 정책 요약",
    k=5,
    filter={"dept": "보안팀"}
)

10. 실전 팁 3개

💡 팁 1 — 임베딩은 “업데이트”보다 “재생성”이 더 효율적일 때가 많다

문서가 쌓이면 부분 업데이트가 꼬이기 쉽다.
주기적 Full Rebuild가 운영을 더 안전하게 만든다.


💡 팁 2 — 메타데이터 검색은 RAG 성능의 절반 이상을 잡아준다

“doc_type=정책” 같은 필터만 있어도
검색 품질이 비약적으로 올라간다.


💡 팁 3 — 임베딩 모델은 6개월~1년 단위로 교체하라

오픈소스 임베딩 모델의 발전 속도가 매우 빠르다.
정기적인 벤치마크가 필수다.


11. 다음 편 예고

📌 3편. RAG 성능 최적화 + 평가 지표 편

  • Hybrid Search로 검색 품질 끌어올리기
  • Reranker 활용법
  • 평가 지표: Recall@K, MRR, nDCG
  • 기업 문서 기반 실전 성능 점검 방법

 


🔖 추천 태그

#RAG #LangChain #임베딩 #벡터DB #FAISS #Chroma
#Weaviate #bge #검색엔진 #AI검색 #기업AI #데이터아키텍처

 

반응형
좋아요공감
공유하기
URL 복사카카오톡 공유페이스북 공유엑스 공유
통계
게시글 관리

'AI·LLM 엔지니어링' 카테고리의 다른 글

〈LangChain 기반 RAG 시스템 구축〉 4편: 프롬프트 설계 + LLM 체인 구성  (0)〈LangChain 기반 RAG 시스템 구축〉 3편 : RAG 성능 최적화 + 평가 지표  (0)〈LangChain 기반 RAG 시스템 구축〉 1편: 데이터 준비 파이프라인 구축  (0)로컬 LLM 서버 구축 가이드: vLLM, GGUF, FastAPI로 사내 AI API 만들기  (0)3편 로컬 LLM 구축 가이드 – RAG 성능 최적화 + 평가 지표  (0)
2025.11.27
2025.11.27
2025.11.27
2025.11.27
2025.11.27

실무 적용 체크리스트

점검 항목운영 기준

모델 선택 한국어·영어 문서 비중과 도메인 용어를 기준으로 임베딩 모델 평가
저장 구조 문서 ID, chunk ID, 페이지, 권한 정보를 metadata로 보존
검색 전략 Top-K, similarity score, metadata filtering 기준을 설정
운영 관리 인덱스 재생성, 증분 업데이트, 삭제 동기화 절차 마련

자주 묻는 질문

임베딩 모델은 무엇을 기준으로 고르나요?

문서 언어, 도메인 용어, 검색 재현율, 속도, 운영 비용을 함께 비교해야 합니다.

Vector DB는 Chroma와 FAISS 중 무엇이 좋나요?

로컬 실험은 Chroma나 FAISS가 간단하고, 운영 환경에서는 권한·확장·백업 요구사항에 맞춰 Milvus나 pgvector도 검토할 수 있습니다.

벡터 인덱스는 얼마나 자주 갱신해야 하나요?

문서 변경 빈도에 따라 다르며, 업무 문서가 자주 바뀐다면 증분 업데이트와 전체 재색인 주기를 분리하는 것이 좋습니다.

함께 읽으면 좋은 글

반응형