SK네트웍스 Family AI캠프 16기

[플레이데이터 SK네트웍스 Family AI캠프 16기] 14주차 회고

minorii 2025. 9. 22. 12:51

✅ 일주일 동안 한 일과 느낀 점

3번째 미니프로젝트 기간(15~17일) 동안 LLM 강의 자료를 대상으로 한 RAG 시스템을 설계·구현하고, 엔드투엔드 품질 평가와 웹 UI까지 한 번에 묶어 운영 관점 점검까지 이어갔다. 검색 레이어(BM25+벡터)와 리랭킹, 회고록/요약 같은 과제 특화 기능을 실제 데이터 흐름으로 엮으면서, “질의 타입 분기 → 앙상블 검색 → 리랭킹 → 컨텍스트 구성 → 생성”의 표준 플로우를 체득한 점이 유의미했다. 주 후반에는 ‘인터넷의 이해’ 이론 수업과 프레임워크·Wireshark 실습을 통해 네트워크 스택 관점에서 서비스 품질 메트릭과 장애 대응 포인트를 재정비했다.


[9월 15일 ~ 9월 17일 미니프로젝트 3]

🎓 LLM 강의 검색 & Help RAG Agent

LLM 관련 강의 자료(Jupyter 노트북, PDF)를 기반으로 한 고도화된 RAG(Retrieval-Augmented Generation) 시템입니다.


📋 프로젝트 개요

🎯 시스템 목적

  • 지능형 교육 자료 검색: LLM 강의 자료를 임베딩하여 사용자 질의에 대한 정확한 답변 제공
  • 다양한 질의 타입 지원: 일반 QA, 코드 검색, 강의 요약, 회고록 생성
  • 평가 기반 품질 관리: 4가지 RAG 전용 평가 지표로 시스템 성능 모니터링

🚀 핵심 기능

  • 🆕 주차 요약: 강의 요약: 6월 3주차 같은 자연어 주차 입력 지원
  • 🆕 회고록 생성: 회고록: 7월 3주차, 회고록: 2025-07-21  블로그 스타일 회고
  • 🆕 의도 인식 코드 검색: CNN, RAG, LangChain, Retriever 같은 키워드만으로도 관련 코드/설명 우선 검색
  • 🆕 앙상블 검색: BM25+벡터 결합(가능 시) → 버전 호환 안 되면 벡터 검색만 자동 사용
  • 🆕 리랭킹 지원: dragonkue/bge-reranker-v2-m3-ko 모델로 검색 품질 향상

🏗️ 시스템 아키텍처

📊 RAG 시스템 플로우

graph TD

🔧 기술 아키텍처

graph LR

🛠 기술 스택

🧠 AI/ML 모델

 

구성 요소모델/기술버전용도

임베딩 google/embeddinggemma-300m latest 텍스트 벡터화
LLM gpt-4o-mini latest 답변 생성
리랭커 dragonkue/bge-reranker-v2-m3-ko latest 검색 결과 재순위
검색 BM25 + Vector Search - 하이브리드 검색

🔧 핵심 프레임워크

  • Python 3.10+: 메인 언어
  • LangChain: RAG 파이프라인 구축
  • Chroma DB: 벡터 데이터베이스
  • Gradio: 웹 인터페이스
  • PyMuPDF: PDF 문서 처리
  • Plotly: 인터랙티브 시각화
  • dateparser: 한국어 자연어 날짜/주차 파싱

📁 프로젝트 구조

SKN16-3st-1Team/
├── 📂 data/
│   └── educational_materials/        # 강의 자료 디렉토리
│       ├── notebooks/               # Jupyter 노트북 파일들
│       └── pdfs/                   # PDF 강의 자료들
├── 📂 src/                          # 핵심 소스 코드
│   ├── __init__.py
│   ├── vector_db_builder.py        # 벡터 DB 구축 모듈
│   ├── rag_system.py               # RAG 시스템 메인 클래스
│   ├── gradio_app.py              # Gradio 웹 인터페이스
│   ├── evaluator.py               # RAG 평가 시스템
│   ├── rag_evaluation.py          # 종합 평가 파이프라인
│   └── rag_visualizer.py          # 평가 결과 시각화
├── 📂 chroma_db/                   # Chroma 벡터 데이터베이스
├── 📂 visualizations/              # 생성된 시각화 파일들
├── 📄 main.py                      # 메인 실행 스크립트
├── 📄 run_evaluation.py           # 평가 시스템 실행
├── 📄 requirements.txt            # Python 의존성
├── 📄 .env.example               # 환경 변수 템플릿
├── 📄 CLAUDE.md                  # Claude Code 가이드
└── 📄 README.md                  # 이 파일
 

