LLM & Generative AI/RAG in Practice

[LangChain RAG 구축 시리즈 Ep.01] 🔍 RAG를 구성하는 핵심 컴포넌트 4가지

ygtoken 2025. 4. 5. 19:19
728x90

이 글에서는 RAG 시스템을 구성하는 핵심 요소(Component) 4가지를 소개하고,
이들이 어떻게 상호작용하며 전체 검색-생성 흐름을 만드는지 알기 쉽게 정리해드립니다.


✨ RAG 시스템 전체 흐름 요약

먼저 전체 그림을 한눈에 보고 시작하겠습니다.

[사용자 질문]
     ↓
[문서 검색기 Retriever]
     ↓         ⟵ 벡터화된 문서 저장소(VectorDB)
[선택된 문서 + 질문]
     ↓
[LLM (GPT-3.5/4 등)]
     ↓
[최종 답변 생성]

핵심 키워드: 검색기(Retriever) + 언어 모델(LLM) + 문서 저장소(VectorDB)


📦 RAG 구성 요소 4가지

✅ 1. 문서 임베딩 & 벡터스토어 (Vector Store)

  • 역할: 텍스트 문서(예: metadata.json) → 숫자로 표현된 벡터로 변환
  • 사용 이유: 문장 간 유사도를 비교해 검색하기 위해
  • 사용 도구: OpenAIEmbeddings, ChromaDB, FAISS 등

📌 예시:

from langchain.embeddings import OpenAIEmbeddings

embedding = OpenAIEmbeddings()
vectors = embedding.embed_documents(["table name: products", "table name: orders"])

✅ 2. 검색기 (Retriever)

  • 역할: 사용자 질문과 유사한 문서를 벡터스토어에서 검색
  • 동작: 벡터 유사도 기반으로 top-k 문서를 반환
  • LangChain 객체: VectorStoreRetriever

📌 예시:

retriever = db.as_retriever(search_type="similarity", search_kwargs={"k": 3})
docs = retriever.get_relevant_documents("상품 정보가 담긴 테이블이 뭐야?")

✅ 3. 언어 모델 (LLM)

  • 역할: 질문 + 검색된 문서로부터 최종 답변 생성
  • 선택 예시: GPT-3.5 / GPT-4 (OpenAI)
  • LangChain 객체: ChatOpenAI, LLMChain, RetrievalQA

📌 예시:

from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(model="gpt-3.5-turbo")

✅ 4. RAG 체인 (QA Chain)

  • 역할: 전체 흐름을 묶어주는 통합 처리 체인
  • 기능: 검색된 문서 + 질문 → 응답을 만들어냄
  • LangChain 객체: RetrievalQA, ConversationalRetrievalChain

📌 예시:

from langchain.chains import RetrievalQA

qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=retriever
)

response = qa_chain.run("상품 정보를 담고 있는 테이블이 뭐야?")

🔄 전체 동작 순서 요약

  1. 문서 벡터화 → 벡터스토어 저장
  2. 질문 벡터화 → 유사한 문서 검색
  3. 검색된 문서 + 질문 → LLM 전달
  4. 최종 답변 생성

💡 실제 활용 예시: Iceberg metadata에 적용하면?

  • metadata.json에서 테이블 이름, 컬럼, 파티션 구조를 추출
  • 각 테이블을 설명하는 텍스트로 구성 → 벡터화
  • 사용자가 "상품 테이블 알려줘"라고 하면, 유사한 테이블 추천 가능!

📎 요약 및 핵심 정리

  • RAG는 문서 검색 + LLM 응답 생성을 결합한 구조입니다.
  • 핵심 구성요소는 임베딩, 벡터 검색, LLM, 체인 구성입니다.
  • 이 흐름을 이해하면 앞으로의 LangChain 실습이 더 쉬워집니다!
728x90