RAG과 LangChain 소개

Retrieval-Augmented Generation과 LangChain 프레임워크 이해

LangChain 프레임워크와 RAG(Retrieval-Augmented Generation) 기술의 개념, 필요성, 구현 방법에 대해 알아본다.

AI
RAG
LangChain
저자

Kwangmin Kim

공개

2025년 01월 01일

1 RAG 소개

1.1 RAG이란?

  • Retrieve = “검색하다”, “가져오다”, “찾아오다”, 검색하여 찾아오다 라고 이해하면 된다. IT 분야에선 대충 아래와 같은 의미를 갖는다.
    • 데이터 검색: 데이터베이스에서 정보를 찾아오다
    • 파일 복구: 삭제된 파일을 되살리다
    • 정보 추출: 시스템에서 필요한 정보를 가져오다
  • RAG(Retrieval-Augmented Generation)는 검색 증강 생성 기술로, 대규모 언어 모델(LLM)의 생성 능력과 외부 지식 검색을 결합한 AI 기술이다.
    • 검색(Retrieval): 질문과 관련된 정보를 외부 데이터베이스나 문서에서 검색
    • 증강(Augmented): 검색된 정보를 LLM의 입력에 추가하여 컨텍스트 (또는 문맥) 강화
    • 생성(Generation): 증강된 정보를 바탕으로 더 정확하고 근거 있는 답변 생성

1.1.1 Augmentation(증강)이란?

  • 증강(增强): 增(더하다) + 强(강하게 하다)
  • 이미 존재하는 것에 무언가를 보태어 실질적인 힘과 효용을 키운다는 의미
  • 기존의 본체(Base)는 유지한 채, 외부의 정보·도구·맥락을 결합하여 기능적 한계를 보완하고 전체 가치와 활용 범위를 확장하는 것이다.
  • 이는 단순히 “더 강하게 만든다”거나 “성능을 높인다”기보다, 부족한 부분을 외부 요소로 메워 새로운 상태를 만들어낸다는 개념에 가깝다.

“본체의 한계를 인정하고, 외부 요소를 결합해 가치의 차원을 넓힌다.”

1.1.1.1 강화(Reinforcement)와의 구조적 차이

구분 강화 (Reinforcement) 증강 (Augmentation)
변화의 위치 내부 외부 결합
방식 기존 능력을 더 세게 만듦 새로운 능력이나 맥락을 추가
비유 근육을 키우는 운동 외골격 수트 착용
결과 본체 자체가 강해짐 본체 + 보조물로 범위 확장

1.1.1.2 RAG에서의 Augmentation 의미 (기술적 정의)

  1. 구성 요소
  • A: 사용자 질문
  • B: 외부 지식(검색된 문서, 컨텍스트)
  1. 증강의 본질
  • A와 B를 결합(A + B)하여 LLM이 답변을 생성할 때 참고할 확장된 입력 상태(Context)를 만든다.
  1. 중요한 점
  • 모델의 파라미터(기억, 뇌)는 변하지 않는다
  • 증강은 학습(training)이 아니라 상태(state)의 일시적 확장이다

이 관점으로 보면, RAG·AR·증강 노동·증강 데이터는 모두 같은 철학적 구조 위에 있는 개념이다.

1.2 왜 RAG가 필요한가?

1.2.1 Chat GPT 도래 및 성공

  • 2022년 11월 출시: OpenAI ChatGPT 공개 후 폭발적 인기
  • 사용자 급증: 출시 2개월 만에 1억 사용자 돌파
  • 산업 변화: AI 기반 대화형 인터페이스의 새로운 표준 제시
  • 기술 혁신: Transformer 기반 대화형 AI의 상용화 성공
  • 생성형 AI 붐: GPT 성공으로 생성형 AI 시장 급성장

1.2.2 Chat GPT의 문제점

  • 할루시네이션(Hallucination): 그럴듯하지만 잘못된 정보 생성
  • 지식 컷오프: 학습 데이터 시점 이후 정보 부족
  • 일관성 부족: 같은 질문에 다른 답변 제공 가능
  • 도메인 특화 한계: 전문 분야 지식의 정확도 부족
  • 출처 불명: 답변 근거가 되는 정보 출처 제공 불가

1.2.3 RAG vs 일반 LLM