🚀 설치 및 실행

1. 환경 설정

 
# 레포지토리 클론
git clone https://github.com/your-repo/SKN16-3st-1Team.git
cd SKN16-3st-1Team

# 가상 환경 생성 (권장)
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 의존성 설치
pip install -r requirements.txt
 

 

2. API 키 설정

# 환경 변수 파일 생성
cp .env.example .env

# .env 파일에서 OpenAI API 키 설정
echo "OPENAI_API_KEY=your_actual_api_key_here" > .env

 

 

 

3. 강의 자료 준비

data/educational_materials/
├── notebooks/
│   ├── 2025-08-25_langchain_2.ipynb
│   ├── 2025-08-11_BPE_Unigram.ipynb
│   ├── 2025-09-12_멀티모달_GAN_ex1.ipynb
│   └── ...
└── pdfs/
    ├── 2025-07-01_API.pdf
    ├── 2025-08-25_Accuracy-BLEU-ROUGE.pdf
    └── ...
 

 

4. 시스템 실행

# 기본 실행 (벡터 검색만)
python main.py

# 리랭킹 포함 실행 (권장)
python main.py --rerank

# 커스텀 포트로 실행
python main.py --port 8080
 

브라우저에서 http://localhost:7860 접속


💬 사용법

🔍 질의 타입별 사용법

 

1. 기본 질의응답

"RNN과 CNN의 차이점은?"
"딥러닝 모델 학습 방법"
"오버피팅 방지 기법"
"BPE와 Unigram 토큰화 차이점"
 

 

2. 코드 검색

"코드 검색: CNN 모델"
"코드 검색: 데이터 전처리"
# 또는 키워드만 입력:
"CNN", "RAG", "LangChain", "Retriever"
 

 

 

3. 강의 요약

"강의 요약: 2025-08-25"
"강의 요약: 20250825"
"강의 요약: 8월 4주차"  # 자연어 주차 입력
 

 

 

4. 회고록 생성 (블로그 스타일)

"회고록: 8월 4주차"
"회고록: 2025-08-25"
 

 

 

5. 코드 설명

1. 코드 검색으로 원하는 코드 찾기
2. "코드 설명: [선택한 코드]"
 

🔧 핵심 기능 상세

1. 🗄️ 벡터 DB 구축 (vector_db_builder.py)

  • 문서 처리: Jupyter 노트북의 코드/마크다운 셀 분리 처리
  • PDF 추출: PyMuPDF를 이용한 고품질 텍스트 추출
  • 메타데이터 관리: 파일명에서 강의 날짜 자동 추출, 라이브러리/모델 타입 인식
  • 임베딩 생성: Google EmbeddingGemma-300m 모델로 벡터화

2. 🧠 RAG 시스템 (rag_system.py)

  • 앙상블 검색: 벡터 검색(70%) + BM25(30%) 가중치 결합
  • 리랭킹: 한국어 최적화 CrossEncoder로 검색 품질 향상
  • 컨텍스트 기반 생성: 검색된 문서 기반 정확한 답변 생성
  • 특화 기능: 코드 스니펫 전용 검색, 날짜/주차별 요약, 회고록 생성

3. 🎨 Gradio 인터페이스 (gradio_app.py)

  • 실시간 채팅: 대화형 인터페이스
  • 코드 하이라이팅: 구문 강조 표시
  • 소스 표시: 답변 출처 문서 정보 제공
  • DB 관리: 벡터 DB 구축/재구축 버튼

4. 📊 평가 시스템 (evaluator.py, rag_evaluation.py)

  • 4가지 RAG 지표: Answer Similarity, Relevancy, Context Precision, Faithfulness
  • 종합 평가 파이프라인: 자동화된 성능 측정
  • 시각화 대시보드: 인터랙티브 성능 분석 대시보드

📊 RAG 평가 지표

