RAG Chat-Bot 데이터 흐름
데이터 준비 및 임베딩
- 데이터 로드
- Spring이 MySQL 데이터를 Java 객체나 문자열로 로드
- 문서 변환
- 로드된 정형 데이터를 LLM 모델이 이해할 수 있도록
Document 객체로 변환
- 임베딩 생성
- 각
Document의 텍스트를 EmbeddingModel에 전달하여 수치형 백터로 변환
- 벡터 저장
- 생성된 벡터와 원본 텍스트를
VectorStore에 저장
사용자 질의 처리 및 검색
- 질의 입력
- 사용자가 REST API를 통하여 자연어 질문을 입력
- ex) 페라리 팀이 가장 강력한 서킷은 어디야?
- 질의 임베딩
- 사용자 질문을 [데이터 준비 및 임베딩] 단계와 동일한
EmbeddingModel을 사용하여 벡터로 변환
- 유사도 검색
- 변환된 질문 벡터를
VectorStore에 질의하여, 의미적으로 가장 유사한 Top-K Document 청크를 검색
- 컨텍스트 확보
- 검색된
Document의 텍스트를 추출하여 LLM에게 제공할 Context 문자열로 구성
응답 생성 및 전달
- 프롬프트 구성
- 사용자 질문, 검색된 Context를 포함하는 최종 프롬프트를 생성,
PromptTemplate을 사용하면 템플릿화된 명령을 쉽게 적용 가능
- LLM 호출
- 구성된 프롬프트를
ChatClient에 전달하여 LLM을 호출, LLM은 제공된 데이터(검색된 Context)를 기반으로 답변을 생성
- 응답 스트리밍/전달
- LLM에서 생성된 자연어 응답을 받아 사용자에게 최종적으로 전달