1. RAG(Retrieval Augmented Generation)란 무엇인가? [0]

thumbnail RAG는 대규모 문서에서 AI가 정확하고 최신 정보에 기반한 답변을 생성하도록 돕는 기술이다.

1.1. RAG의 필요성 [0]

  1. 기존 AI의 한계 [0]
    1. 일반적인 챗봇은 수십 개의 파일만 처리할 수 있어 방대한 양의 문서를 다루기 어렵다. [0]
    2. 문서 제목이나 내용으로 검색하는 방식은 500GB 전체를 매번 검색해야 하므로 비효율적이다. [2]
    3. 문서를 미리 요약하여 검색 가능한 형태로 만드는 방식은 정확도가 떨어질 수 있다. [5]

1.2. RAG의 핵심 원리 [7]

  1. 단어를 숫자로 변환 (워드 임베딩) [8]
    1. 컴퓨터는 단어를 이해하지 못하므로, 인간의 언어를 숫자로 변환하는 워드 임베딩 과정을 거친다. [8]
  2. 의미 기반 검색을 위한 벡터 저장 [10]
    1. 500GB의 문서를 단어의 의미(semantics)를 보존하는 벡터 임베딩으로 변환하여 데이터베이스에 저장한다. [10]
    2. 이렇게 저장된 벡터를 통해 더 빠르게 정보를 검색할 수 있다. [11]
  3. RAG (Retrieval Augmented Generation) [12]
    1. 위에서 설명한 아이디어를 합쳐, 검색 증강 생성(RAG)이라는 새로운 방법을 사용한다. [12]

1.3. RAG의 작동 방식: 3단계 [13]

  1. 검색 (Retrieval) [16]
    1. 사용자의 질문도 워드 임베딩으로 변환한다. [16]
    2. 질문의 벡터 임베딩과 문서들의 벡터 임베딩을 비교하여 의미적으로 가장 유사한 정보를 찾는다. [16]
    3. 이는 키워드 검색이 아닌, 질문의 의미와 맥락을 파악하는 시맨틱 검색이다. [17]
  2. 증강 (Augmentation) [19]
    1. 검색된 관련 정보를 AI의 프롬프트(명령어)에 실시간으로 주입하는 과정이다. [19]
    2. 이를 통해 AI는 학습 시점 이후의 최신 정보나 특정 문서의 내용을 기반으로 답변할 수 있다. [20]
    3. 검색된 정보는 AI에게 증강된 지식으로 제공된다. [23]
    4. 이 과정은 AI 모델을 직접 수정하거나 재학습(fine-tuning)할 필요가 없다. [25]
  3. 생성 (Generation) [27]
    1. AI는 증강된 지식과 원래 질문을 바탕으로 답변을 생성한다. [27]
    2. 예를 들어, "작년 코드클라우드 서비스 계약에 대해 알려줘"라는 질문에 대해, AI는 관련 문서 정보를 활용하여 답변한다. [30]
    3. 질문의 조건(작년)을 고려하여 제공된 데이터를 바탕으로 최적의 답변을 도출한다. [31]

2. RAG 시스템 구축 및 최적화 [32]

  1. RAG 시스템의 강력함 [32]
    1. RAG는 AI의 학습 데이터 범위를 넘어선 깊이 있는 지식을 활용할 수 있게 한다. [32]
  2. 최적화를 위한 고려 사항 [33]
    1. RAG 시스템의 성능은 캘리브레이션(조정)을 통해 향상될 수 있다. [33]
    2. 데이터 분할(Chunking) 전략: 문서를 작은 조각으로 나누는 크기와 중첩 정도가 검색 정확도에 큰 영향을 미친다. [34]
    3. 임베딩 전략: 어떤 임베딩 모델을 사용할지 결정한다. [36]
    4. 검색 전략: 단어 유사도 임계값, 추가 필터 등을 설정하여 검색 결과를 제어한다. [36]
    5. 데이터의 종류에 따라 최적의 전략이 달라진다. 예를 들어, 법률 문서는 긴 문단 구조를 유지하는 청킹이, 고객 지원 대화는 문장 단위 청킹이 적합하다. [37]

