Skip to content
@fourEdiots

fourEdiots

All is Well - μž„λ² λ”© κ²°ν•© μ μ‘ν˜• μžμ—°μ–΄ νŒ¨λ„ μΆ”μΆœ μ‹œμŠ€ν…œ

LangGraph + RAG + BGE Reranker 기반 μ°¨μ„ΈλŒ€ μ§€λŠ₯ν˜• 검색 ν”Œλž«νΌ

πŸ“‹ λͺ©μ°¨

πŸ“Œ ν”„λ‘œμ νŠΈ μ†Œκ°œ

All is Well은 λ°©λŒ€ν•œ νŒ¨λ„ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ‚¬μš©μžμ˜ μžμ—°μ–΄ 질의λ₯Ό μ§€λŠ₯적으둜 μ²˜λ¦¬ν•˜μ—¬ 졜적의 νŒ¨λ„μ„ μΆ”μΆœν•˜λŠ” μ°¨μ„ΈλŒ€ 검색 μ‹œμŠ€ν…œμž…λ‹ˆλ‹€. "캠핑을 μ’‹μ•„ν•˜λŠ” 30λŒ€ μ„œμšΈ κ±°μ£Ό μ—¬μ„±"κ³Ό 같은 μžμ—°μ–΄ 질의만으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯된 νŒ¨λ„κ³Ό νŒ¨λ„μ˜ μ„€λ¬Έ 응닡 데이터λ₯Ό κ²€μƒ‰ν•˜κ³ , AIκ°€ μƒμ„±ν•œ 페λ₯΄μ†Œλ‚˜ 및 톡계 μ‹œκ°ν™”λ₯Ό 톡해 즉각적인 μΈμ‚¬μ΄νŠΈλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

🎯 핡심 κ°€μΉ˜κΈ°μ‘΄ μ‹œμŠ€ν…œμ˜ ν•œκ³„:

  • ν‚€μ›Œλ“œ 기반 κ²€μƒ‰μœΌλ‘œ 좔상적 질의 처리 λΆˆκ°€
  • νš¨μœ¨μ„±κ³Ό μ •ν™•μ„±μ˜ νŠΈλ ˆμ΄λ“œμ˜€ν”„ 문제
  • 검색 결과의 μ œν•œμ  ν™œμš© (λ‹¨μˆœ λͺ©λ‘λ§Œ 제곡)
  • 비연속적 검색 κ²½ν—˜ (맀번 μƒˆλ‘œ 검색)
  • μƒˆ 데이터 μΆ”κ°€ μ‹œ κΈ΄ μ „μ²˜λ¦¬ μ‹œκ°„

All is Well의 ν˜μ‹ :

  • μ μ‘ν˜• ν•˜μ΄λΈŒλ¦¬λ“œ 검색: 질의 λ‚œμ΄λ„ μžλ™ λΆ„λ₯˜ (SQL/μž„λ² λ”© 동적 선택)
  • μ§€λŠ₯ν˜• κ·Έλ£Ή 뢄석: LLM 기반 페λ₯΄μ†Œλ‚˜ 생성 및 AI 이미지 μ‹œκ°ν™”
  • λŒ€ν™”ν˜• 연속 검색: LangGraph μ„Έμ…˜ κ΄€λ¦¬λ‘œ λ“œλ¦΄λ‹€μš΄ 지원
  • μ‹€μ‹œκ°„ 톡계 μ‹œκ°ν™”: Chart.js μΈν„°λž™ν‹°λΈŒ 차트
  • BGE 기반 λ¦¬λž­ν‚Ή: μ „μ²˜λ¦¬ 없이 질문-응닡 의미 μœ μ‚¬μ„± 계산

πŸ” 프리뷰

프리뷰

πŸ‘₯ νŒ€μ› 및 μ—­ν• 

Profile Name Role Assigned Task GitHub
μ΄μ„μš° Leader
AIΒ·Data Engineer
Panel Search Pipeline Development
Data Structure Development
GitHub
양닀원 Full-stack Developer UI Design & Frontend Development
Backend API Development (Login/Search)
GitHub
μ •μˆ˜ν˜„ AIΒ·Data Engineer AI Architecture Design
Data Embedding
GitHub
ν™μ„±ν™˜ Full-stack Developer UI Design & Frontend Development
Backend API Development (Library/History/Panel Details)
GitHub