구분 일반 LLM RAG
지식 소스 outdated 학습 데이터만 활용 학습 데이터 + 외부 검색
정보 업데이트 재학습 필요 문서 추가만으로 가능
답변 근거 불명확 검색된 문서 기반
도메인 특화 제한적 전문 문서 활용 가능
할루시네이션 높은 위험 상대적으로 낮음
  • 가령, 최근 뉴스 동향에 대한 질문을 하면 검색기능이 없는 일반 LLM은 학습 데이터 시점 이후의 정보를 가지고 있지 않기 때문에 답변을 할 수 없다.
  • 하지만, RAG를 사용하면 최신 정보나 전문적인 내용이 담긴 문서 (또는 텍스트)를 제공해주면 더 구체적이고 최신의 정보를 검색하여 답변을 할 수 있다.
  • 따라서, RAG을 사용하면 아래와 같은 문제를 해결할 수 있다.
    • LLM의 한계 극복: Hallucination 문제 해결 및 학습 데터 시점 이후 정보 부족 문제 해결
    • 실시간 정보 활용: 최신 정보를 동적으로 검색하여 활용
    • 도메인 특화: 특정 분야의 전문 지식 기반 답변 생성
    • 비용 효율성: 전체 모델 재학습 없이 지식 확장 가능
    • 신뢰성 향상: 검색된 문서 기반으로 답변의 근거 제공
    • 근거 기반 답변: 검색된 문서를 바탕으로 답변 생성
    • 일관성 개선: 동일한 문서 소스 기반으로 일관된 답변
    • 출처 추적: 답변에 사용된 문서 출처 명시

1.3 RAG 적용 방법

Chat GPT의 할루시네이션을 줄이고 방대한 지식 기반으로 답변하는 도메인 특화 chatbot 구축 가능

즉, RAG란 chat gpt에게 잘 정제된 데이터를 제공하여 더 정확하고 신뢰할 수 있는 답변을 제공하는 방법이다.

주요 과제들: - Chat GPT의 RAG 과정은 비공개되어 user가 통제할 수 없는 부분이기 때문에 사용자들은 문서를 chat gpt가 잘 검색할 수 있는 형태로 변경하는 것이 중요 - 어려운 점은 각 문서마다 파일 형식이 다르고 이를 gpt가 처리가능한 형태로 전처리하는 과정이 공수가 많이 들어감 - 고유의 RAG를 만들어줘야 함

1.3.1 일반 LLM Process

사용자 질문 → 프롬프트 → LLM (with Black Box의 RAG 처리과정) → 답변 생성
  • 특징
    • 통제할수 없는 RAG 구조: 질문을 직접 LLM에 입력하여 자체 Black Box의 RAG 처리과정을 통해 답변 생성
    • 학습 데이터 의존: 검색 대상의 데이터가 모델이 사전에 학습한 데이터
    • 방대한 학습데이터 의존: 너무 방대한 학습 데이터로 질문과 연관된 데이터를 검색하는데 한계가 있음, 전문적이고 디테일한 질문일수록 검색 결과의 질이 떨어짐
    • 정적 지식: 학습 시점 이후의 새로운 정보 반영 불가
    • 제한된 컨텍스트: 입력 토큰 길이 제한으로 긴 문서를 업로드하여 질문하면 긴 문서의 처리가 어려움
    • 할루시네이션 위험: 학습되지 않은 정보에 대해 그럴듯한 거짓 답변 생성 가능
  • 따라서, RAG은 이 일반 LLM Process에 최신 정보 또는 추가 정보를 제공하여 Context(문맥)을 강화하여 더 정확하고 신뢰할 수 있는 답변을 제공하는 방법이다.

1.3.2 RAG Process

PromptQuery -> RAG(Retriever -> Similiarity Search -> Vector Store (DB) Pre-Processed Chunks-> Most Similar Chunk -> Retriver) -> PromptAnswer
  1. 질문 또는 쿼리 입력
  2. Retriever (검색기): 전처리된 Vector Store에서 유사도 검색을 통해 가장 유사한 문서 청크 검색
  3. Pre-Process
  4. document upload
  5. text chunk split: 문서를 검색 가능한 단위로 분할
  6. embedding: 텍스트를 숫자 벡터로 변환
  7. vector store (DB)에 embedding된 벡터를 DB에 저장, 매번 검색할때마다 임베딩을 하면 비용이 증가하기 때문에 벡터 스토어에 저장된 벡터와 쿼리의 벡터를 비교하여 유사도가 높은 벡터를 찾아오는 과정
  8. 검색(Retrieval): 보통 유사도 검색으로 코사인 유사도와 같은 방법으로 쿼리와 유사한 문서 청크 검색하여 검색 결과를 찾아오는 과정
  9. prompt engineering: 검색 결과를 포함한 프롬프트 구성
  10. LLM
  11. answer: LLM이 최종 답변 생성
  • 이 고유의 RAG를 만들어주는 것이 중요하지만 매우 고되고 어려운 과정이다. 내가 구현하려고 하는 답변 기능이 안되는 이유는 정말 수백가지에 달하기 때문이다.
  • 하지만, 분명한건 RAG를 잘 적용하여 원하는 기능을 구현하는 사례들이 많이 나오고 있고 효과적인 방법론들이 존재한다:
  • 고급 RAG 기법들
    • 코사인 유사도 최적화: 벡터 검색 정확도 개선
    • HyDE Retrieval: 가상 문서 생성을 통한 검색 성능 향상
    • FT Embedding: 도메인 특화 임베딩 모델 파인튜닝
    • Chunk Embedding 실험: 최적 청킹 전략 탐색
    • Reranking: 검색 결과 재순위화
    • Classification Step: 쿼리 유형 분류를 통한 검색 최적화
    • Prompt Engineering: 효과적인 프롬프트 설계
    • Tool Use: 외부 도구 활용 확장
    • Query Expansion: 쿼리 확장 및 개선

