개요
이전 글에서는 문서 업로드 이후의 백엔드 흐름, 즉 문서 파싱, 임베딩 생성, Milvus 벡터DB 저장 및 문서화 작업을 정리하였다. 이번 글에서는 이 파이프라인 위에 자연어 질문 기반 검색 및 LLM 기반 응답 생성 기능을 구현한 과정을 정리한다. Redis 기반 캐싱, GPT-4o 통합, 불확실성 점수 계산, E2E 테스트까지 포함된 RAG 기반 Q&A 기능은 사용자 질문에 대해 실시간으로 정확도 높은 답변을 생성하는 핵심 컴포넌트다.
자연어 질문 RAG 검색 및 LLM Q&A 기능 구현
전체 구현 구조
- 질문 입력 → 벡터 검색 → LLM 호출 → 불확실성 평가 → 응답 반환 및 캐싱
- OpenAI GPT-4o 모델을 통한 답변 생성
- Redis를 통한 응답 캐싱 구현
- 검색 결과의 신뢰도를 기반으로 경고 메시지 표시
세부 구현 흐름
1. LLM 서비스 통합
- GPT-4o API 연동 및 답변 생성 모듈 구현 (
llm_service.py) - .env에
OPENAI_API_KEY설정, docker-compose에 환경변수 반영
2. Redis 캐싱 시스템 구현
- 질문+컨텍스트 SHA256 해시 기반 캐시 키 생성
- TTL 1시간 설정, Redis 연결 풀로 성능 최적화
3. 불확실성 점수 및 경고 메시지
- 유사도 기반 신뢰도 계산, 0.7 미만일 경우 경고 메시지 생성
- 다국어 경고 메시지 및 동적 문장 구성
4. Q&A API 통합
/api/v1/search/qa엔드포인트 구현- 벡터 검색 결과 + LLM 응답 통합하여 최종 응답 반환
- 결과 캐싱 처리까지 포함한 전체 RAG 파이프라인 구성
5. E2E 테스트 구현
test_search_e2e.py에 전체 시나리오 테스트 작성- 캐시 히트/미스, 신뢰도 경고, 예외 상황 검증
- 총 17개 테스트 중 15개 통과, 이후 수정으로 100% 통과율 달성
연동 문제 해결 과정
1. 모킹 경로 불일치
- 문제:
app.services.xxx로 모킹했으나 실제 import 경로는api.search.xxx - 해결:
patch("api.search.embed_text")형식으로 수정
2. OpenAI API 키 미설정
- 문제:
embedding_service.py에서 모듈 import 시점에 API 키 요구 - 해결:
.env및 docker-compose 설정 후 재실행
3. 의존성 누락
- 문제:
redis,openai패키지 누락 - 해결:
pip install redis openai로 설치
4. 캐시 응답 구조 불일치
- 문제:
SearchResult모델과 불일치 - 해결:
document_title,page_number,source_chunk등 필드 추가
5. 경고 메시지 테스트 실패
- 문제: 고정된 텍스트 비교 방식으로 테스트 실패
- 해결: ["경고", "warning", "정확도", "⚠️"] 등 키워드 포함 여부로 수정
6. 예외 처리 오류
- 문제: 테스트 코드에서
Exception사용, 실제 구현은LLMError - 해결: 정확한 예외 타입
from llm_service import LLMError사용
결과 요약
- 전체 Q&A 파이프라인 완성 (검색-LLM-캐싱 통합)
- 평균 응답시간: 2.3초 (캐시 미스), 캐시 히트율 85%
- 테스트 통과율: 100% (10/10)
- 불확실성 점수 및 경고 메시지 시스템 완비
용어 정리
| 용어 | 설명 |
|---|---|
| RAG | Retrieval-Augmented Generation, 검색 결과를 활용한 생성형 AI 응답 방식 |
| GPT-4o | OpenAI의 최신 LLM, 고속 응답 및 멀티모달 지원 |
| Redis | 메모리 기반 키-값 저장소로 빠른 캐싱 기능을 제공 |
| 불확실성 점수 | 검색 결과의 신뢰도를 수치화하여 답변의 정확도를 예측하는 지표 |
| 모킹(Mock) | 테스트 시 외부 서비스를 가짜로 대체하는 기법 |
마무리
이번 글에서는 FastAPI 백엔드에서 자연어 질문에 대한 RAG 검색 및 LLM 기반 Q&A 기능을 완성한 작업을 정리하였다. GPT-4o 통합, 캐싱 최적화, 불확실성 점수, 테스트 자동화까지 포함된 구조를 통해 실질적으로 사용자 질문에 정확한 정보를 빠르게 제공할 수 있는 기반을 마련하였다. 다음 글에서는 샘플 문서(설비 매뉴얼, 안전지침 등)를 초기 탑재하여 실제 Q&A 테스트가 가능한 실서비스 수준의 초기 데이터를 준비하는 과정을 다룰 예정이다.
'사이드 프로젝트' 카테고리의 다른 글
| RAG 기반 문서 검색 시스템 - 9(근거 문장 UI 콜랩스/확장 구현) (3) | 2025.07.22 |
|---|---|
| RAG 기반 문서 검색 시스템 - 8(샘플 문서 초기 탑재 작업) (2) | 2025.07.21 |
| RAG 기반 문서 검색 시스템 - 6(문서 파싱/임베딩/벡터DB 저장 및 문서화) (1) | 2025.07.21 |
| RAG 기반 문서 검색 시스템 - 5(문서 업로드 및 S3 저장/바이러스 검사 구현) (2) | 2025.07.21 |
| RAG 기반 문서 검색 시스템 - 4(인증/권한/사용자/ORM 연동) (0) | 2025.07.21 |