LangChain example 04

Kitkat·2025년 1월 17일

RAG(Retrieval Augmented Generation)

  • 기존 언어 모델에 외부 데이터를 결합하여 성능을 향상시키는 기술
  • 정보 검색(Retrieval)과 텍스트 생성(Generation)을 결합한 시스템

RAG의 장점

  • 기존 LLM 모델을 재사용하므로 별도의 학습 비용이 들지 않음
  • 모델 재학습 대신 외부 지식베이스를 활용하여 저렴한 비용으로 운영 가능
  • 새로운 정보 추가 시 데이터베이스만 업데이트하면 되어 유지보수가 용이
    속도 측면
  • RAG는 검색 과정이 추가되어 순수 LLM보다 응답이 약간 느릴 수 있지만, 모델을 처음부터 학습시키는 것과 비교하면 효율적인 방법

RAG와 Fine-tuning의 차이

  • RAG는 기존 LLM을 수정하지 않고 외부 데이터베이스를 연결하여 실시간으로 정보를 검색하고 활용
  • Fine-tuning은 사전 학습된 LLM을 특정 작업이나 도메인에 맞게 추가 학습하는 과정. 모델의 가중치와 매개변수를 직접 조정하여 특정 도메인에 최적화

RAG 데이터 처리 파이프라인

Document Loader

  • 다양한 형식(PDF, TXT, HTML 등)의 문서를 로드하는 컴포넌트
  • 메타데이터 추출 및 문서 구조 보존
  • LangChain에서 제공하는 표준화된 인터페이스

Text Splitter

  • 문서를 적절한 크기의 청크로 분할
  • 구조 기반 분할: 문단, 문장 단위로 분할
  • 의미 기반 분할: 의미적 연관성을 고려한 분할
  • 너무 크게 분할하면 관련 없는 정보가 포함되고, 반대로 너무 작으면 문맥에서 손실이 발생함(일반적으로 500-1000자 권장)
  • 오버랩 설정으로 문맥 유지 가능

Retriever

  • 분할된 문서를 벡터화하여 저장
  • 벡터 스토어와 연동하여 효율적인 검색 수행

토큰(Token)

  • 토큰은 텍스트를 LLM이 처리할 수 있는 가장 기본적인 의미 단위로 나누는 것
  • 토큰화 과정은 LLM이 텍스트를 이해하고 처리하는 기본 단위가 되며, RAG 시스템에서도 중요한 역할
  • 예: "ChatGPT is great!" → ["Chat", "G", "PT", "is", "great", "!"]

벡터(Vector)

  • 토큰화 된 텍스트를 수백~수천 차원의 수치 배열로 변환하는 과정(임베딩)
  • 유사한 의미를 가진 텍스트는 벡터 공간에서 가까이 위치
    코사인 유사도로 텍스트 간 유사성 측정

RAG에서의 벡터 처리

  • 질문과 문서를 벡터로 변환
  • 유사도 비교를 통한 관련 문서 검색
  • 청크 단위로 분할된 문서를 벡터화하여 저장

벡터 스토어

  • 벡터화된 데이터의 저장과 검색을 위한 특수 데이터베이스
  • FAISS(대규모 데이터), Chroma(로컬 개발), Pinecone(클라우드)

RetrievalQA

  • LangChain에서 제공하는 RAG 구현을 위한 체인(Chain) 클래스
  • RAG 시스템을 쉽게 구현할 수 있게 해주는 고수준 인터페이스

주요 기능

  • 질문(Query)을 받아서 관련 문서를 검색
  • 검색된 문서와 질문을 LLM에 전달
  • LLM이 문서를 참고하여 답변 생성

체인 타입

  • stuff: 모든 문서를 한 번에 처리
  • map_reduce: 각 문서별로 처리 후 결합
  • refine: 순차적으로 답변을 개선
  • map_rerank: 각 문서별 답변 생성 후 순위화

0개의 댓글