πŸŽ₯ μ£Όμš” ν™”λ©΄

  1. 메인 검색 ν™”λ©΄
  • 둜그인 ν›„ μžμ—°μ–΄λ‘œ νŒ¨λ„ 검색
    image
  1. 검색 κ²°κ³Ό ν™”λ©΄
  • κ·Έλ£Ή 페λ₯΄μ†Œλ‚˜: LLM 생성 ν…μŠ€νŠΈ + AI 이미지 + ν•΄μ‹œνƒœκ·Έ
  • 톡계 차트: μ—°λ ΉλŒ€/성별/μ§€μ—­/직업 뢄포 μ‹œκ°ν™”
  • κ°œλ³„ νŒ¨λ„: μœ μ‚¬λ„ 점수 + 맀칭된 질문 응닡
    image
  1. νŒ¨λ„ 상세 νŽ˜μ΄μ§€
  • κ°œλ³„ νŒ¨λ„μ˜ 고유 페λ₯΄μ†Œλ‚˜, κΈ°λ³Έ ν”„λ‘œν•„, νƒœκ·Έ 정보
    image
  1. 검색 νžˆμŠ€ν† λ¦¬ & 라이브러리
  • 검색 기둝 쑰회 및 μž¬μ‹€ν–‰
  • 자주 μ‚¬μš©ν•˜λŠ” 검색 μ €μž₯ 관리
    image

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

넀얼간이 μ•„ν‚€ν…μ²˜

계측별 μ—­ν• 

Frontend (React + Vite)

  • μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€
  • 검색, νžˆμŠ€ν† λ¦¬, 라이브러리 관리
  • Chart.js 톡계 μ‹œκ°ν™”
  • TanStack Query μ„œλ²„ μƒνƒœ 관리

API Server (FastAPI)

  • μ‚¬μš©μž 인증 (JWT)
  • 검색 κ²°κ³Ό μΊμ‹œ 관리
  • νžˆμŠ€ν† λ¦¬ & 라이브러리 CRUD
  • CSV λ‹€μš΄λ‘œλ“œ 제곡
  • ν”„λ‘μ‹œ νŒ¨ν„΄μœΌλ‘œ λ³΄μ•ˆ κ°•ν™”

Data Pipeline (FastAPI + LangGraph)

  • LangGraph 3-Tier 검색 μ›Œν¬ν”Œλ‘œμš°
  • LLM 기반 쿼리 뢄석 & κ²°κ³Ό μš”μ•½
  • ChromaDB 벑터 검색
  • BGE Reranker μž¬μˆœμœ„ν™”
  • 페λ₯΄μ†Œλ‚˜ & 이미지 생성

Database (SQLite + ChromaDB)

  • SQLite: ꡬ쑰화 데이터 (νŒ¨λ„ 정보, μ •ν˜• 질의 응닡 데이터)
  • ChromaDB: 벑터 검색 (λΉ„μ •ν˜• 질문 + 응닡)

✨ μ£Όμš” κΈ°λŠ₯

1. πŸ” μ§€λŠ₯ν˜• 3-Tier 검색

μ‚¬μš©μž 쿼리: "μ„œμšΈ 20λŒ€ μ—¬μ„± 쀑 ChatGPT μ‚¬μš©ν•˜λŠ” μ‚¬λžŒ"
                              ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Step 1: LLM 쿼리 뢄석 (gpt-4o-mini)                        β”‚