시스템 성능을 측정하기 위한 4가지 핵심 평가 지표:

1. Answer Similarity (답변 유사도)

  • 목적: 생성된 답변이 정답과 얼마나 유사한지 측정
  • 측정 방법: 임베딩 벡터 간 코사인 유사도 계산
  • 범위: 0~1 (1에 가까울수록 유사)
  • 의미: 답변의 의미적 정확성 평가

2. Answer Relevancy (답변 관련성)

  • 목적: 생성된 답변이 질문과 얼마나 관련있는지 측정
  • 측정 방법: 질문과 답변 간 의미적 연관성 분석
  • 범위: 0~1 (1에 가까울수록 관련성 높음)
  • 의미: 질문에 대한 답변의 적절성 평가

3. Context Precision (맥락 정밀도)

  • 목적: 검색된 문서들이 얼마나 정확하고 관련성이 높은지 측정
  • 측정 방법: 검색된 상위 문서들의 관련성 비율
  • 범위: 0~1 (1에 가까울수록 정밀)
  • 의미: 검색(Retrieval) 단계의 품질 평가

4. Faithfulness (신뢰성)

  • 목적: 생성된 답변이 검색된 문서 내용에 얼마나 충실한지 측정
  • 측정 방법: 답변의 각 문장이 제공된 맥락에서 지지되는지 확인
  • 범위: 0~1 (1에 가까울수록 신뢰성 높음)
  • 의미: 답변의 사실적 정확성과 환각(hallucination) 방지

📈 평가 실행 방법

# RAG 시스템 종합 평가 실행
python run_evaluation.py

# 옵션 선택:
# 1. 간단한 단일 쿼리 테스트
# 2. 종합 평가 (권장)
# 3. 설정 비교 (기본 vs 리랭킹)
# 4. 모든 평가

# 시각화 결과 확인
# 생성된 HTML 대시보드에서 지표별 성능 분석 가능
 

⚙️ 설정 및 커스터마이징

🔧 모델 설정

임베딩 모델 변경

# src/vector_db_builder.py
self.embeddings = HuggingFaceEmbeddings(
    model_name="your-embedding-model",
    model_kwargs={'device': 'cpu'},
    encode_kwargs={'normalize_embeddings': True}
)

 

 

LLM 모델 변경

# src/rag_system.py
self.llm = ChatOpenAI(
    model="gpt-4o-mini",  # 또는 다른 모델
    temperature=0.1
)
 

 

 

리랭킹 모델 변경

# src/rag_system.py
self.rerank_model = "dragonkue/bge-reranker-v2-m3-ko"

 

 

🎛️ 검색 파라미터 조정

# 앙상블 가중치 조정
ensemble_weights = [0.7, 0.3]  # [벡터, BM25]

# 검색 문서 수 조정
k = 5  # 상위 5개 문서 검색

# 리랭킹 후보 수 조정
rerank_top_k = 50  # 50개 후보 중 재순위

🐛 문제 해결

Chroma DB 관련 오류

# DB 디렉토리 삭제 후 재구축
rm -rf chroma_db/
python src/vector_db_builder.py
 

 

OpenAI API 관련 오류

# API 키 확인
echo $OPENAI_API_KEY

# .env 파일 확인
cat .env

# API 키 테스트
python -c "import openai; print('API 키 유효')"

 

 

의존성 오류

# 특정 패키지 재설치
pip install --upgrade langchain langchain-openai

# 전체 의존성 재설치
pip install -r requirements.txt --force-reinstall

 

 

성능 최적화

# GPU 사용 (CUDA 설치 필요)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

# 리랭킹 비활성화로 속도 향상
python main.py  # --rerank 플래그 제거
 

📈 성능 및 벤치마크

🎯 평가 결과 예시

 

지표기본 모드리랭킹 모드개선율

Answer Similarity 0.756 0.834 +10.3%
Answer Relevancy 0.712 0.789 +10.8%
Context Precision 0.689 0.756 +9.7%
Faithfulness 0.823 0.867 +5.3%

🚧 향후 개선사항

