palisade / README.md
camelfilm's picture
Update README.md
b6140da verified

A newer version of the Gradio SDK is available: 5.44.1

Upgrade
metadata
title: Vehicle Manual RAG πŸš—
emoji: πŸš™
colorFrom: indigo
colorTo: blue
sdk: gradio
sdk_version: 5.42.0
app_file: app.py
pinned: false

πŸš— Vehicle Manual RAG Q&A System

κ²½λŸ‰ RAG 기반 μ°¨λŸ‰ 맀뉴얼 μ§€λŠ₯ν˜• Q&A μ‹œμŠ€ν…œ

Python LangChain License Status

개발 κΈ°κ°„: 2025λ…„ 8μ›” 10일 ~ 2025λ…„ 8μ›” 20일

πŸ“‹ λͺ©μ°¨

🎯 ν”„λ‘œμ νŠΈ μ†Œκ°œ

ν˜„λŒ€ νŒ°λ¦¬μ„Έμ΄λ“œ 2026 μ°¨λŸ‰ 맀뉴얼(590νŽ˜μ΄μ§€)을 기반으둜 ν•œ μ§€λŠ₯ν˜• Q&A μ‹œμŠ€ν…œμž…λ‹ˆλ‹€.
μš΄μ „μžκ°€ μ°¨λŸ‰ κ΄€λ ¨ μ§ˆλ¬Έμ„ μžμ—°μ–΄λ‘œ μž…λ ₯ν•˜λ©΄, AIκ°€ λ§€λ‰΄μ–Όμ—μ„œ μ •ν™•ν•œ 정보λ₯Ό μ°Ύμ•„ μ‹€μ‹œκ°„μœΌλ‘œ λ‹΅λ³€ν•©λ‹ˆλ‹€.

DEMO Ver.

Image

μ™œ RAG인가?

ꡬ뢄 일반 ChatGPT RAG μ‹œμŠ€ν…œ
μ •ν™•μ„± 일반적인 μ°¨λŸ‰ 정보 βœ… νŒ°λ¦¬μ„Έμ΄λ“œ 2026 νŠΉν™” 정보
λΉ„μš© 맀번 590νŽ˜μ΄μ§€ 전솑 μ‹œ $5+ βœ… κ΄€λ ¨ 청크만 전솑 $0.01
속도 10초+ (λŒ€μš©λŸ‰ 처리) βœ… 평균 1.5초
μ˜€ν”„λΌμΈ ❌ λΆˆκ°€λŠ₯ βœ… Ollama둜 μ™„μ „ μ˜€ν”„λΌμΈ κ°€λŠ₯
μ‹ λ’°μ„± 좜처 뢈λͺ…ν™• βœ… μ •ν™•ν•œ νŽ˜μ΄μ§€ 번호 제곡

✨ 핡심 κΈ°λŠ₯

1. πŸ” μ§€λŠ₯ν˜• 벑터 검색

  • 590νŽ˜μ΄μ§€ β†’ 6,354개 의미 λ‹¨μœ„λ‘œ λΆ„ν• 
  • 384차원 λ‹€κ΅­μ–΄ μž„λ² λ”© (ν•œ/영/쀑 지원)
  • FAISS 인덱슀둜 λ°€λ¦¬μ΄ˆ λ‹¨μœ„ 검색

2. πŸ€– κ³ ν’ˆμ§ˆ λ‹΅λ³€ 생성

  • GPT-3.5-turbo / Ollama ν•˜μ΄λΈŒλ¦¬λ“œ 지원
  • μ»¨ν…μŠ€νŠΈ 기반 μ •ν™•ν•œ λ‹΅λ³€
  • 좜처 νŽ˜μ΄μ§€ λͺ…μ‹œλ‘œ μ‹ λ’°μ„± 확보

3. πŸ“Š AI Agent 평가 μ‹œμŠ€ν…œ

  • 6개 μ°¨μ›μ˜ 닀면적 ν’ˆμ§ˆ 평가
  • μžλ™ν™”λœ μ •λŸ‰μ  μΈ‘μ •
  • Bλ“±κΈ‰ (μ–‘ν˜Έ) 달성 (μ’…ν•© 점수 71.54%)