β”‚  {                                                           β”‚
β”‚    demographics: {region: "μ„œμšΈ", age: [20-29], gender: "μ—¬μ„±"}β”‚
β”‚    structured_keywords: []                                  β”‚
β”‚    semantic_queries: ["ChatGPT μ‚¬μš©"]                       β”‚
β”‚  }                                                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Step 2: Tier 1 - Demographics SQL (인ꡬ톡계 ν•„ν„°)          β”‚
β”‚  WHERE region='μ„œμšΈ' AND gender='μ—¬μ„±' AND age BETWEEN 20-29β”‚
β”‚  β†’ 1,234λͺ… 후보 μΆ”μΆœ                                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Step 3: Tier 2 - Structured SQL (ꡬ쑰화 ν‚€μ›Œλ“œ)            β”‚
β”‚  SKIP (ν•΄λ‹Ή μ—†μŒ)                                           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Step 4: Tier 3 - Semantic Vector Search + BGE Reranker     β”‚
β”‚  [1] Question-First: 44개 질문 검색 β†’ AI κ΄€λ ¨ 5개 질문 μ„ μ •  β”‚
β”‚  [2] Answer Search: 1,234λͺ… 후보 쀑 5개 질문 λ‹΅λ³€λ§Œ 검색     β”‚
β”‚  [3] BGE Reranker: Cross-encoder둜 μž¬μˆœμœ„ν™”                 β”‚
β”‚  β†’ Top 100λͺ… μ„ μ • (match_score: 0.85~0.95)                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Step 5: LLM κ²°κ³Ό μš”μ•½ & 페λ₯΄μ†Œλ‚˜ 생성                       β”‚
β”‚  "μ„œμšΈ κ±°μ£Ό 20λŒ€ μ—¬μ„± 100λͺ… (ChatGPT μ‚¬μš©μž)"                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

μ„±λŠ₯:

  • Tier 1-2만 μ‚¬μš©: ~100ms ⚑
  • Full Pipeline (GPU): ~17초
  • Full Pipeline (CPU): ~2.5λΆ„

2. 🎭 AI 페λ₯΄μ†Œλ‚˜ 생성

κ·Έλ£Ή 페λ₯΄μ†Œλ‚˜ (LLM 생성)

{
  "text": "30λŒ€ 초반의 μ•‘ν‹°λΈŒν•œ 아웃도어 μ• ν˜Έκ°€λ‘œ, μ£Όλ§λ§ˆλ‹€ λ“±μ‚°μ΄λ‚˜ 캠핑을 즐기며...",
  "hashtags": ["#아웃도어", "#30λŒ€", "#μ•‘ν‹°λΈŒ", "#μΊ ν•‘"],
  "image_url": "data:image/png;base64,iVBORw0KG..."
}
  • ν…μŠ€νŠΈ: GPT-4o-miniκ°€ κ·Έλ£Ή νŠΉμ„± μš”μ•½

  • ν•΄μ‹œνƒœκ·Έ: 핡심 ν‚€μ›Œλ“œ μΆ”μΆœ

  • 이미지: Nano Banana λͺ¨λΈλ‘œ μ‹œκ°ν™”

  • κ°œλ³„ 페λ₯΄μ†Œλ‚˜ (36,113개 사전 생성)

  • 각 νŒ¨λ„μ˜ μ„±ν–₯, 관심사, λΌμ΄ν”„μŠ€νƒ€μΌ μš”μ•½

  • 검색 μ‹œ μœ μ‚¬λ„ μ μˆ˜μ™€ ν•¨κ»˜ 제곡

3. πŸ“Š μΈν„°λž™ν‹°λΈŒ 톡계 μ‹œκ°ν™”

  • Chart.js 기반 차트

  • μ—°λ ΉλŒ€λ³„ 뢄포 (λ§‰λŒ€ κ·Έλž˜ν”„)

  • 성별 뢄포 (μ›ν˜• 차트)

  • 지역별 뢄포 (λ§‰λŒ€ κ·Έλž˜ν”„)

  • 직업별 뢄포 (κ°€λ‘œ λ§‰λŒ€)

  • μ†Œλ“λ³„ 뢄포 (μ„  κ·Έλž˜ν”„)

클릭 ν•œ 번으둜 차트 μ „ν™˜

// μ‚¬μš©μžκ°€ "μ—°λ ΉλŒ€" 클릭 β†’ BarChart λ Œλ”λ§
<BarChart
  data={{
    labels: ["20λŒ€", "30λŒ€", "40λŒ€"],
    values: [50, 300, 100]
  }}
  title="μ—°λ ΉλŒ€λ³„ 뢄포"
/>