단기 계획

  •  ✅ 한국어 리랭킹 모델 통합 완료
  •  🔄 멀티모달 검색 (이미지 + 텍스트)
  •  📱 모바일 반응형 UI 개선
  •  🔍 고급 검색 필터링 (날짜, 난이도, 주제별)
  •  🤖 코드 실행 및 결과 표시 기능
  •  📊 실시간 대시보드 및 분석
  •  🌐 다국어 지원 (영어, 중국어)
  •  🔗 외부 API 연동 (GitHub, Stack Overflow)
  •  🧠 개인화된 학습 경로 추천
  •  🎯 적응형 난이도 조절
  •  📈 학습 진도 추적 및 분석
  •  🤝 협업 학습 플랫폼 기능
  •  
 

이 프로젝트는 다음 오픈소스 프로젝트들을 기반으로 합니다:

  • LangChain - RAG 파이프라인 구축
  • Chroma - 벡터 데이터베이스
  • Gradio - 웹 인터페이스
  • Plotly - 인터랙티브 시각화

📌 9월 18일 - 인터넷의 이해 (이론)

  • 계층형 네트워킹 모델과 전송/라우팅 핵심 개념을 복습하며, 서비스 지연/장애가 응답 대기/타임아웃/리트라이 로직에 주는 영향 정리
  • 과제 적용 : RAG의 일부 API 호출 (임베딩 / LLM / 리랭커) 지연과 포트 / 방화벽 / DNS 오류 등 네트워크 이슈를 가정한 타임아웃 / 로깅 / 리트라이 정책 강화 포인트 도출

📌 9월 19일 - 프레임워크 / Wireshark

  • 프레임워크 : LangChain 구성 요소 (리트리버 / 체인 / 프롬포트 / 콜백) 간 경계와 설정 주입 방식을 점검해, 버전 업 시 호환 분기, 안전 기본 값으로 프로파일링
  • Wireshark 실습 : 포트 / 프로토콜 별 패킷 캡처를 통해 외부 LLM / 임베딩 API 왕복 지연과 재전송 패턴을 가시화, 병목구간의 관측/알림 지표 구성 검토

✅성과 및 지표

  • 리랭크 모드 전환 시 유사도 / 관련성 / 맥락 정밀도 / 신뢰성 지표가 전반적으로 개선되는 벤치마크 경향 확인, 설정 비교 자동화로 재현 가능한 평가 루틴 확보
  • 질의 타입별 라우팅과 앙상블 + 리랭킹 파이프라인이 코드 검색 / 강의 요약 / 회고록 생성 등 과제 특화 태스크에서 안정적인 결과 보이고, UI에서 출처 노출과 DB 재구축 동작 통합

✅ 아쉬웠던 점 & 개선 포인트

  • 도메인 문서의 포맷 다양성 (PDF 구조/노트북 셀 분류)으로 인해 일부 문맥 손실 발생하며, 청크 전략 / 중복 슬라이딩 / 메타 강화가 더 필요함
  • 앙상블 가중 / k / 리랭크 후보 수가 데이터 분포에 민감해, 설정 탐색 자동화와 쿼리 타입별 프로파일 세분화 요구
  • 외부 API 지연 / 오류에 대한 회복력 (캐시 / 서킷 브레이커 / 백오프 리트라이)과 네트워크 관측(지연 / 에러율 / 타임아웃 로그)의 표준화 필요

✅ 마무리

  • 이번 주는 “질의 타입 인식 → 앙상블 검색 → 리랭킹 → 컨텍스트 구성 → 생성 → 품질 평가 → UI 노출”을 하나의 프레임으로 고도화했고, 네트워크·프레임워크 관점의 운영 내구성을 점검하며 실서비스 준비도를 높였다. 다음 주에는 아래를 실행할 예정
  • 데이터: 노트북·PDF 파서 보강, 날짜·주차 메타 신뢰도 제고, 청크 길이/중복 최적화.
  • 검색/랭킹: 쿼리 타입별 가중치·k·rerank 후보 자동 탐색, 설정 프로파일 저장·재현.
  • 생성: 회고·요약 전용 프롬프트 스키마 정교화, 길이·형식 검증 및 재생성 루프 도입.
  • 운영: API 캐시·백오프·서킷 브레이커, 요청·지연·에러율 모니터링, 타임아웃·로깅 표준화.
  • UI/평가: 출처 하이라이트, 질의 세션 통계 보강, 설정 비교 리포트 자동 생성