4. 🌐 μ‚¬μš©μž μΉœν™”μ  μΈν„°νŽ˜μ΄μŠ€

  • Gradio 기반 μ›Ή UI
  • μ‹€μ‹œκ°„ λŒ€ν™”ν˜• μΈν„°νŽ˜μ΄μŠ€
  • λͺ¨λ°”일 λ°˜μ‘ν˜• λ””μžμΈ

πŸ›  기술 μŠ€νƒ

Core Technologies

기술 버전 μš©λ„
Python 3.13 메인 개발 μ–Έμ–΄
LangChain 0.3.13 RAG νŒŒμ΄ν”„λΌμΈ ꡬ좕
FAISS 1.9.0 고속 벑터 검색
Sentence-Transformers 3.3.1 λ‹€κ΅­μ–΄ μž„λ² λ”©

Models & APIs

  • Embedding: paraphrase-multilingual-MiniLM-L12-v2 (118MB, 384차원)
  • LLM: GPT-3.5-turbo (온라인) / Llama 3.2:3b (μ˜€ν”„λΌμΈ)
  • Vector DB: FAISS (CPU μ΅œμ ν™”)

Frontend & Deployment

  • UI: Gradio 5.9.1
  • Storage: 둜컬 파일 μ‹œμŠ€ν…œ (312MB)
  • Deployment: Docker 배포 예쩑

πŸ— μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

graph LR
    A[μ‚¬μš©μž 질문] --> B[μž„λ² λ”© λ³€ν™˜]
    B --> C[FAISS 벑터 검색]
    C --> D[μƒμœ„ K개 청크 μΆ”μΆœ]
    D --> E[ν”„λ‘¬ν”„νŠΈ ꡬ성]
    E --> F[LLM λ‹΅λ³€ 생성]
    F --> G[μ‚¬μš©μž 응닡]
    
    H[PDF 맀뉴얼] --> I[ν…μŠ€νŠΈ μΆ”μΆœ]
    I --> J[청크 λΆ„ν• ]
    J --> K[벑터화]
    K --> L[(FAISS Index)]
    L --> C

πŸ“ˆ μ„±λŠ₯ μ§€ν‘œ

μ‹œμŠ€ν…œ μ„±λŠ₯

μ§€ν‘œ λͺ©ν‘œ 달성 μƒνƒœ
평균 μ‘λ‹΅μ‹œκ°„ < 2초 1.45초 βœ…
정확도 > 85% 84.9% βœ…
μ˜€ν”„λΌμΈ μž‘λ™ 지원 μ˜€ν”„λΌμΈ λͺ¨λ“œ 지원 (Ollama 기반) βœ…

AI Agent 평가 κ²°κ³Ό

🎯 μ’…ν•© 평가 μ§€ν‘œ
β€’ 의미 μœ μ‚¬λ„: 68.24%
β€’ λ‹΅λ³€ κ΄€λ ¨μ„±: 61.67%
β€’ 원문 좩싀도: 67.17%
β€’ λ‹΅λ³€ μ™„μ „μ„±: 71.67%
β€’ 일관성: 99.58%

⭐ μ’…ν•© 점수: 71.54% (Bλ“±κΈ‰)

πŸš€ μ„€μΉ˜ 및 μ‹€ν–‰

Prerequisites

  • Python 3.13+
  • 8GB+ RAM
  • 2GB+ λ””μŠ€ν¬ 곡간

1. 클둠 및 ν™˜κ²½ μ„€μ •

# 리포지토리 클둠
git clone https://github.com/yourusername/vehicle-manual-rag.git
cd vehicle-manual-rag

# κ°€μƒν™˜κ²½ 생성 및 ν™œμ„±ν™”
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# νŒ¨ν‚€μ§€ μ„€μΉ˜
pip install -r requirements.txt

2. ν™˜κ²½λ³€μˆ˜ μ„€μ •