4. πŸ”„ λŒ€ν™”ν˜• λ“œλ¦΄λ‹€μš΄ 검색

연속 질문 μ‹œλ‚˜λ¦¬μ˜€:

1μ°¨ 검색: "μΊ ν•‘ μ’‹μ•„ν•˜λŠ” μ‚¬λžŒ" β†’ 450λͺ…
   ↓ session_id μœ μ§€
2μ°¨ 검색: "이 μ€‘μ—μ„œ μ„œμšΈ 거주자" β†’ 120λͺ…
   ↓ session_id μœ μ§€
3μ°¨ 검색: "이 μ€‘μ—μ„œ 30λŒ€λ§Œ" β†’ 80λͺ…

LangGraph μƒνƒœ 관리:

  • 이전 κ²°κ³Ό μ§‘ν•© λ‚΄μ—μ„œλ§Œ μΆ”κ°€ 필터링
  • 전체 μž¬κ²€μƒ‰ λΆˆν•„μš” β†’ νš¨μœ¨μ„± κ·ΉλŒ€ν™”

5. πŸ“₯ 데이터 ν™œμš© κΈ°λŠ₯

CSV λ‹€μš΄λ‘œλ“œ

νŒ¨λ„ID,λ‚˜μ΄,성별,μ§€μ—­,ꡬ역,직업,μš”μ•½,μœ μ‚¬λ„
PANEL_001,32,남성,μ„œμšΈ,강남ꡬ,IT 개발자,μ£Όλ§λ§ˆλ‹€ 캠핑을...,0.95
  • UTF-8 BOM으둜 ν•œκΈ€ 깨짐 λ°©μ§€
  • νƒ€μž„μŠ€νƒ¬ν”„ 파일λͺ…: panel_results_20241128_143022.csv

검색 νžˆμŠ€ν† λ¦¬

  • 졜근 검색 μžλ™ μ €μž₯
  • 클릭으둜 이전 κ²°κ³Ό μ¦‰μ‹œ 볡원

라이브러리

  • 자주 μ‚¬μš©ν•˜λŠ” 검색 μ €μž₯
  • μ‚¬μš©μž μ§€μ • 제λͺ© 관리

πŸ›  기술 μŠ€νƒ

Frontend

React 18.x              UI 라이브러리
TypeScript              νƒ€μž… μ•ˆμ „μ„±
Vite                    λΉŒλ“œ 도ꡬ (λΉ λ₯Έ HMR)
TanStack Query          μ„œλ²„ μƒνƒœ 관리 & 캐싱
Zustand                 ν΄λΌμ΄μ–ΈνŠΈ μ „μ—­ μƒνƒœ
React Router v6         λΌμš°νŒ…
Axios                   HTTP ν΄λΌμ΄μ–ΈνŠΈ
Tailwind CSS            μœ ν‹Έλ¦¬ν‹° 기반 μŠ€νƒ€μΌλ§
Chart.js                데이터 μ‹œκ°ν™”
Lucide React            μ•„μ΄μ½˜

Backend (API Server)

FastAPI 0.115+          비동기 REST API ν”„λ ˆμž„μ›Œν¬
Python 3.10+            ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄
Uvicorn                 ASGI μ„œλ²„
SQLite 3                둜컬 λ°μ΄ν„°λ² μ΄μŠ€
Pydantic 2.x            데이터 검증 & 직렬화
httpx                   비동기 HTTP ν΄λΌμ΄μ–ΈνŠΈ
python-jose             JWT 토큰

Data Pipeline

FastAPI 0.115+          비동기 API μ„œλ²„
Python 3.13             BGE Reranker μ˜μ‘΄μ„±
LangGraph               StateGraph μ›Œν¬ν”Œλ‘œμš°
LangChain               LLM Chains
OpenAI gpt-4o-mini      쿼리 뢄석 & κ²°κ³Ό μš”μ•½
ChromaDB                벑터 λ°μ΄ν„°λ² μ΄μŠ€
OpenAI text-embedding   μž„λ² λ”© (1536-dim)
BGE Reranker v2-m3      μž¬μˆœμœ„ν™” (둜컬, 무료)
sentence-transformers   BGE λͺ¨λΈ λ‘œλ”

