5. RAG (Retrieval Augmented Generation) 적용 설계 - 100-hours-a-week/20-real-wiki GitHub Wiki
📕 1. 전체 데이터 흐름도
📌 Rag 를 사용한 전체 데이터 흐름도
파란색은 사전 준비 (preparation) 과정입니다.
검은색은 사용자 질문 → 응답 생성 과정입니다.
📌 Rag 의 각 단계와 작동 방식
단계
작동 방식
1. 질문 입력
사용자의 자연어 질문
2. 질문 벡터화
임베딩 모델이 질문을 벡터로 변환
3. 문서 검색
Retriever (검색엔진) 가 VDB에서 유사 문서 검색
4. 프롬프트 구성
LLM 입력용 템플릿 생성
5. LLM 응답
프롬프트와 검색된 유사 문서를 참고하여 질문에 대해 자연어로 응답
6. 응답 반환
답변을 반환
📘 2. 외부 지식 소스에 대한 설명
본 서비스 기능 중에서 챗봇은 단순한 모델 응답이 아닌, 외부 문서 기반의 정보 검색과 결합된 RAG 구조를 필요로 합니다. 모델이 사전 학습해야 하는 범위는 아래와 같습니다.
📄 문서 데이터베이스: markdown
사용 이유
비정형 정보 구조에 최적
공지사항, 위키 문서, Q&A와 같은 실무 문서는 표, 목록, 제목 등 다양한 텍스트 구조로 구성
markdown은 이러한 문서 구조를 간결하고 계층적으로 표현할 수 있는 형식
LLM이 이해하기 좋은 포맷
markdown은 문서의 제목, 섹션, 강조 등을 구조화하여,
LLM이 문맥을 더 정확하게 이해할 수 있도록 돕습니다
파일 단위 저장 및 관리가 용이
Git, Notion, Dropbox 등 다양한 플랫폼에서 바로 export 가능
향후 문서 추가/수정이 쉽고, 버전 관리에도 유리
📦 벡터 데이터베이스: FAISS
사용 이유
임베딩 기반 검색 최적화
LLM은 단순 키워드 검색보다 **의미 기반 검색(semantic search)**에 더 강함
FAISS는 문서/질문을 임베딩한 뒤, 벡터 간 거리 계산을 통해 가장 의미적으로 유사한 문서를 빠르게 검색함
빠르고 가벼운 오픈소스
FAISS는 Facebook AI에서 개발한 벡터 검색 라이브러리로,
로컬에서도 실행 가능하고 속도가 빠름
초기 테스트, 실험, MVP 단계에서 가장 널리 사용됨
확장성과 통합성
LangChain, LlamaIndex 등 주요 RAG 프레임워크와 자연스럽게 통합됨
나중에 필요시 Pinecone, Weaviate, Qdrant 등 클라우드 기반 DB로 확장도 용이
📗 3. 검색 구현 및 모델 통합 방법
📌 검색 쿼리 및 프롬프트 통합 예시
question="카카오테크 과정의 오리엔테이션은 언제인가요?"prompt_template=PromptTemplate.from_template("""You are an assistant for question-answering tasks.Use the context below to answer the question.Answer in Korean.[질문]{question}[문서 내용]{context}[답변]""")