RAG 프로젝트 진행 개요
1. 프로젝트 환경 설정
프레임워크 선택: LangChain, LlamaIndex
백엔드: Python (FastAPI 등), JupyterLab for 실험
벡터 DB: FAISS, Weaviate, Pinecone, ChromaDB 중 택 1
임베딩 모델: OpenAI API, HuggingFace Transformers, Korean-specific models (KoBERT 등)
2. 데이터 수집 및 전처리
데이터 수집: 웹 크롤링, PDF, 한글 문서(hwp → txt 변환), 내부 데이터 등
텍스트 정제: 특수문자 제거, 줄바꿈 정리, 불용어 제거 등
문서 분할: 너무 긴 문서는 chunking (LangChain TextSplitter, LlamaIndex DocumentSplitter)
토큰화/문장화: 문맥 보존이 가능한 형태로 자르기 (문단 단위 or 문장 단위)
3. 벡터화 및 인덱싱
- 임베딩 모델 선택
공개 모델: sentence-transformers, KoBERT, KoSimCSE, or OpenAI Embedding API
한국어면 HuggingFace에서 jhgan/ko-sbert-sts 같은 모델 추천
- 벡터 인덱스 구축
FAISS, Weaviate, Chroma, Pinecone 중 선택해 임베딩 저장
문서의 메타데이터 (문서 ID, 제목, 출처 등) 함께 저장
4. 질의 처리 및 검색
- 사용자 질의 전처리 및 임베딩
- Top-K 유사도 검색: 벡터 DB에서 질의 임베딩과 가장 가까운 문서 chunk 검색
- 결과 리턴 및 재구성: LangChain의 retriever → reranker → prompt 구성으로 연결
5. 응답 생성 (Generation)
- 프롬프트 설계:
1) You are a helpful assistant. Use the following context to answer:
2) Retrieved 문서 chunk를 넣고 질의 + 맥락 기반 생성
- LLM 호출: OpenAI GPT, LLaMA, Mistral, Claude 등 선택
- 응답 출력 및 후처리
6. 모델 평가 및 테스트
- 정확도 평가: Human Evaluation, BLEU, ROUGE 등
- Retrieval 평가: Top-k Recall, MRR
- LLM 응답 품질 평가: 수작업으로 비교하거나 GPT4로 평가지 사용
7. (선택) 고도화
- Reranker 적용: Cross-encoder로 검색 결과 정렬 성능 향상 (ex. Cohere, SBERT Cross-Encoder)
- Feedback loop: 사용자 평가 반영하여 retriever or reranker 개선
- 질문 의도 분류 / QA fallback 전략 도입 (질문이 이상할 때 에러 방지)
예시 구성 흐름 (RAG 파이프라인)
- 사용자 질문 입력
- 질문 → 임베딩 벡터화
- 벡터 DB에서 유사 문서 top-k 검색
- 검색된 문서 chunk를 prompt로 구성
- LLM (GPT 등) 호출 → 문서 기반 응답 생성
- 사용자에게 응답 출력
임베딩과 벡터 DB 개념
1. 임베딩 (Embeddings): 텍스트를 AI가 이해할 수 있는 숫자 벡터로 변환하는 기술. (RAG의 검색 핵심)
임베딩은 텍스트, 이미지, 오디오 등 다양한 형태의 데이터를 컴퓨터가 이해할 수 있는 수치형 벡터(numerical vector)로 변환하는 과정입니다. 이때 생성되는 벡터는 원본 데이터의 의미론적, 문맥적 특성을 반영하도록 학습됩니다. 예를 들어, "사과"와 "배"라는 단어의 임베딩 벡터는 서로 가깝게 위치하고, "자동차"의 임베딩 벡터와는 멀리 떨어져 있게 됩니다.
2. 벡터 DB (Vector Database):
벡터 DB는 이러한 임베딩 벡터들을 효율적으로 저장하고 검색하기 위해 특화된 데이터베이스입니다. 일반적인 관계형 DB나 NoSQL DB는 키-값 또는 테이블 형태로 데이터를 저장하지만, 벡터 DB는 다차원 벡터 공간에서 유사한 벡터를 빠르게 찾아내는 데 최적화되어 있습니다. 이를 위해 ANN (Approximate Nearest Neighbor) 알고리즘과 같은 기술을 활용합니다.
임베딩은 데이터를 벡터화하는 "변환 기술"이고, 벡터 DB는 이 벡터화된 데이터를 "저장하고 효율적으로 검색하는 인프라"입니다. 임베딩이 없으면 벡터 DB는 무의미하고, 벡터 DB가 없으면 수많은 임베딩 벡터를 효율적으로 활용하기 어렵기 때문에, 대부분의 실용적인 AI 애플리케이션에서는 이 둘이 필수적으로 함께 사용되어 시너지를 창출합니다.
'HANCOM AI ACAMEMY > 수업 및 플젝' 카테고리의 다른 글
| debounce 문제해결 (0) | 2025.06.25 |
|---|---|
| 플젝 2주차 : 6월 17일 (0) | 2025.06.17 |
| FastAPI : 5월 7일 (0) | 2025.05.07 |
| 파이썬(FastAPI) : 5월 2일 (0) | 2025.05.02 |
| 파이썬(FastAPI) : 4월 30일 (0) | 2025.04.30 |
댓글