Database

SQLite                  ꡬ쑰화 데이터 (111MB)
  - 36,113λͺ… νŒ¨λ„ 정보
  - 636,248건 μ„€λ¬Έ 응닡
  - 검색 μΊμ‹œ & νžˆμŠ€ν† λ¦¬

ChromaDB                벑터 검색 (~1.5GB)
  - 44개 질문 μž„λ² λ”©
  - ~202K개 λ‹΅λ³€ μž„λ² λ”©

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

AllIsWell/
β”œβ”€β”€ Frontend/                           # React ν”„λ‘ νŠΈμ—”λ“œ
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ api/                        # API 톡신 λ ˆμ΄μ–΄
β”‚   β”‚   β”‚   β”œβ”€β”€ auth.js
β”‚   β”‚   β”‚   β”œβ”€β”€ search.js
β”‚   β”‚   β”‚   β”œβ”€β”€ history.js
β”‚   β”‚   β”‚   └── library.js
β”‚   β”‚   β”œβ”€β”€ components/                 # μž¬μ‚¬μš© μ»΄ν¬λ„ŒνŠΈ
β”‚   β”‚   β”‚   β”œβ”€β”€ common/
β”‚   β”‚   β”‚   β”œβ”€β”€ SearchResult/
β”‚   β”‚   β”‚   β”œβ”€β”€ panelDetail/
β”‚   β”‚   β”‚   └── ...
β”‚   β”‚   β”œβ”€β”€ pages/                      # νŽ˜μ΄μ§€
β”‚   β”‚   β”‚   β”œβ”€β”€ Login/
β”‚   β”‚   β”‚   β”œβ”€β”€ Main/
β”‚   β”‚   β”‚   β”œβ”€β”€ SearchResult/
β”‚   β”‚   β”‚   └── History/
β”‚   β”‚   β”œβ”€β”€ hooks/                      # μ»€μŠ€ν…€ ν›…
β”‚   β”‚   └── utils/                      # μœ ν‹Έλ¦¬ν‹°
β”‚   β”œβ”€β”€ package.json
β”‚   └── vite.config.js
β”‚
β”œβ”€β”€ Backend/                            # FastAPI API μ„œλ²„
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   └── app/
β”‚   β”‚       β”œβ”€β”€ db/                     # λ°μ΄ν„°λ² μ΄μŠ€
β”‚   β”‚       β”œβ”€β”€ routers/                # API λΌμš°ν„°
β”‚   β”‚       β”‚   β”œβ”€β”€ auth.py
β”‚   β”‚       β”‚   β”œβ”€β”€ search.py
β”‚   β”‚       β”‚   β”œβ”€β”€ history_api.py
β”‚   β”‚       β”‚   └── library_api.py
β”‚   β”‚       └── schemas/                # Pydantic μŠ€ν‚€λ§ˆ
β”‚   β”œβ”€β”€ databases/
β”‚   β”‚   └── main.db
β”‚   β”œβ”€β”€ main.py
β”‚   └── requirements.txt
β”‚
└── DataPipeline/                       # FastAPI + LangGraph
    β”œβ”€β”€ src/
    β”‚   β”œβ”€β”€ pipeline_v4/                # 메인 νŒŒμ΄ν”„λΌμΈ
    β”‚   β”‚   β”œβ”€β”€ pipeline.py
    β”‚   β”‚   β”œβ”€β”€ graph.py                # LangGraph StateGraph
    β”‚   β”‚   β”œβ”€β”€ nodes.py                # 6개 λ…Έλ“œ
    β”‚   β”‚   β”œβ”€β”€ chains.py               # LLM Chains
    β”‚   β”‚   β”œβ”€β”€ retrievers.py           # 3-Tier 검색
    β”‚   β”‚   └── config.py
    β”‚   β”œβ”€β”€ api/
    β”‚   β”‚   └── question_first_search.py
    β”‚   β”œβ”€β”€ database/
    β”‚   β”œβ”€β”€ embeddings/
    β”‚   β”‚   β”œβ”€β”€ embedding_service.py
    β”‚   β”‚   β”œβ”€β”€ vector_db.py
    β”‚   β”‚   └── reranker.py             # BGE Reranker
    β”‚   └── extractors/
    β”œβ”€β”€ databases/
    β”‚   β”œβ”€β”€ PersonaSurveyData.db        # SQLite (111MB)
    β”‚   β”œβ”€β”€ chroma_db_questions/        # 질문 벑터
    β”‚   └── chroma_db_answers/          # λ‹΅λ³€ 벑터
    β”œβ”€β”€ scripts/                        # DB 생성 슀크립트
    └── requirements.txt

