κ°λ°μμ 곡μ λ¬Έμ λ©μ΄νΈ - μμ΄ λ¬Έμλ₯Ό νκ΅μ΄λ‘, 볡μ‘ν κ°λ μ μ½κ²
DevMateλ κ°λ°μκ° κΈ°μ 곡μ λ¬Έμλ₯Ό λΉ λ₯΄κ³ μ½κ² μ΄ν΄ν μ μλλ‘ λλ RAG κΈ°λ° AI μ±λ΄μ λλ€.
- β μμ΄ μ₯λ²½: 곡μ λ¬Έμ λλΆλΆμ΄ μμ΄λ‘ μμ±λ¨
- β μ 보 κ³ΌλΆν: λ°©λν λ¬Έμμμ νμν μ 보 μ°ΎκΈ° μ΄λ €μ
- β λ§₯λ½ λΆμ¬: κΈ°μ‘΄ κ²μμ λ¨νΈμ κ²°κ³Όλ§ μ 곡
- β μ€μ μμ λΆμ‘±: μ΄λ‘ μ μμ§λ§ μ½λ μμ λΆμ‘±
- β λνν κ²μ: λ§₯λ½μ μ΄ν΄νκ³ λ¨κ³λ³ μ€λͺ μ 곡
- β νμ λ³ν: νκ΅μ΄ λ΅λ³ + μλ¬Έ μλ¬Έ λ³ν νμ
- β μ½λ μ€μ¬: μ€ν κ°λ₯ν μμ μ°μ μ 곡
- β μΆμ² λͺ ν: Hallucination λ°©μ§λ₯Ό μν μΆμ² νμ
- PDF λ¬Έμ μ λ‘λ & μλ μΈλ±μ±
- μμ°μ΄ μ§μμλ΅
- μΆμ² νμ (top-3 κ΄λ ¨ λ¬Έμ)
- FAISS λ²‘ν° κ²μ
- λν νμ€ν 리 μ μ₯ & λ§₯λ½ μ μ§
- Streamlit μΉ μΈν°νμ΄μ€
- μ¬λ¬ λ¬Έμ λμ κ²μ
- SQLite κΈ°λ° λ°μ΄ν° κ΄λ¦¬
- νμ λ³ν λ΅λ³ λͺ¨λ
- μ½λ λΈλ‘ Syntax Highlighting
- ν둬ννΈ μ΅μ ν (λ΅λ³ νμ§ κ°μ )
- λΉμ©/μ±λ₯ λͺ¨λν°λ§
- Streamlit Cloud λ°°ν¬
- μμ ν λ¬Έμν
- λ°λͺ¨ μλ리μ€
- LLM: OpenAI GPT-3.5-turbo
- Framework: LangChain
- Vector DB: FAISS (νμ΄μ€λΆ)
- Embeddings: OpenAI text-embedding-ada-002
- API: FastAPI
- DB: SQLite (aiosqlite)
- ORM: SQLAlchemy 2.0 (async)
- UI: Streamlit
- Syntax Highlighting: Pygments
- Version Control: Git
- Deployment: Streamlit Cloud
- Monitoring: Custom logging + metrics
devmate/
βββ app/
β βββ domain/ # λλ©μΈ λͺ¨λΈ (μν°ν°)
β βββ application/ # λΉμ¦λμ€ λ‘μ§ (μ μ€μΌμ΄μ€)
β βββ infrastructure/ # μΈλΆ μ°λ (DB, LLM, λ²‘ν° μ€ν μ΄)
β βββ api/ # REST API (FastAPI)
β βββ ui/ # μΉ UI (Streamlit)
β
βββ tests/
β βββ unit/ # λ¨μ ν
μ€νΈ
β βββ integration/ # ν΅ν© ν
μ€νΈ
β βββ e2e/ # E2E ν
μ€νΈ
β
βββ data/
β βββ documents/ # μ
λ‘λλ λ¬Έμ
β βββ vector_store/ # FAISS μΈλ±μ€
β βββ database/ # SQLite DB
β
βββ docs/
β βββ DESIGN.md # μ€κ³ λ¬Έμ
β βββ ARCHITECTURE.md # μν€ν
μ² λ¬Έμ
β βββ IMPLEMENTATION.md # ꡬν κ°μ΄λ
β
βββ .env.example # νκ²½ λ³μ ν
νλ¦Ώ
βββ requirements.txt # μμ‘΄μ±
βββ README.md # νλ‘μ νΈ μκ° (μ΄ νμΌ)
μμΈν μν€ν μ²λ ARCHITECTURE.md μ°Έκ³
- Python 3.10 μ΄μ
- OpenAI API Key (λ°κΈ λ°©λ²)
# 1. λ ν¬μ§ν 리 ν΄λ‘
git clone https://github.com/your-username/devmate.git
cd devmate
# 2. κ°μνκ²½ μμ± & νμ±ν
python -m venv venv
# Windows:
venv\Scripts\activate
# Mac/Linux:
source venv/bin/activate
# 3. μμ‘΄μ± μ€μΉ
pip install -r requirements.txt
# 4. νκ²½ λ³μ μ€μ
cp .env.example .env
# .env νμΌ νΈμ§: OPENAI_API_KEY=your-key-here
# 5. DB μ΄κΈ°ν
python scripts/init_db.py# λ°©λ² 1: Streamlit UI (κΆμ₯)
streamlit run app/streamlit_app.py
# λ°©λ² 2: FastAPI μλ²
uvicorn app.main:app --reload
# API λ¬Έμ: http://localhost:8000/docs- λΈλΌμ°μ μμ
http://localhost:8501μ μ - PDF λ¬Έμ μ λ‘λ (μ: FastAPI 곡μ λ¬Έμ)
- μΈλ±μ± μλ£ λκΈ° (μ½ 30μ΄)
- μ§λ¬Έ μ λ ₯: "FastAPIμμ JWT μΈμ¦ μ΄λ»κ² ν΄?"
- λ΅λ³ + μΆμ² νμΈ
- μλ΅ μκ°: < 3μ΄ (95th percentile)
- μ νλ: μ¬μ©μ λ§μ‘±λ 80%+ (5μ μ²λ 4μ μ΄μ)
- λΉμ©: μ§λ¬ΈλΉ < $0.01
- νκ· μλ΅ μκ°: ~2.5μ΄
- ν ν° λΉμ©: μ§λ¬ΈλΉ νκ· $0.002
- μΈλ±μ± μλ: 10νμ΄μ§ PDF β 30μ΄
# μ 체 ν
μ€νΈ
pytest
# 컀λ²λ¦¬μ§ ν¬ν¨
pytest --cov=app --cov-report=html
# νΉμ ν
μ€νΈλ§
pytest tests/unit/test_models.py -v
# E2E ν
μ€νΈ
pytest tests/e2e/ -v -s- DESIGN.md: μμ€ν μ€κ³ λ° μμ¬κ²°μ
- ARCHITECTURE.md: μν€ν μ² μμΈ
- IMPLEMENTATION.md: ꡬν κ°μ΄λ
- API λ¬Έμ: FastAPI μλ μμ± (μλ² μ€ν νμ)
- β κΈ°λ³Έ RAG νμ΄νλΌμΈ
- β λ¨μΌ λ¬Έμ κ²μ
- β μΆμ² νμ
- π λν λ§₯λ½ μ μ§
- π Streamlit UI
- π λ©ν° λ¬Έμ κ²μ
- νμ λ³ν λ΅λ³
- μ½λ νμ΄λΌμ΄ν
- μ±λ₯ μ΅μ ν
- λ€κ΅μ΄ μ§μ (μΌλ³Έμ΄, μ€κ΅μ΄)
- μμ± μ λ ₯/μΆλ ₯
- μ΄λ―Έμ§ ν¬ν¨ PDF μ²λ¦¬
- Pinecone ν΅ν© (ν΄λΌμ°λ λ²‘ν° DB)
- μ¬μ©μ μΈμ¦/κΆν κ΄λ¦¬
μ΄μ μ 보, κΈ°λ₯ μ μ, PR νμν©λλ€!
- 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 - μμ λ‘κ² μ¬μ©νμΈμ!
λΉμ μ μ΄λ¦
- GitHub: @your-username
- Email: your.email@example.com
- LinkedIn: λΉμ μ μ΄λ¦
- LangChain - LLM μ ν리μΌμ΄μ νλ μμν¬
- FastAPI - νλμ μΈ Python μΉ νλ μμν¬
- Streamlit - λΉ λ₯Έ λ°μ΄ν° μ± κ΅¬μΆ
- FAISS - λ²‘ν° μ μ¬λ κ²μ
μ§λ¬Έμ΄λ μ μμ΄ μμΌμλ©΄ μ΄μλ₯Ό μμ±ν΄μ£ΌμΈμ!
β μ΄ νλ‘μ νΈκ° λμμ΄ λμ ¨λ€λ©΄ Starλ₯Ό λλ¬μ£ΌμΈμ!