안녕하세요.
오늘은 AWS Native 리소스를 이용하여 RAG을 구성해 보겠습니다.
# RAG이란 ?
RAG는 Retrieval-Augmented Generation의 약자로, 검색 증강 생성이라 합니다.
쉽게 설명하면, 사용자가 질문했을 때 AI가 학습된 지식만으로 답변하는 것이 아니라, 외부 문서나 데이터에서 관련 내용을 먼저 검색한 뒤 이를 참고해 답변하는 방식입니다.
예를 들어 사내 규정 문서를 RAG에 연결하면 다음과 같이 동작합니다.
사용자 질문
→ 관련 문서 검색
→ 검색한 내용을 LLM에 전달
→ 문서를 기반으로 답변 생성
RAG를 사용하면 최신 문서나 사내 데이터처럼 LLM이 원래 알지 못하는 정보도 활용할 수 있습니다. 또한 실제 문서를 근거로 답변하기 때문에 잘못된 내용을 생성하는 문제를 줄이는 데 도움이 됩니다.
정리하면, RAG는 LLM이 답변하기 전에 필요한 정보를 먼저 찾아보도록 만드는 기술입니다.
AWS에서는 이를 아주 간단하게 설정할 수 있는 AWS Bedrock의 Knowledge Bases 라는 서비스가 있습니다.
# AWS Bedrock Knowledge Bases 란?
RAG 구성에는 문서 파싱, 청크 분할, 임베딩 모델 호출, 벡터 데이터베이스 저장,
유사 문서 검색, 프롬프트 구성 등 다양한 과정이 필요합니다.
이러한 과정을 직접 구현하려면 각 단계별 로직을 개발하고 서비스 간 연동도 별도로 구성해야 합니다.
Amazon Bedrock Knowledge Bases는 이 복잡한 RAG 처리 과정을 관리형으로 제공합니다.
즉, 개발자는 문서 처리와 검색 로직을 직접 구현하는 대신 Knowledge Base에 데이터 소스, 임베딩 모델, 벡터 저장소를 연결하고 API를 호출하는 방식으로 RAG를 구성할 수 있습니다.
S3 문서
→ 문서 파싱
→ Chunk 분할
→ Titan Embedding 호출
→ S3 Vectors 저장
→ 사용자 질문과 유사한 문서 검색
→ Nova 모델에 질문과 검색 문서 전달
→ 문서 기반 답변 생성
# Knowledge Bases 배포하기
직접 배포해보겠습니다.
사전에 S3에 mark down 파일로 가상의 사내 가이드 문서를 업로드한 상태입니다.
참고로 Knowledge Base는 Root 어카운트로는 생성할 수 없으므로 IAM 유저로 생성해야 합니다.

Bedrock에서 지식 기반 → 생성 → 벡터 저장소가 포함된 지식 기반 클릭 합니다.
"벡터 저장소가 포함된 지식 기반" : PDF, Markdown, Word, TXT 같은 비정형 문서를 대상으로 하는 일반적인 RAG 방식
"구조화된 데이터 저장소가 포함된 지식 기반" : 데이터베이스나 테이블처럼 열과 스키마가 정해진 데이터를 조회하는 방식

데이터 소스에 Amazon S3를 선택합니다.

S3 찾아보기를 통해 문서가 업로드되어 있는 S3를 선택합니다.
파운데이션 모델을 이용하여 그림이 많은 PDF를 청킹 하는 것도 가능합니다.
만약 청킹 조건이 까다로워 Custom이 필요할 경우 Lambda를 붙여 Lambda를 통해 청킹 하는 것도 가능합니다.


이제 Embedding 모델을 선택하겠습니다.
Amazon의 Titan 모델로 선택하겠습니다.
저는 서울리전이라 Titan 모델 밖에 없는 것 같습니다.

이제 Vector DB를 선택합니다.
저희는 S3 Vectors를 선택하겠습니다.
이제 생성하겠습니다.

생성되었습니다.
이제 테스트를 해보겠습니다.
테스트를 하기 전 동기화 과정이 필요한데요.
동기화 과정은 S3에 있는 원본 문서를 실제로 검색 가능한 Vector 데이터로 변환하는 과정을 의미합니다.

동기화가 완료되면 "지식 기반 테스트"가 활성화됩니다.

모델을 선택하고 회사 연차 규정에 대해 물어보면 답변해 주는 것을 확인 가능합니다.
감사합니다.