πŸš€ λΉ λ₯Έ μ‹œμž‘

사전 μš”κ΅¬μ‚¬ν•­

Node.js 18.x 이상 Python 3.10 이상 (νŒŒμ΄ν”„λΌμΈμ€ 3.13 ꢌμž₯) OpenAI API Key Gemini API Key

1️⃣ Frontend μ„€μ • 및 μ‹€ν–‰

cd Frontend

# μ˜μ‘΄μ„± μ„€μΉ˜
npm install

# ν™˜κ²½ λ³€μˆ˜ μ„€μ •
echo "VITE_API_URL=http://localhost:5001" > .env

# 개발 μ„œλ²„ μ‹€ν–‰
npm run dev
# β†’ http://localhost:5173

2️⃣ Backend (API Server) μ„€μ • 및 μ‹€ν–‰

cd Backend

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

# μ˜μ‘΄μ„± μ„€μΉ˜
pip install -r requirements.txt

# λ°μ΄ν„°λ² μ΄μŠ€ μ΄ˆκΈ°ν™”
python create_db_tables.py

# μ„œλ²„ μ‹€ν–‰
python main.py
# β†’ http://localhost:5001
# Swagger UI: http://localhost:5001/docs

3️⃣ Data Pipeline μ„€μ • 및 μ‹€ν–‰

cd DataPipeline

# Python 3.13 κ°€μƒν™˜κ²½ (BGE Reranker ν•„μš”)
python3.13 -m venv .venv313
source .venv313/bin/activate

# μ˜μ‘΄μ„± μ„€μΉ˜
pip install -r requirements.txt

# OpenAI API ν‚€ μ„€μ •
export OPENAI_API_KEY='your-api-key'

# 데이터 μ „μ²˜λ¦¬ (μΌνšŒμ„±)
cd scripts/
python preprocess_only.py
python create_question_embeddings.py
python create_answer_embeddings.py
cd ..

# νŒŒμ΄ν”„λΌμΈ μ„œλ²„ μ‹€ν–‰
python run_pipeline.py
# β†’ http://localhost:8000

4️⃣ 전체 μ‹œμŠ€ν…œ μ‹€ν–‰ μˆœμ„œ

# Terminal 1: Data Pipeline
cd DataPipeline
source .venv313/bin/activate
python run_pipeline.py

# Terminal 2: API Server
cd Backend
source venv/bin/activate
python main.py

# Terminal 3: Frontend
cd Frontend
npm run dev

접속: http://localhost:5173

πŸ“Š μ„±λŠ₯ 및 λΉ„μš©

데이터 규λͺ¨

  • νŒ¨λ„: ~3만 7천λͺ…
  • 질문: ~60개
  • 응닡: ~64만건
  • 페λ₯΄μ†Œλ‚˜: ~3만 7천개
  • λ°μ΄ν„°λ² μ΄μŠ€: 111MB (SQLite) + ~1.5GB (ChromaDB)

검색 μ„±λŠ₯

검색 μ„±λŠ₯

검색 μœ ν˜• μ‚¬μš© Tier 처리 μ‹œκ°„ μ„€λͺ…
인ꡬ톡계 검색 Tier 1 ~50ms ⚑ SQL WHERE (성별, λ‚˜μ΄, μ§€μ—­)
ꡬ쑰화 ν‚€μ›Œλ“œ Tier 1+2 ~100ms ⚑ SQL + LIKE (직업, ν•™λ ₯, μ†Œλ“)
의미둠적 검색 (GPU) Full Pipeline ~17초 벑터 검색 + BGE Reranker
의미둠적 검색 (CPU) Full Pipeline ~2.5λΆ„ 벑터 검색 + BGE Reranker

