✅ RAG
LLM은 학습한 지식 안에서만 답변할 수 있기 때문에 특정 도메인 지식이 필요한 경우에는 전혀 엉뚱하거나 틀린 정보를 말하는 Hallucination이 발생할 수 있습니다.
이런 문제를 해결하기 위해 RAG(Retrieval-Augmented Generation)라는 개념이 등장했습니다. RAG는 외부 데이터를 검색해 LLM에게 특정 맥락(context)을 제공하여, 보다 정확하고 신뢰할 수 있는 답변을 생성하도록 합니다.
✅ RAG 파이프라인
Spring AI에서 지원하는 대표적인 RAG 흐름은 다음과 같습니다.

- 데이터 색인 (Data Indexing)
- 문서 Chunking
- PDF 또는 텍스트 문서 업로드
- 텍스트 추출 및 정제
- LLM이 이해하기 좋은 단위로 Chunking(Text Splitting)
- 벡터화 및 저장
- 각 chunk에 대해 임베딩 생성(벡터화)
- 메타데이터 추가
- 벡터 저장소에 저장
- 문서 Chunking
- 질의응답 (Data Retrieval & Generation)
- 사용자의 질문을 벡터화
- 유사한 문서 chunk 검색
- 검색된 문서를 LLM에게 컨텍스트로 전달
- 최종 응답 생성
✅ Spring AI RAG 핵심 컴포넌트
Spring AI는 텍스트 청킹 전략, 임베딩 모델 연동, 벡터 저장소 연동, 메타데이터 기반 필터링, LLM 프롬프트 구성 및 요청 처리와 같은 RAG 시스템의 복잡한 요소들을 표준화된 컴포넌트로 추상화해줍니다.
✔️ EmbeddingModel
임베딩은 LLM과 검색 시스템을 연결하는 첫 번째 단계입니다. Spring AI는 `EmbeddingModel`이라는 텍스트를 벡터로 변환하는 인터페이스를 제공해 다양한 벤더의 임베딩 모델을 쉽게 연동할 수 있게 해줍니다.

✔️ VectorStore
`VectorStore`는 문서 벡터 저장 및 검색을 위한 인터페이스로, 임베딩된 문서를 저장하고 질문과 유사한 문서를 빠르게 검색해주는 핵심 컴포넌트입니다.

추상화가 잘 되어 있어 처음에는 인메모리 기반의 `SimpleVectorStore`로 개발하다가 서비스 확장 시 `PgVector`, `Milvus`, `Qdrant` 등 외부 DB로 코드 변경 없이 쉽게 전환할 수 있습니다.
✔️ TextSplitter
LLM은 긴 문서를 한 번에 처리하지 못하기 때문에 문서를 적절한 길이로 나누는 작업이 필요합니다. 이를 위해 Spring AI는 `TextSplitter`를 제공합니다.

✔️ FilterExpression
단순히 유사한 문서를 찾는 것만으로는 부족할 수 있기 때문에, Spring AI는 문서 메타데이터를 기반으로 조건 필터링을 지원합니다. 이를 통해 SQL의 WHERE 절과 유사한 방식으로 필터링할 수 있습니다.

🔖 참고
https://blog.sionic.ai/spring-ai-series-2#1ebb25e3-2acc-80ea-bd33-c61be025f426
'Spring' 카테고리의 다른 글
| Spring AI 개발 일지 (3) - 챗봇 구현 (0) | 2025.12.05 |
|---|---|
| Spring AI 개발 일지 (2) - OpenAI 사용해 후기 요약 구현해보기 (0) | 2025.11.19 |
| Spring AI 개발 일지 (1) - Spring AI 소개와 핵심 모델 (0) | 2025.11.19 |
| PageableExecutionUtils.getPage로 페이징 성능 개선하기 (0) | 2025.10.24 |
| Spring 비동기로 이메일 전송하기 (0) | 2025.10.21 |