# .env 파일 생성
echo "OPENAI_API_KEY=your-api-key-here" > .env

3. PDF 맀뉴얼 μ€€λΉ„

# PDF νŒŒμΌμ„ data 폴더에 볡사
cp your-manual.pdf data/LX3_2026_ko_KR.pdf

4. 벑터 인덱슀 생성 (첫 μ‹€ν–‰ μ‹œ)

python create_index.py
# μ•½ 3-5λΆ„ μ†Œμš” (6,354개 청크 벑터화)

5. μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰

python app.py
# λΈŒλΌμš°μ €μ—μ„œ http://localhost:7860 μžλ™ μ—΄λ¦Ό

6. (선택) Ollama μ˜€ν”„λΌμΈ λͺ¨λ“œ

# Ollama μ„€μΉ˜ ν›„
ollama pull llama3.2:3b

# app.pyμ—μ„œ use_ollama=True둜 λ³€κ²½

πŸ’» μ‚¬μš© 방법

μ›Ή μΈν„°νŽ˜μ΄μŠ€

  1. λΈŒλΌμš°μ €μ—μ„œ http://localhost:7860 접속
  2. "μ‹œμŠ€ν…œ μ΄ˆκΈ°ν™”" λ²„νŠΌ 클릭
  3. 질문 μž…λ ₯ (예: "μ—”μ§„μ˜€μΌ ꡐ체 μ£ΌκΈ°λŠ”?")
  4. Enter λ˜λŠ” "전솑" λ²„νŠΌ 클릭

μ˜ˆμ‹œ 질문

  • μ—”μ§„μ˜€μΌ ꡐ체 μ£ΌκΈ°λŠ” μ–Όλ§ˆλ‚˜ λ˜λ‚˜μš”?
  • 타이어 적정 곡기압은?
  • 경고등이 μΌœμ‘Œμ„ λ•Œ λŒ€μ²˜λ²•μ€?
  • ADAS κΈ°λŠ₯ μ„€μ • 방법
  • 브레이크 νŒ¨λ“œ ꡐ체 μ‹œκΈ°

Python API μ‚¬μš©

from src.embeddings import VehicleManualEmbeddings
from src.rag_chain import VehicleManualRAG

# μ‹œμŠ€ν…œ μ΄ˆκΈ°ν™”
embedder = VehicleManualEmbeddings()
vector_store = embedder.load_index()
rag = VehicleManualRAG(vector_store, use_ollama=False)

# μ§ˆλ¬Έν•˜κΈ°
response = rag.answer_question("μ—”μ§„μ˜€μΌ ꡐ체 μ£ΌκΈ°λŠ”?")
print(f"λ‹΅λ³€: {response['answer']}")
print(f"좜처: {response['source_pages']}")
print(f"μ‘λ‹΅μ‹œκ°„: {response['response_time']:.2f}초")

πŸ“Š 평가 μ‹œμŠ€ν…œ

μ’…ν•© 평가 μ‹€ν–‰

python evaluate.py

평가 μ§€ν‘œ 체계

평가 μ§€ν‘œ κ°€μ€‘μΉ˜ μΈ‘μ • 방법
Semantic Similarity 20% μž„λ² λ”© 벑터 코사인 μœ μ‚¬λ„
Answer Relevance 25% ν‚€μ›Œλ“œ λ§€μΉ­ + 의미 뢄석
Faithfulness 25% μ†ŒμŠ€ λ¬Έμ„œμ™€ 팩트 λŒ€μ‘°
Completeness 15% 질문 μœ ν˜•λ³„ ν•„μˆ˜ μš”μ†Œ 체크
Consistency 15% 반볡 질문 μ‹œ λ‹΅λ³€ μœ μ‚¬λ„

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

