Blog

[Spring AI/RAG] 1. AI 서비스 고도화 개요와 핵심 용어 정리

Category
Author
PinOnMain
1 more property
Spring AI와 Vector DB(pgvector)를 활용해 가상 전시관 AI 도슨트의 신뢰도를 높이기 위한 AI 고도화 방안 구현 스토리. 기존 LLM(+ Prompt Engineering)의 AI 활용에서 RAG 기반 대본 생성과 AI 음성(TTS) 파이프라인을 보완하는 개발 과정을 담고 있습니다.
Table of Content

1. 제안 배경 (Background)

현재 구현 단계의 한계 및 문제 인식
현재 가상 전시관(VExhibition)의 AI 도슨트 시스템은 작품의 짧은 설명(Description)과 LLM(대형 언어 모델)의 사전 학습된 내부 지식에만 의존하여 대본을 생성하고 있다. 이러한 구조는 다음과 같은 한계점을 지닌다.
환각 현상(Hallucination): LLM이 작품의 의도나 작가의 배경에 대해 존재하지 않는 거짓 정보를 사실처럼 지어낼 위험성이 존재한다.
전문성 및 정보의 깊이 부족: 단순한 텍스트 묘사를 넘어선 깊이 있는 미술사적 배경, 작가의 철학, 전시 기획 의도 등을 상세히 전달하기 어렵다.
최신 데이터 반영의 한계: 전시회 라인업이 변경되거나 새로운 작품이 추가될 때마다 LLM을 미세 조정(Fine-tuning)하는 것은 비용과 시간 측면에서 비효율적이다.
RAG를 통한 AI 1차 고도화
신뢰할 수 있는 외부 지식(전시 도록, 미술사 문헌 등)을 검색하여 프롬프트에 제공하는 RAG(검색 증강 생성, Retrieval-Augmented Generation) 파이프라인을 도입하고자 한다.

2. 기대 효과 (Expected Benefits)

LLM Prompt Engineering → RAG chain 고도화
신뢰할 수 있는 외부 지식(전시 도록, 미술사 문헌 등)을 검색하여 프롬프트에 제공하는 RAG(검색 증강 생성, Retrieval-Augmented Generation) 파이프라인을 도입하고자 한다.

3. 검증 방안 (Validation Methodology)

RAG 시스템이 실제로 얼마나 효과적으로 구축되었는지 정량적, 정성적으로 검증하기 위해 다음과 같은 지표를 활용하고자 한다.
정량적 평가 (Quantitative Evaluation)
검색 정확도 (Retrieval Metrics):
Hit Rate / MRR (Mean Reciprocal Rank): 사용자의 위치(작품 ID)나 질문에 대해 Vector DB가 얼마나 관련성 높은 문서를 상위권에 잘 검색해 오는지 평가.
생성 품질 (Generation Metrics):
코사인 유사도(Cosine Similarity): AI가 최종 생성한 도슨트 대본과 Vector DB에서 검색된 원본 문서 간의 의미적 유사도를 측정. 기준치(예: 0.7 이상)를 설정하여 원본에 기반한 설명인지 검증.
RAGAS (RAG Assessment) 프레임워크 활용:
Faithfulness (사실성): 생성된 대본이 검색된 컨텍스트 내의 정보만 포함하고 있는지(환각 비율) 측정.
Answer Relevance (관련성): 대본이 해당 작품(Production)을 설명하려는 목적에 정확히 부합하는지 측정.
정성적 평가 (Qualitative Evaluation)
실제 관람객 및 큐레이터(전시 기획자) 블라인드 테스트를 통한 AI 도슨트의 자연스러움, 전문성, 흥미 유발 정도 평가. 설문 등 활용

4. 핵심 용어 정리 (Key Terminology)

RAG (Retrieval-Augmented Generation)
검색 증강 생성. LLM이 답변을 생성하기 전에 외부 데이터베이스에서 관련 정보를 먼저 '검색(Retrieval)'한 후, 그 정보를 바탕으로 답변을 '생성(Generation)'하는 기술.
Embedding (임베딩)
텍스트나 이미지 등의 데이터를 AI가 이해하고 계산할 수 있도록 고차원의 숫자 배열(벡터, Vector)로 변환하는 과정. 의미가 비슷한 문장일수록 벡터 공간에서 가까운 위치에 놓이게 된다.
Vector Database (벡터 데이터베이스)
임베딩된 벡터 데이터를 저장하고, 벡터 간의 유사도를 빠르게 계산하여 검색할 수 있도록 최적화된 데이터베이스. (본 프로젝트에서는 PostgreSQL의 pgvector 확장 활용 예정)
Chunking (청킹)
방대한 길이의 문서를 AI가 처리하기 쉽도록, 그리고 벡터 검색의 정확도를 높이기 위해 의미 단위나 일정한 글자 수로 잘게 쪼개는 작업.
Cosine Similarity (코사인 유사도)
두 벡터 사이의 사잇각을 계산하여 두 데이터(문장)가 얼마나 유사한 의미를 지니고 있는지 -1에서 1 사이의 값으로 나타내는 측정 지표. 1에 가까울수록 의미가 완벽히 일치함을 뜻한다.

