A newer version of the Gradio SDK is available:
5.44.1
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 μμ€ν
κ°λ° κΈ°κ°: 2025λ 8μ 10μΌ ~ 2025λ 8μ 20μΌ
π λͺ©μ°¨
- νλ‘μ νΈ μκ°
- ν΅μ¬ κΈ°λ₯
- κΈ°μ μ€ν
- μμ€ν μν€ν μ²
- μ±λ₯ μ§ν
- μ€μΉ λ° μ€ν
- μ¬μ© λ°©λ²
- νκ° μμ€ν
- νλ‘μ νΈ κ΅¬μ‘°
- κ°λ° κ³Όμ
- ν₯ν κ°μ κ³ν
π― νλ‘μ νΈ μκ°
νλ ν°λ¦¬μΈμ΄λ 2026 μ°¨λ λ§€λ΄μΌ(590νμ΄μ§)μ κΈ°λ°μΌλ‘ ν μ§λ₯ν Q&A μμ€ν
μ
λλ€.
μ΄μ μκ° μ°¨λ κ΄λ ¨ μ§λ¬Έμ μμ°μ΄λ‘ μ
λ ₯νλ©΄, AIκ° λ§€λ΄μΌμμ μ νν μ 보λ₯Ό μ°Ύμ μ€μκ°μΌλ‘ λ΅λ³ν©λλ€.
DEMO Ver.
μ 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λ‘ λ³κ²½
π» μ¬μ© λ°©λ²
μΉ μΈν°νμ΄μ€
- λΈλΌμ°μ μμ
http://localhost:7860
μ μ - "μμ€ν μ΄κΈ°ν" λ²νΌ ν΄λ¦
- μ§λ¬Έ μ λ ₯ (μ: "μμ§μ€μΌ κ΅μ²΄ μ£ΌκΈ°λ?")
- 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 κ°λ°
- β νκ° μμ€ν ꡬμΆ
- β μ±λ₯ μ΅μ ν
μ£Όμ λμ κ³Όμ λ° ν΄κ²°
- μλ΅ μκ° 2μ΄ μ΄κ³Ό β μΊμ± λ° μ²ν¬ μ μ΅μ νλ‘ 1.5μ΄ λ¬μ±
- μΌκ΄μ± λ¬Έμ β Temperature 0.3μΌλ‘ μ‘°μ , 90.3% μΌκ΄μ± ν보
- νκ΅μ΄ μ±λ₯ β λ€κ΅μ΄ λͺ¨λΈ μ νμΌλ‘ ν΄κ²°
π ν₯ν κ°μ κ³ν
λ¨κΈ° (1κ°μ)
- μμ± μΈν°νμ΄μ€ μΆκ° (Whisper)
- μ΄λ―Έμ§ κΈ°λ° μ§λ¬Έ μ§μ
- μ¬μ©μλ³ μ§λ¬Έ νμ€ν 리
μ€κΈ° (3κ°μ)
- μ€μκ° μ°¨λ λ°μ΄ν° μ°λ
- λ€μ€ μ°¨μ’ λ§€λ΄μΌ μ§μ
- λͺ¨λ°μΌ μ± κ°λ°
μ₯κΈ° (6κ°μ)
- μμΈ‘μ μ μ§λ³΄μ κΈ°λ₯
- AR κΈ°λ° λ§€λ΄μΌ κ°μ΄λ
- λ€κ΅μ΄ μμ± μ§μ (10κ° μΈμ΄)
π€ κΈ°μ¬ λ°©λ²
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
π λΌμ΄μΌμ€
MIT License - μμΈν λ΄μ©μ LICENSE νμΌ μ°Έμ‘°
π¨βπ» κ°λ°μ
[Jina Yoo]
- Email: camellia.afterglow@gmail.com
- GitHub: @Jina-yu
- LinkedIn: Jina Yoo