3. RAG 시스템 실습: KodeKloud 랩 실습 [41]

  1. 실습 환경 설정 [46]
    1. Python 가상 환경을 설정하고 필요한 라이브러리(UV, Chroma DB, Sentence Transformers, OpenAI, Flask)를 설치한다. [47]
    2. 설치가 완료되면 "ready" 표시로 확인한다. [48]
  2. 문서 준비 및 이해 [52]
    1. TechC Corp의 문서 저장소(Markdown 문서, 직원 핸드북, 제품 사양, 회의록, FAQ 등)를 검토한다. [53]
    2. 이 문서들을 키워드뿐만 아니라 의미 기반으로 검색 가능하게 만드는 것이 목표이다. [54]
  3. 벡터 데이터베이스 초기화 [56]
    1. Chroma DB를 로컬에 설치하고 tech_corps_docs라는 이름의 컬렉션을 생성한다. [57]
    2. 이는 AI의 지식 저장소 역할을 한다. [59]
  4. 데이터 청킹 전략 학습 [60]
    1. 텍스트를 크기 500, 중첩 100으로 분할하는 스크립트를 작성한다. [61]
    2. 이는 문맥을 보존하고 검색 품질을 높이는 데 도움이 된다. [62]
    3. 청킹은 정확도를 위해 매우 중요하다. [65]
  5. 임베딩 이해 [66]
    1. all-MiniLM-L6-v2 모델을 사용하여 문장을 벡터로 변환하고 유사도를 계산한다. [67]
    2. 질문과 문서 모두 벡터로 변환되어 의미 기반 유사도 측정이 가능하다. [69]
    3. "개 출입 가능"과 "애완동물 허용"은 높은 유사도를 보이지만, "원격 근무"는 그렇지 않다. [70]
  6. 데이터 임베딩 및 저장 (지식 주입) [73]
    1. 문서들을 청크로 나누고, 각 청크를 임베딩하여 벡터와 메타데이터를 Chroma DB에 저장한다. [75]
    2. 이는 지식 주입 파이프라인이다. [80]
  7. 시맨틱 검색 활성화 [81]
    1. 간단한 검색 엔진 스크립트를 만들어, 임베딩된 쿼리를 바탕으로 의미적으로 가장 유사한 상위 결과를 가져온다. [82]
    2. 이를 통해 의미 기반 검색의 효과를 확인할 수 있다. [85]
  8. 웹 인터페이스 구축 및 테스트 [86]
    1. Flask 앱을 사용하여 간단한 웹 인터페이스를 실행한다. [87]
    2. CEO 스타일의 질문("반려동물 정책은 무엇인가?")을 입력하여 RAG 흐름(검색, 증강, 생성)과 출처를 확인한다. [89]
    3. 이를 통해 개인 문서에 기반한 답변을 얻을 수 있다. [92]
    4. 검색, 증강, 생성이 결합된 UI를 통해 질문할 준비가 완료된다. [93]
  9. 최종 RAG 시스템 요약 [94]
    1. 빠르고, 정확하며, 확장 가능한 RAG 시스템이 구축되었다. [94]
    2. 주요 설정 요약: [95]
      • 모델: all-MiniLM-L6-v2 [96]
      • 청킹: 크기 500, 중첩 400 (테스트), 스트라이드 400 (주입) [97]
      • 저장소: Chroma DB, tech_corps_docs 컬렉션 [99]
      • 웹 인터페이스: Flask 앱 (포트 5000) [100]
      • 안전 장치: 유사도 임계값 설정으로 잘못된 정보(환각) 감소 [101]
  10. 결론 및 제언 [102] 1. 청킹 전략 등을 미세 조정하여 검색 품질과 답변 유용성을 개선할 수 있다. [102] 2. 실습을 통해 작동하는 RAG 시스템을 성공적으로 구축했다. [104] 3. 직접 시도해 볼 것을 권장한다. [105]