1.4 RAG 구현 난이도

RAG 구현은 사실상 LLM을 Tuning하는 것과 같다.

LLM Tuning 방법 난이도 비교: - Prompt Engineering (매우 쉬움): 프롬프트만 수정하여 성능 개선 - RAG (쉬움): 외부 지식 소스 연결하여 답변 품질 향상 - PEFT (어려움): Parameter-Efficient Fine-Tuning 적용 - Full Fine Tuning (매우 어려움): 전체 모델 파라미터 재학습

RAG의 장점: - 상대적으로 구현 난이도가 낮음 - 기존 모델 파라미터 수정 불필요 - 지식 업데이트가 용이함 - 비용 효율적인 성능 개선 방법

1.5 RAG 구현 방법

1.5.1 기본 RAG 파이프라인 구축

문서 처리: - 다양한 형식(PDF, DOCX, TXT, HTML) 문서 로딩 - 텍스트 추출 및 전처리 - 의미 있는 단위로 청킹 분할

벡터화 및 저장: - OpenAI Embeddings 또는 오픈소스 임베딩 모델 사용 - FAISS, Chroma, Pinecone 등 벡터 데이터베이스 구축 - 효율적인 유사도 검색 인덱스 생성

1.5.2 검색 시스템 구현

검색 전략: - 코사인 유사도 기반 벡터 검색 - 키워드 기반 하이브리드 검색 - 의미적 유사도와 키워드 매칭 결합

검색 최적화: - Top-K 검색 결과 개수 조정 - 검색 임계값(threshold) 설정 - 문서 메타데이터 활용 필터링

1.5.3 프롬프트 엔지니어링

프롬프트 구조: - 시스템 메시지: 역할 및 지침 명시 - 컨텍스트: 검색된 문서 내용 포함 - 질문: 사용자 쿼리 - 답변 형식: 원하는 출력 형태 지정

프롬프트 개선: - Few-shot 예시 추가 - 체인 오브 생각(Chain of Thought) 적용 - 답변 검증 및 출처 표기 요구

1.5.4 평가 및 개선

성능 평가: - 답변 정확도 측정 - 검색 정밀도(Precision) 및 재현율(Recall) - 사용자 만족도 조사

지속적 개선: - A/B 테스트를 통한 파라미터 최적화 - 사용자 피드백 기반 모델 업데이트 - 새로운 문서 데이터 정기 추가

2 Lang Chain 소개

2.1 LangChain이란?

  • 정의: LLM(Large Language Model) 기반 애플리케이션 개발을 위한 오픈소스 프레임워크
  • 주요 목적: 복잡한 LLM 애플리케이션을 쉽게 구축할 수 있도록 지원

2.2 LangChain의 핵심 기능

  • 체인(Chain): 여러 컴포넌트를 연결하여 복잡한 워크플로우 구성
  • 프롬프트 템플릿: 동적으로 프롬프트 생성 및 관리
  • 메모리: 대화 히스토리 및 컨텍스트 유지
  • 에이전트: 도구 사용 및 의사결정 자동화
  • 문서 로더: 다양한 형식의 문서 처리
  • 벡터 스토어: 임베딩 기반 검색 시스템

2.3 LangChain 사용 사례

  • 챗봇: 문맥을 이해하는 대화형 AI 시스템
  • 문서 QA: 문서 기반 질의응답 시스템
  • 데이터 분석: 자연어로 데이터 분석 수행
  • 코드 생성: 자연어 명령으로 코드 자동 생성
  • RAG 시스템: 검색 기반 답변 생성 시스템

Subscribe

Enjoy this blog? Get notified of new posts by email: