RAG Chat-Bot 데이터 흐름

데이터 준비 및 임베딩

  1. 데이터 로드
    • Spring이 MySQL 데이터를 Java 객체나 문자열로 로드
  2. 문서 변환
    • 로드된 정형 데이터를 LLM 모델이 이해할 수 있도록 Document 객체로 변환
  3. 임베딩 생성
    • Document의 텍스트를 EmbeddingModel에 전달하여 수치형 백터로 변환
  4. 벡터 저장
    • 생성된 벡터와 원본 텍스트를 VectorStore에 저장

사용자 질의 처리 및 검색

  1. 질의 입력
    • 사용자가 REST API를 통하여 자연어 질문을 입력
    • ex) 페라리 팀이 가장 강력한 서킷은 어디야?
  2. 질의 임베딩
    • 사용자 질문을 [데이터 준비 및 임베딩] 단계와 동일한 EmbeddingModel을 사용하여 벡터로 변환
  3. 유사도 검색
    • 변환된 질문 벡터를 VectorStore에 질의하여, 의미적으로 가장 유사한 Top-K Document 청크를 검색
  4. 컨텍스트 확보
    • 검색된 Document의 텍스트를 추출하여 LLM에게 제공할 Context 문자열로 구성

응답 생성 및 전달

  1. 프롬프트 구성
    • 사용자 질문, 검색된 Context를 포함하는 최종 프롬프트를 생성, PromptTemplate을 사용하면 템플릿화된 명령을 쉽게 적용 가능
  2. LLM 호출
    • 구성된 프롬프트를 ChatClient에 전달하여 LLM을 호출, LLM은 제공된 데이터(검색된 Context)를 기반으로 답변을 생성
  3. 응답 스트리밍/전달
    • LLM에서 생성된 자연어 응답을 받아 사용자에게 최종적으로 전달