5. 시스템 요구사항 정의(System Requirements Specification)

기능적 요구사항(Functional Requirements)
시스템이 사용자에게 제공해야 하는 핵심 기능과 동작 방식이다.
1.
지식 데이터 인덱싱 (Knowledge Indexing):
시스템은 전시 기획서, 작가 배경, 미술사적 지식 등의 외부 문서(Text, PDF 등)를 입력받아 적절한 크기로 분할(Chunking)할 수 있어야 한다.
분할된 텍스트는 OpenAI Embedding API를 통해 고차원 벡터 데이터로 변환되어 PostgreSQL(pgvector)에 저장되어야 한다.
2.
문맥 기반 정보 검색 (Context Retrieval):
관람객(클라이언트)이 특정 작품(Production)에 접근하여 도슨트를 요청할 때, 시스템은 해당 작품과 연관성이 높은 추가 지식 문서를 Vector DB에서 실시간으로 검색하여 추출해야 한다.
3.
창의적 도슨트 대본 생성 (Creative Script Generation):
AI는 작품의 기본 설명(Description)과 검색된 외부 지식(Context)을 융합하여 도슨트 대본을 생성해야 한다.
현실감을 부여하기 위해, 동일한 작품이라도 요청할 때마다 다양한 관점과 어투로 대본이 생성되도록 프롬프트의 다양성(Randomness, Temperature 등)이 보장되어야 한다.
4.
실시간 음성 합성 및 반환 (Real-time TTS & Delivery):
생성된 대본은 즉시 OpenAI TTS API를 통해 오디오 스트림(byte array)으로 변환되어야 한다.
변환된 오디오 데이터는 서버 스토리지(S3 등)에 저장되지 않고, 즉시 Base64 문자열로 인코딩되어 클라이언트(언리얼 엔진)로 실시간 응답되어야 한다.
5.
클라이언트 동적 URL 연결 (Dynamic Client Routing):
언리얼 엔진 클라이언트는 하드코딩된 주소가 아닌, 게임 인스턴스 또는 블루프린트 함수 라이브러리(BFL)로 모듈화된 BaseUrl을 통해 서버와 통신하여 개발/운영 환경 전환이 자유로워야 한다.
비 기능적 요구사항(Non-Functional Requirements)
시스템의 성능, 안정성, 확장성, 보안 등 품질과 관련된 제약 조건이다.
1.
응답성 및 UX 방어 (Performance & UX Defense):
RAG 파이프라인(검색 -> 텍스트 생성 -> 음성 생성) 수행에 따른 서버 응답 지연(최대 10~20초 예상)을 처리하기 위해, 언리얼 엔진의 HTTP 통신 타임아웃은 최소 60초 이상으로 설정되어야 한다.
대기 시간 동안 사용자의 이탈을 막고 몰입감을 유지하기 위해, 클라이언트는 통신 시작과 동시에 AI 도슨트의 대기 애니메이션이나 사전 녹음된 짧은 추임새(Filler Audio)를 재생해야 한다.
2.
스토리지 및 리소스 효율성 (Storage & Cost Efficiency):
매번 다르게 생성되는 일회성(Ephemeral) 오디오 파일이 클라우드 스토리지 공간을 차지하지 않도록, S3 업로드를 배제하고 메모리 상에서 Base64로 직접 반환하는 구조를 채택하여 클라우드 유지 비용을 최소화한다.
3.
인프라 및 데이터베이스 호환성 (Infrastructure Compatibility):
기존 관계형 데이터베이스(MySQL)의 데이터를 벡터 데이터베이스 통합 운영을 위해 PostgreSQL로 완전하게 마이그레이션(Migration)해야 한다.
벡터 검색 기능을 지원하기 위해 PostgreSQL 환경 내에 pgvector 확장이 안정적으로 설치 및 활성화되어야 한다.
4.
시스템 안정성 및 예외 처리 (Reliability & Exception Handling):
OpenAI API의 크레딧 소진, 통신 타임아웃, DB 연결 오류 등의 예외 상황 발생 시, 서버가 다운되지 않도록 전역 예외 처리(Global Exception Handling)가 구현되어야 한다.
에러 발생 시 클라이언트가 파싱 중 크래시(Crash)를 일으키지 않도록, 규격화된 표준 응답 포맷(ApiResponseDto)을 통해 에러 메시지와 상태 코드를 안전하게 반환해야 한다.
Search