RAG (Retrieval Augmented Generation) 적용 설계 - 100-hours-a-week/6-nemo-wiki GitHub Wiki
단계 5: RAG (Retrieval Augmented Generation) 적용 설계
1. 적용 배경 및 필요성 분석
네모 서비스는 모임 추천, 일정 자동화, 커리큘럼 설계 등을 지원하는 커뮤니티 중심 웹앱입니다. 사용자의 입력에 맞춰 개인화된 모임이나 다음 일정을 추천할 때, 기존 모임 데이터를 참고하는 기능은 모델 단독으로는 한계가 있으며 외부 지식 연동이 필요합니다.
RAG 적용이 유의미한 기능:
- 관심 키워드 기반 모임 추천
- 과거 모임 기반 일정 추천
→ 문서 임베딩 기반 RAG 구조로 질의 의미에 맞는 정보 검색 → 모델 입력에 포함 → 응답 품질 향상
2. 전체 데이터 흐름도
graph TD
A[사용자 질의] --> B[질의 임베딩 생성]
B --> C[Chroma DB에서 유사 모임 검색]
C --> D[검색된 모임 정보 수집]
D --> E[FastAPI를 통한 모델 호출]
E --> F[LLM 응답 생성]
3. 외부 지식 소스 구성
소스 | 설명 | 활용 이유 |
---|---|---|
Chroma DB | 모임명, 태그, 목적, 소개글 등을 임베딩하여 저장 | 빠른 의미 기반 검색 가능 |
4. 검색 및 통합 방식
임베딩 모델: kanana-nano-2.1b
, Qwen2.5-3B
저장 필드: 모임명, 태그, 목적, 소개글
검색 쿼리 예시 (Python)
query = "초보자를 위한 생성형 AI 모임"
query_vec = embedding_model.encode(query)
results = chroma_db.similarity_search(query_vec, k=5)
프롬프트 예시
[콘텍스트]
사용자 요청: 초보자를 위한 생성형 AI 모임 추천
아래는 관련 모임 정보입니다:
- 생성형AI 입문반: 1개월 온라인 스터디, 매주 화요일
- LangChain: 실습 중심, 3회차 운영 중
5. FastAPI 연동 예시
from fastapi import FastAPI, Request
from model_module import generate_response_with_rag
app = FastAPI()
@app.post("/rag/search-generate")
async def rag_generate(request: Request):
data = await request.json()
user_query = data["query"]
response = generate_response_with_rag(user_query)
return {"response": response}
6. 기대 효과 및 검증 전략
항목 | 적용 전 | 적용 후 |
---|---|---|
추천 정확도 | 카테고리 기반 단순 필터링 | 의미 기반 유사도 비교 |
다양성 | 한정적 | 관련도 높은 다양한 모임 추천 가능 |
사용자 반응 | 미흡 | 높은 만족도 및 접속률 예상 |
정량 검증: 접속률, 추천된 모임 참여율
7. 적용 제외 영역 및 대안
다음 기능들은 RAG 없이도 충분히 처리 가능하므로 LLM 단독으로 구현 예정입니다:
기능 | 처리 방식 |
---|---|
한줄 소개 생성 | 모델 단독 처리 |
상세 소개 생성 | 모델 단독 처리 |
목표 기반 단계별 계획 생성 | 모델 단독 처리 |
관심사 질문 및 선택지 생성 | 모델 단독 처리 |
관심사 질문/답변 기반 일회성 추천 | 모델 단독 처리 |
→ 해당 기능들은 프롬프트 튜닝, 사용자 입력 기반 조건 설정, 또는 간단한 임베딩 검색으로 대응 가능하며, RAG 구조를 필요로 하진 않음.
→ 최신성 유지를 위해 정기적인 데이터 갱신 또는 프롬프트 개선 전략을 병행할 수 있음.
8. 결론 및 정합성 요약
- 정확도 향상: 의미 기반 검색으로 높은 관련도 결과 제공
- 정보 확장성: Chroma DB 활용으로 최신 모임 정보 반영
- 확장성: FastAPI 기반 구조로 백엔드 연동 가능성 확보