Skip to content

aremany/AutonomousDriving_RAG_Chatbot

Repository files navigation

🚗 AutonomousDriving_RAG_Chatbot — 자율주행법령 도메인 모델 비교 실험 플랫폼

"경량 파인튜닝 모델이 순정 대형 모델보다 법령 QA에서 우수한가?"
이 저장소는 그 가설을 검증하고 기각한 실험의 전 과정과 인프라를 공개합니다.

벡터 DB(Qdrant)가 사전 구축된 상태로 포함되어 있습니다.
git clone 후 임베딩 없이 start_rag_no_rebuild.bat 하나로 즉시 실행 가능합니다.


📌 실험 배경 및 연구 질문

RAG(Retrieval-Augmented Generation) 기반 법률 QA 시스템에서
도메인 특화 QLoRA 파인튜닝이 순정 모델의 성능을 능가할 수 있는가?

  • 가설: 자율주행 법령으로 파인튜닝된 8B 모델 ≥ 순정 14B 모델
  • 실험 환경: 동일 RAG 파이프라인, 15개 오답 유도형 함정 질문
  • 독립 평가자: Claude Opus 4.6 (Thinking 모드), GPT-5.2-High
  • 결과: 가설 기각

📊 6개 모델 종합 벤치마크 결과 (최종 정정판)

⚠️ 초기 README(2026-02-21)에는 LLM 채점 스크립트의 레이블 역전 오류로 인해
FT 모델 86.7%, 순정 모델 40%라는 완전히 뒤바뀐 수치가 기재되어 있었습니다.
아래는 교차 검증 후 2026-02-24 수정된 최종 수치입니다.

순위 모델 정답률 설명
1 Non-FT Qwen3-14B + RAG 90% 순정, 답변 가장 상세
1 Non-FT Qwen3-8B + RAG 90% 순정, 비용 대비 최고 효율
3 Gemma3n E4B + RAG 87% ~4B 파라미터로 14B 대비 3%p 차이
4 DTRO 8B (전력설비 도메인 FT) + RAG 80% 타 도메인 FT, RAG 부분 활용
5 FT-8B Q8/CoT (자율주행 v5) + RAG 60% CoT 파인튜닝, +17%p 개선
6 FT-8B Q4 (자율주행 v3) + RAG 43% 단순 QnA 파인튜닝
정답률 시각화:

Non-FT 14B    ████████████████████████████████████████████████  90%
Non-FT 8B     ████████████████████████████████████████████████  90%
Gemma3n E4B   ██████████████████████████████████████████████░░  87%  ← 4B급
DTRO 8B       ████████████████████████████████████████████░░░░  80%
FT-8B Q8/CoT  ██████████████████████████████████░░░░░░░░░░░░░  60%
FT-8B Q4      █████████████████████████░░░░░░░░░░░░░░░░░░░░░░  43%

🔍 핵심 발견 3가지

① RAG 환경에서 파인튜닝은 "지식 주입"이 아닌 "편향 주입"

자율주행 법령 파인튜닝 모델들은 RAG가 제공한 정확한 컨텍스트를 무시하고
학습된 내부 패턴을 우선하는 Context Bypass 현상을 일으켰습니다.

[동일 RAG 컨텍스트 제공]

Non-FT 8B  → RAG 충실 참조 → ✅ 정답
FT-8B Q4   → 내부 패턴 우선 → ❌ 오답

② 모델 크기보다 RAG 품질이 핵심

4B급 Gemma3n E4B가 14B 대비 3%p 차이(87% vs 90%)에 불과했습니다.
파라미터 대비 효율: Gemma3n 21.7%/B > Qwen3-8B 11.3%/B > Qwen3-14B 6.4%/B

"모델을 키우는 것"보다 "RAG 품질을 높이는 것"이 비용 대비 효율적

③ 파인튜닝이 유일하게 우위인 영역: RAG 불가 법적 해석 패턴

Q8 (자동차손해배상보장법 운행자 책임 원칙) — 순정 모델 3개 전부 오답,
FT 모델(CoT v5, DTRO)만 정답. RAG 텍스트만으로는 도출 불가한 법리의 명시적 주입 효과.