vehicle-manual-rag/
β”œβ”€β”€ πŸ“ src/                    # 핡심 λͺ¨λ“ˆ
β”‚   β”œβ”€β”€ document_loader.py     # PDF λ¬Έμ„œ λ‘œλ”
β”‚   β”œβ”€β”€ text_splitter.py       # ν…μŠ€νŠΈ μ²­ν‚Ή
β”‚   β”œβ”€β”€ embeddings.py          # 벑터 μž„λ² λ”©
β”‚   β”œβ”€β”€ rag_chain.py           # RAG 체인
β”‚   └── __init__.py
β”œβ”€β”€ πŸ“ data/                   # 데이터 μ €μž₯
β”‚   β”œβ”€β”€ LX3_2026_ko_KR.pdf    # μ°¨λŸ‰ 맀뉴얼
β”‚   └── faiss_index/           # 벑터 인덱슀
β”œβ”€β”€ πŸ“„ app.py                  # Gradio μ›Ή μ•±
β”œβ”€β”€ πŸ“„ create_index.py         # 인덱슀 생성
β”œβ”€β”€ πŸ“„ evaluate_system.py      # 평가 μ‹œμŠ€ν…œ
β”œβ”€β”€ πŸ“„ requirements.txt        # νŒ¨ν‚€μ§€ λͺ©λ‘
β”œβ”€β”€ πŸ“„ .env                    # ν™˜κ²½λ³€μˆ˜
└── πŸ“„ README.md              # ν”„λ‘œμ νŠΈ λ¬Έμ„œ

πŸ”§ 개발 κ³Όμ •

기반 ꡬ좕

  • βœ… PDF λ‘œλ” κ΅¬ν˜„ (590νŽ˜μ΄μ§€ 처리)
  • βœ… ν…μŠ€νŠΈ λΆ„ν•  μ‹œμŠ€ν…œ (6,354개 청크)
  • βœ… λ‹€κ΅­μ–΄ μž„λ² λ”© 적용
  • βœ… FAISS 인덱슀 ꡬ좕

μ‹œμŠ€ν…œ μ™„μ„±

  • βœ… RAG 체인 κ΅¬ν˜„
  • βœ… Gradio UI 개발
  • βœ… 평가 μ‹œμŠ€ν…œ ꡬ좕
  • βœ… μ„±λŠ₯ μ΅œμ ν™”

μ£Όμš” λ„μ „κ³Όμ œ 및 ν•΄κ²°

  1. 응닡 μ‹œκ°„ 2초 초과 β†’ 캐싱 및 청크 수 μ΅œμ ν™”λ‘œ 1.5초 달성
  2. 일관성 문제 β†’ Temperature 0.3으둜 μ‘°μ •, 90.3% 일관성 확보
  3. ν•œκ΅­μ–΄ μ„±λŠ₯ β†’ λ‹€κ΅­μ–΄ λͺ¨λΈ μ„ νƒμœΌλ‘œ ν•΄κ²°

πŸš€ ν–₯ν›„ κ°œμ„  κ³„νš

단기 (1κ°œμ›”)

  • μŒμ„± μΈν„°νŽ˜μ΄μŠ€ μΆ”κ°€ (Whisper)
  • 이미지 기반 질문 지원
  • μ‚¬μš©μžλ³„ 질문 νžˆμŠ€ν† λ¦¬

쀑기 (3κ°œμ›”)

  • μ‹€μ‹œκ°„ μ°¨λŸ‰ 데이터 연동
  • 닀쀑 μ°¨μ’… 맀뉴얼 지원
  • λͺ¨λ°”일 μ•± 개발

μž₯κΈ° (6κ°œμ›”)

  • 예츑적 μœ μ§€λ³΄μˆ˜ κΈ°λŠ₯
  • AR 기반 맀뉴얼 κ°€μ΄λ“œ
  • λ‹€κ΅­μ–΄ μŒμ„± 지원 (10개 μ–Έμ–΄)

🀝 κΈ°μ—¬ 방법

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

πŸ“ λΌμ΄μ„ΌμŠ€

MIT License - μžμ„Έν•œ λ‚΄μš©μ€ LICENSE 파일 μ°Έμ‘°

πŸ‘¨β€πŸ’» 개발자

[Jina Yoo]