ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π Python 3.12 β‘ FastAPI 0.115 π¦ LangGraph 0.6 β
β π€ Solar Pro Β· EXAONE 32B Β· Qwen 35B Β· vLLM EXAONE 1.2B β
β π Qdrant Β· πΈοΈ Neo4j Β· π ES 8.17 Β· β‘ Redis Β· πΎ MySQL β
β π³ Toss Payments v2 + AI μΏΌν° 3-μμ€ + 6λ±κΈ νμ½ β
β π³ Docker Β· π GitHub Actions Β· βοΈ μΉ΄μΉ΄μ€ ν΄λΌμ°λ 4-VM β
β π Prometheus + Grafana + ELK + LangSmith β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
λ¨μΌ monglepick-agent μλΉμ€μ 8κ° LangGraph μμ΄μ νΈ + λ°μ΄ν° νμ΄νλΌμΈ + μΈνλΌ + κ²°μ ·리μλ μ ν©μ± λͺ¨λ λ¨λ μ€κ³/ꡬν. Β· μμ°μ΄ β μλ/κ°μ /μ νΈ β RRF νμ΄λΈλ¦¬λ RAG β CF+CBF μΆμ² β 5νΈ μΉ΄λ SSE μ€νΈλ¦¬λ° Β· TMDB 1.17M 건 β 50MB λ©λͺ¨λ¦¬ μ€νΈλ¦¬λ° μ μ¬ + μΉ΄μΉ΄μ€ 4-VM + 11 GHA μν¬νλ‘μ° Β· 79 admin tools / 9 support tools ReAct + νκ° κ°λ 4μ€ + check/consume λΆλ¦¬
| νλͺ© | λ΄μ© |
|---|---|
| μ΄λ¦ | Monglepick AI Agent |
| κΈ°κ° | 2026.01 ~ μ§ν μ€ |
| λ³ΈμΈ μν | AI Agent μ 체 + λ°μ΄ν° νμ΄νλΌμΈ + μΈνλΌ + κ²°μ 컨νΈλνΈ λ¨λ |
| GitHub | monglepick/agent |
| μ΄μ URL | https://monglepick.garabu.org/api/v1/chat (SSE) |
| ν μ€νΈ | 1,234 PASS / 11 skip |
κ° μ§νκ° μ΄λ€ λ©νΈλ¦/μ₯μ λ‘ λ°κ²¬λκ³ μ΄λ€ μ‘°μΉλ‘ λ§λ€μ΄μ§ κ²°κ³ΌμΈμ§ 4λ¨κ³λ‘ νμ΄.
| μμ | Before | λ°κ²¬ (λ©νΈλ¦/μ₯μ ) | μ‘°μΉ | After |
|---|---|---|---|---|
| λ©λͺ¨λ¦¬ | 50 GB+ | 5λ² OOM (Day 1Β·3Β·7Β·10Β·14) β /usr/bin/time -v μΈ‘μ |
μ²ν¬ (2,000건) + 체ν¬ν¬μΈνΈ + retry_queue λΆλ¦¬ | 50 MB (1,000λ°°) |
| μ μ¬ ν΅κ³Όμ¨ | β | TMDB 39 νλ μ€ overview/genres NULL μΌμ΄μ€ 4.3% | μ κ·ν ν΅κ³Όμ¨ κ°λ + KMDbΒ·KOBIS νκ΅ μν λ³΄κ° | 95.7% (1,120,000건) |
| LLM Cold Start | 10μ΄+ | Ollama 첫 μμ² GPU λ©λͺ¨λ¦¬ lazy λ‘λ | FastAPI lifespan μ¬μ warmup (λ³λ ¬) + OLLAMA_MAX_LOADED_MODELS=2 |
μ¦μ |
| GPU OOM | λ°μ | nvidia-smi 95% μ μ + EXAONE/Qwen swap-in/out |
λͺ¨λΈλ³ Semaphore(1) + κΈλ‘λ² MAX_CONCURRENT=3 |
0건 (4κ°μ) |
| LLM νΈμΆ (μλ+κ°μ ) | 2ν | LangSmith λΆμ β κ°μ λ°νμ λ λ² νΈμΆ | Solar Pro JSON Schema λ¨μΌ νΈμΆ ν΅ν© | 1ν (50%β ν ν°) |
| μλ΅ P50 | 5.2s | LangSmith λ Έλλ³ latency β Solar λ¨μΌ νΈμΆ 1.3s | μλ+κ°μ ν΅ν© + λ Έλλ³ LLM λΌμ°ν | 2.8s (46%β) |
| μλ΅ P95 | 18s | RAG source ν κ³³ timeout μ long-tail | per-source 5s + μ 체 25s timeout + safe_search wrapper | 8.5s (53%β) |
| Admin Tool ν ν° | 8K | 79 tool description ν΅μ§Έ λ ΈμΆ β LLM attention λΆμ° | 3λ¨κ³ RAG (Role+Intent β ν€μλ ν΄λ¦¬μ€ν± β Top-5 LLM) | 1.2K (85%β) |
| Tool μ ν μ νλ | 88% | μ΄μ trace λΆμ β μλͺ»λ tool 12% | Top-5 RAG + finish_task κ°μ tool | 98.8% (μ€λ₯ 90%β) |
| Support νκ° (μλΉμ€λͺ ) | λ°μ (5%) | μ¬μ©μ μ κ³ 1건 β βλͺ½λΈλμ ___β | 4μ€ κ°λ (capability force + ν€μλ 14μ’ + μ κ·ν + ν둬ννΈ μμ) | 0건 (4κ°μ) |
| AI μΏΌν° μ ν©μ± | μ°¨κ°λ¨ | μ¬μ©μ μ κ³ β βμλ΅ μ€ν¨μΈλ° ν¬μΈνΈ λΉ μ§β | check (read-only) + consume (PESSIMISTIC_WRITE + Idempotency) 2-Phase λΆλ¦¬ | 0건 (μ¬μ©μ μ κ³ 0) |
| μ΄μ νκ· νκ· ν½μ€ | 4μκ° | Phase 5 κΉμ§ grep μΌλ‘ λ Έλλ³ λ‘κ·Έ μΆμ | LangSmith run_id κΈ°λ° μ§λ¨ νμ€ν (5λΆ) | 2μκ° (50%β) |
| Phase | κΈ°κ° | ν΅μ¬ κ³Όμ | κ²°κ³Ό |
|---|---|---|---|
| Phase 0 | 2026.01 | νλ‘μ νΈ μ μ + 5 μλΉμ€ 골격 | FastAPI Β· LangGraph 0.6 Β· Spring Boot 3 Β· React 19 Β· Recommend FastAPI |
| Phase 1 | 2026.01-02 | λ°μ΄ν° νμ΄νλΌμΈ (TMDB Daily Export 1.17M) | 95.7% ν΅κ³Όμ¨ Β· 50MB μ€νΈλ¦¬λ° |
| Phase 2 | 2026.02 | Chat Agent 1μ°¨ (10λ Έλ) | μλ/κ°μ λΆλ₯ + λ¨μΌ DB RAG |
| Phase 3 | 2026.02-03 | RRF νμ΄λΈλ¦¬λ κ²μ (Qdrant + ES + Neo4j) | RRF k=60 + 4λ¨κ³ fallback |
| Phase 4 | 2026.03 | Chat Agent 2μ°¨ (14λ Έλ) + μΆμ² μμ§ (CF+CBF) | MMR Ξ»=0.7 + μ¬λ‘― quota |
| Phase 5 | 2026.03-04 | Match Agent (λμ΄μνκ³ λ₯΄κΈ°) + Roadmap + Content Analysis | Vector Centroid + harmonic mean |
| Phase 6 | 2026.04 | κ΄λ¦¬μ AI μ΄μμ€ν΄νΈ v1βv2βv3 | 79 tools ReAct + 11λ Έλ |
| Phase 7 | 2026.04 | κ³ κ°μΌν° μ±λ΄ v1βv2βv3βv4 | 9λ Έλ ReAct + νκ° κ°λ 4μ€ |
| Phase 8 | 2026.04 | μΉ΄μΉ΄μ€ 4-VM μ΄μ λ°°ν¬ + GHA 11 μν¬νλ‘μ° | μλ λ°°ν¬ μμ ν |
| Phase 9 | 2026.04 | Quiz Generation + κ²°μ 컨νΈλνΈ (check/consume λΆλ¦¬) | 47 PASS Β· λ©±λ± INSERT |
λ―Έμ: λ€κ΅μ΄ κ²μ ML-4 Β· λͺ½κΈμ΄ LoRA Β· λμ₯κΉ¨κΈ° 리뷰 κ²μ¦ Β· @PreAuthorize κ°μ Β· κ³ κ°μΌν° v4 Phase 2.5
| μΉ΄ν κ³ λ¦¬ | κΈ°μ | λ²μ | μ ν μ΄μ |
|---|---|---|---|
| μΈμ΄ | Python | 3.12 | typing + async/await + LLM μνκ³ |
| μΉ | FastAPI | 0.115 | async + μλ OpenAPI + Pydantic |
| μμ΄μ νΈ | LangGraph | 0.6 | StateGraph + checkpointer |
| μ€ν€λ§ | Pydantic | 2.x | LangGraph State νμ μμ μ± |
| HTTP | httpx | latest | async + Connection Pool + http2 |
| ν¨ν€μ§ | uv | latest | pip λλΉ 10λ°°+ λΉ λ¦ |
| ν μ€νΈ | pytest + pytest-asyncio | latest | async ν μ€νΈ + Mock |
| μμ‘΄μ± κ΄λ¦¬ | pyproject.toml + uv.lock | latest | reproducible build |
| LLM | μ΄μ | μ©λ | νκ΅μ΄ | P50 | λΉμ© |
|---|---|---|---|---|---|
| Upstage Solar Pro | Cloud API | μλ/κ°μ λΆλ₯ Β· μ νΈ μΆμΆ Β· μ μ± RAG Β· μΆμ² μ΄μ | β | 1.3s | API κ³ΌκΈ |
| EXAONE 4.0 32B | Ollama (Apple Silicon Metal) | μμ°μ΄ μλ΅ | β | 4.5s | self-hosted |
| Qwen 3.5 35B (a3b) | Ollama | λ€μ€ λΆλ₯ + VLM | β | 3.8s | self-hosted |
| EXAONE 4.0 1.2B (λͺ½κΈμ΄) | vLLM Tesla T4 :18000/18001 | μΊλ¦ν° μ±λ΄ | β | 0.8s | self-hosted |
| Upstage Solar Embedding | Cloud API | 4096μ°¨μ | β | 0.4s/건 | API κ³ΌκΈ |