🏗️ RAG 파이프라인 아키텍처

입력 질문
   │
   ▼
BGE-M3 임베딩 (multilingual, 다국어 고품질)
   │
   ▼
Qdrant 벡터 DB 검색 (MMR + ColBERT 재순위화)
   │
   ┌──────────────────────────────────────┐
   │  벡터 DB 구성 내용                    │
   │  ① 법령 원문 TXT  (청크 임베딩)        │
   │  ② QnA 데이터셋 JSON (쌍 임베딩)      │ ← 핵심 설계 선택
   └──────────────────────────────────────┘
   │
   ▼
상위 컨텍스트 추출
   │
   ▼
[Ollama 로컬 LLM] → 응답 생성

QnA 데이터셋을 벡터 DB에 함께 임베딩하면 RAG 검색 정확도가 향상됩니다.
이는 비용 대비 효과로 파인튜닝을 능가하는 "Data-Centric RAG"의 핵심 설계입니다.


🛠️ 기술 스택

구성 요소 사용 기술
LLM 서빙 Ollama (로컬, 모델 교체 가능)
임베딩 BGE-M3 (FlagEmbedding)
리랭킹 ColBERT (FlagEmbedding)
벡터 DB Qdrant (로컬 스토리지)
웹 서버 Flask
UI HTML/JS (Ollama 모델 드롭다운 자동 감지)

⚡ 실행 방법

✅ 즉시 실행 (사전 구축된 DB 사용 — 권장)

벡터 DB(qdrant_storage/)가 이미 구축된 상태로 포함되어 있습니다.
별도 임베딩 작업 없이 클론 후 바로 실행 가능합니다.

git clone https://github.com/aremany/Legal_RAG_Chatbot_Qdrant_BGE
cd Legal_RAG_Chatbot_Qdrant_BGE
pip install -r requirements.txt
start_rag_no_rebuild.bat

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

🔄 DB 재구축이 필요한 경우 (데이터 변경 시)

데이터(data/ 폴더)를 수정했거나 처음부터 새로 임베딩하고 싶을 때만 실행:

start_rag.bat

모델 변경

UI 드롭다운에서 Ollama에 등록된 모델을 즉시 교체 가능합니다.
선택한 모델은 app_settings.json에 영속화되어 재시작 후에도 유지됩니다.


📂 주요 파일 설명

파일 설명
app_rag.py Flask 메인 서버, RAG 쿼리 처리
db_builder.py Qdrant 벡터 DB 구축 스크립트
add_adversarial_to_qdrant.py 오답 유도형 QnA를 DB에 추가
data/dataset_dtro_style.json 법령 QnA 750건
data/txt/ 법령 원문 TXT 파일들
opus 4.6 채점.md Claude Opus 4.6 독립 채점 결과 원문
gpt52high 채점.md GPT-5.2-High 독립 채점 결과 원문
챗봇MANUAL.md 운영 상세 매뉴얼

🔗 관련 리소스

리소스 링크
파인튜닝 모델 (v3, 자율주행 법령) HuggingFace
파인튜닝 모델 (DTRO, 전력설비 도메인) HuggingFace
학습 데이터셋 v3 HuggingFace 데이터셋 (DTRO)
학습 데이터셋 v5 HuggingFace 데이터셋 (CoT)

📋 재현 시 주의사항

  • qdrant_storage/, .venv/, __pycache__/.gitignore로 제외
  • 채점 결과 파일의 개인 식별 정보 제거 후 활용 권장
  • 모든 성능 수치는 해당 15개 테스트 질문셋 기준이며 통계적 일반화에 한계가 있음

⚠️ 면책 고지

본 프로젝트는 연구·학습 목적의 탐색적 실험입니다.
자율주행 시스템의 실제 판단 로직, 법률 자문, 또는 안전 크리티컬 용도로 사용하는 것을 권고하지 않습니다.


실험 결과 전체 분석은 모델 리포지토리 README를 참조하십시오.