μ°Έκ³ : λŒ€λΆ€λΆ„μ˜ μΏΌλ¦¬λŠ” Tier 1-2만 μ‚¬μš©ν•˜μ—¬ 1초 이내 응닡

λΉ„μš© (OpenAI API) 초기 μ„€μ • (μΌνšŒμ„±)

질문 μž„λ² λ”© : ~$0.0001 λ‹΅λ³€ μž„λ² λ”© : ~$0.003 총: ~$0.003 (1원 미만)

검색 λΉ„μš© (쿼리당)

LLM 쿼리 뢄석: ~$0.0005 쿼리 μž„λ² λ”©: ~$0.00002 LLM κ²°κ³Ό μš”μ•½: ~$0.0005 BGE Reranker: $0 (둜컬 λͺ¨λΈ) 총: ~$0.001/검색

μ›”κ°„ μ‚¬μš© μ˜ˆμƒ

1,000회 검색/μ›”: ~$1 10,000회 검색/μ›”: ~$10

πŸ’Ό κΈ°λŒ€ 효과

경제적 츑면

1. 생산성 ν–₯상 & λΉ„μš© 절감

  • λ³΅μž‘ν•œ SQL μž‘μ„± λΆˆν•„μš” β†’ 데이터 뢄석 인λ ₯ μ‹œκ°„ 절감
  • μ‹ μ†ν•œ μΈμ‚¬μ΄νŠΈ λ„μΆœ β†’ μ‹œμž₯ λŒ€μ‘ 속도 ν–₯상
  • 반볡 μž‘μ—… μžλ™ν™” β†’ IT μžμ› μ†Œλͺ¨ μ΅œμ†Œν™”

2. λΉ„μ¦ˆλ‹ˆμŠ€ μ„±κ³Ό & 맀좜 μ¦λŒ€

  • νƒ€κ²Ÿ λ§ˆμΌ€νŒ… 정확도 ν–₯상 β†’ λ§ˆμΌ€νŒ… ROI κ·ΉλŒ€ν™”
  • κ°œμΈν™”λœ 금육/의료 μ„œλΉ„μŠ€ β†’ 고객 λ§Œμ‘±λ„ & 객단가 μƒμŠΉ
  • κ³ ν’ˆμ§ˆ μ˜μ‚¬κ²°μ • 지원 β†’ 사업 성곡λ₯  ν–₯상

μ‚¬νšŒμ  μΈ‘λ©΄

1. 연ꡬ & 기술 ν˜μ‹  가속화

  • 연ꡬ 생산성 제고 (λ…Όλ¬Έ, νŠΉν—ˆ, μž„μƒ λŒ€μƒμž λͺ¨μ§‘)
  • λ²”μš© ν”Œλž«νΌ ν™•μž₯ (λ§ˆμΌ€νŒ…, 금육, 의료, 곡곡)

2. 곡곡 μ„œλΉ„μŠ€ ν’ˆμ§ˆ κ°œμ„ 

  • μ •ν™•ν•œ μ •μ±… 수립 지원
  • μ‹œμŠ€ν…œ 신뒰도 & μ‚¬μš©μž λ§Œμ‘±λ„ ν–₯상

3. 데이터 λ¦¬ν„°λŸ¬μ‹œ μž₯λ²½ μ™„ν™”

  • SQL 지식 없이 μžμ—°μ–΄λ‘œ 데이터 탐색
  • 쑰직 μ „λ°˜μ˜ 데이터 기반 λ¬Έν™” ν™•μ‚°

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

  • 이 ν”„λ‘œμ νŠΈλŠ” ν•œμ„±λŒ€ν•™κ΅ 기업연계 SWμΊ‘μŠ€ν†€λ””μžμΈ μˆ˜μ—…μ—μ„œ μ§„ν–‰λ˜μ—ˆμŠ΅λ‹ˆλ‹€. [GitHub]

Popular repositories Loading

  1. .github .github Public

Repositories

Showing 1 of 1 repositories

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loading…

Most used topics

Loading…