๊ฐ์ธํ๋ AI ๋ช ์ธ ์ถ์ฒ ์๋น์ค
Solar Pro API + ์๋ฒ ๋ฉ ๊ธฐ๋ฐ ์ ์ฌ๋ ๊ฒ์์ผ๋ก ์ฌ์ฉ์ ๋ง์ถค ๋ช ์ธ์ ์ ๊ณตํฉ๋๋ค.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐ Frontend (React + TypeScript) โ
โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โ
โ โ Chat UI โ โ Quote Display โ โ Result Page โ โ
โ โ โ โ โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ HTTP API
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐ค Backend (Flask + Solar API) โ
โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โ
โ โ Chat Logic โ โ LLM Service โ โ Quote Search โ โ
โ โ (4-Step) โ โ (Solar Pro) โ โ (Embedding) โ โ
โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐ฅ Upstage API โ โ ๐ง Embedding System โ
โ โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Solar Pro Model โโ โ โ SentenceTransformer โ โ
โ โ (Conversational AI) โโ โ โ (Multilingual MPNET) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ FAISS Vector DB โ โ
โ โ (Cosine Similarity) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Quotes Dataset โ โ
โ โ (500K+ with Insights) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
graph TD
A[๐ค ์ฌ์ฉ์ ์ ์] --> B[๐ฌ 1๋จ๊ณ: ์ธ์ฌ/์ํฉ ํ์
]
B --> C[๐ค 2๋จ๊ณ: ๊ฐ์ ํ์]
C --> D[โค๏ธ 3๋จ๊ณ: ๊ณต๊ฐ & ์๋ก]
D --> E[โจ 4๋จ๊ณ: ๋ช
์ธ ์์ฑ ํธ๋ฆฌ๊ฑฐ]
E --> F[๐ง ๋ํ ์ปจํ
์คํธ ๋ถ์]
F --> G[๐ ์๋ฒ ๋ฉ ๊ธฐ๋ฐ ์ ์ฌ๋ ๊ฒ์]
G --> H[๐ ๊ฐ์ธํ๋ ๋ช
์ธ ์ ๊ณต]
H --> I[โ
๋ช
์ธ ์๋ฝ]
H --> J[๐ ๋ค๋ฅธ ๋ช
์ธ ์์ฒญ]
I --> K[๐ฏ ๊ฒฐ๊ณผ ํ์ด์ง]
J --> G
graph LR
A[๐ค ์ฌ์ฉ์ ๋ํ] --> B[๐ ์ปจํ
์คํธ ์ถ์ถ]
B --> C[๐ค SentenceTransformer]
C --> D[๐ ๋ฒกํฐ ์๋ฒ ๋ฉ]
D --> E[๐ FAISS ๊ฒ์]
E --> F[๐ ์ ์ฌ ๋ช
์ธ ๋ฐ๊ฒฌ]
F --> G[โจ ๊ฐ์ธํ๋ ์ถ์ฒ]
subgraph "๐๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค"
H[500K+ ๋ช
์ธ]
I[์ธ์ฌ์ดํธ ์ถ์ถ]
J[๋ฒกํฐ ์ธ๋ฑ์ค]
end
E --> J
J --> H
H --> I
| ์์ญ | ๊ธฐ์ ์คํ | ์์ธ |
|---|---|---|
| ๐จ Frontend | React 19 + TypeScript | SPA, styled-components, React Router |
| ๐ค Backend | Flask + Python | RESTful API, CORS ์ง์ |
| ๐ง LLM | Upstage Solar Pro | ํ๊ตญ์ด ์ต์ ํ, ๋ํํ AI |
| ๐ ๊ฒ์ | SentenceTransformer + FAISS | ๋ค๊ตญ์ด ์๋ฒ ๋ฉ, ์ฝ์ฌ์ธ ์ ์ฌ๋ |
| ๐ ๋ฐ์ดํฐ | 500K+ ๋ช ์ธ + ์ธ์ฌ์ดํธ | GPT ๊ธฐ๋ฐ ์๋ฏธ ์ถ์ถ |
| ๐พ ๋ฒกํฐDB | FAISS IndexFlatIP | 29MB ์ธ๋ฑ์ค, GPU ๊ฐ์ |
- Python 3.8+ (3.11 ๊ถ์ฅ)
- Node.js 16+ (18 LTS ๊ถ์ฅ)
- Upstage API Key (https://console.upstage.ai์์ ๋ฐ๊ธ)
ํ์๋ค์ด ์์ฃผ ๊ฒช๋ ๋ฌธ์ ๋ค์ ๋ฏธ๋ฆฌ ๋ฐฉ์งํ๊ธฐ ์ํ ๊ฐ์ด๋์ ๋๋ค. ์์๋๋ก ๋ฐ๋ผํ์๋ฉด ๋ฌธ์ ์์ด ์คํ๋ฉ๋๋ค.
git clone https://github.com/your-repo/Perfect_Quote-1.git
cd Perfect_Quote-1# ๊ฐ์ํ๊ฒฝ ์์ฑ (๊ถ์ฅ)
python -m venv .venv
# ๊ฐ์ํ๊ฒฝ ํ์ฑํ
# Windows:
.venv\Scripts\activate
# macOS/Linux:
source .venv/bin/activate
# ํจํค์ง ์ค์น
pip install -r requirements.txt# ์๋ฒ ๋ฉ ๋ชจ๋ธ ์ฌ์ ๋ค์ด๋ก๋ (์ฝ 2-3๋ถ ์์)
python download_models.pyโ ์ถ๋ ฅ ์์:
๐ ์๋ฒ ๋ฉ ๋ชจ๋ธ ๋ค์ด๋ก๋ ์์
1. sentence-transformers/all-MiniLM-L6-v2
โ
๋ค์ด๋ก๋ ์๋ฃ (15.0์ด)
2. sentence-transformers/paraphrase-multilingual-mpnet-base-v2
โ
๋ค์ด๋ก๋ ์๋ฃ (13.0์ด)
๐ ๋ชจ๋ธ ๋ค์ด๋ก๋ ์๋ฃ!
# .env ํ์ผ ์์ฑ (Windows PowerShell)
"UPSTAGE_API_KEY=your_upstage_api_key_here" | Out-File -FilePath .env -Encoding ascii
# ๋๋ ์๋์ผ๋ก .env ํ์ผ ์์ฑํ๊ณ ๋ค์ ๋ด์ฉ ์
๋ ฅ:.env ํ์ผ ๋ด์ฉ:
UPSTAGE_API_KEY=your_upstage_api_key_here
FLASK_ENV=development
FLASK_DEBUG=Falsenode --version
npm --versionโ ๋ง์ฝ "๋ช ๋ น์ด๋ฅผ ์ฐพ์ ์ ์๋ค" ์ค๋ฅ ๋ฐ์ ์:
Windows:
- Node.js ๊ณต์ ์ฌ์ดํธ์์ LTS ๋ฒ์ ๋ค์ด๋ก๋
- ๋๋
winget install OpenJS.NodeJS(winget ์ฌ์ฉ ์)
macOS:
brew install nodenpm installpython app.pyโ ์ฑ๊ณต ์ ์ถ๋ ฅ:
๐ Enhanced Solar API + LangGraph ์๋ฒ ์์ ์ค...
๐ก ํฌํธ: 3001
๐ฅ ๋ชจ๋ธ: Solar Pro API + LangGraph StateGraph
๐ง ์๋ฒ ๋ฉ: Enhanced SentenceTransformer + FAISS
โจ LangGraph ๊ธฐ๋ฐ ๊ฐ์ธํ๋ ๋ช
์ธ ์ถ์ฒ ์์คํ
!
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:3001
์ ํฐ๋ฏธ๋์์:
npm start- ๐ ์น ์ฑ: http://localhost:3000
- ๐ค API ์๋ฒ: http://localhost:3001
- ๐ ํฌ์ค์ฒดํฌ: http://localhost:3001/api/health
# PowerShell์์ ํ
์คํธ
Invoke-WebRequest -Uri "http://localhost:3001/api/health" -Method GET
# ๋๋ ๋ธ๋ผ์ฐ์ ์์ http://localhost:3001/api/health ์ ์โ ์ ์ ์๋ต:
{
"status": "OK",
"model": "Solar Pro API + LangGraph",
"embedding_system": "โ
ACTIVE",
"message": "๐ Solar API + LangGraph + ๊ฐ์ธํ ๋ช
์ธ ์ถ์ฒ ์์คํ
์์ ํ์ฑํ!"
}UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0
โ ํด๊ฒฐ ๋ฐฉ๋ฒ:
# ๊ธฐ์กด .env ํ์ผ ์ญ์
Remove-Item .env -Force
# ์ฌ๋ฐ๋ฅธ ์ธ์ฝ๋ฉ์ผ๋ก ์ฌ์์ฑ
"UPSTAGE_API_KEY=your_api_key_here" | Out-File -FilePath .env -Encoding asciiThe term 'node' is not recognized as the name of a cmdlet
โ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- Node.js ์ค์น: https://nodejs.org์์ LTS ๋ฒ์ ๋ค์ด๋ก๋
- ์ค์น ํ์ธ: PowerShell ์ฌ์์ ํ
node --version์คํ - ํ๊ฒฝ๋ณ์ ํ์ธ: ์์คํ PATH์ Node.js ๊ฒฝ๋ก๊ฐ ์๋์ง ํ์ธ
ERROR: Could not find a version that satisfies the requirement langgraph==0.2.87
โ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ์ด๋ฏธ ์์ ๋
requirements.txt๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ต์ ๋ฒ์ ์์๋ ๋ฌธ์ ์์ - ๋ง์ฝ ๋ฐ์ ์:
pip install --upgrade pipํ ์ฌ์๋
ConnectionError: HTTPSConnectionPool
โ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ์ธํฐ๋ท ์ฐ๊ฒฐ ํ์ธ
- ๋ฐฉํ๋ฒฝ/ํ๋ก์ ์ค์ ํ์ธ
- VPN ์ฐ๊ฒฐ ์ ์ผ์ ํด์
- ์ฌ์๋:
python download_models.py
์๊ฒฉ ์๋ฒ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค
โ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ๋ฐฑ์๋ ์๋ฒ ์คํ ํ์ธ:
python app.py๊ฐ ์ ์ ์คํ ์ค์ธ์ง ํ์ธ - ํฌํธ ์ถฉ๋ ํ์ธ: 3001 ํฌํธ๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์์ ์ฌ์ฉ ์ค์ธ์ง ํ์ธ
netstat -ano | findstr :3001 - ๋ฐฉํ๋ฒฝ ํด์ : Windows Defender ๋ฐฉํ๋ฒฝ์์ Python ํ์ฉ
401 Unauthorized
โ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- API ํค ํ์ธ: Upstage Console์์ ์ ํจํ ํค์ธ์ง ํ์ธ
- .env ํ์ผ ํ์ธ: API ํค๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์๋์ง ํ์ธ
- ์๋ฒ ์ฌ์์: API ํค ๋ณ๊ฒฝ ํ
python app.py์ฌ์์
"embedding_system": "โ ๏ธ FALLBACK"
โ ์ ์ ๋์์:
- ๋ก์ปฌ ๋ชจ๋ธ์ด ๋ก๋๋์ง ์์๋ ๊ธฐ๋ณธ ๋ช ์ธ ์์คํ ์ผ๋ก ์๋
- ์ฑ๋ฅ ํฅ์์ ์ํด
python download_models.py์คํ ๊ถ์ฅ
# Python ๋ฒ์ ํ์ธ
python --version
# ํจํค์ง ์ค์น ํ์ธ
pip list | findstr -i "flask langchain upstage"
# Node.js ํ์ธ
node --version && npm --version
# .env ํ์ผ ํ์ธ
Get-Content .env# ๋ฐฑ์๋ ํฌ์ค์ฒดํฌ
Invoke-WebRequest -Uri "http://localhost:3001/api/health"
# ํ๋ก ํธ์๋ ํ์ธ (๋ธ๋ผ์ฐ์ ์์)
# http://localhost:3000# Python ์๋ฒ ๋ก๊ทธ (์คํ ์ ํฐ๋ฏธ๋์์ ํ์ธ)
python app.py
# ์์ธํ ์ค๋ฅ ๋ก๊ทธ๊ฐ ํ์ํ ๊ฒฝ์ฐ
python app.py --debug๋ฌธ์ ๋ฐ์ ์ ๋ค์ ์ ๋ณด๋ฅผ ํจ๊ป ์ ๊ณตํด์ฃผ์ธ์:
- ์ด์์ฒด์ : Windows/macOS/Linux ๋ฒ์
- Python ๋ฒ์ :
python --version๊ฒฐ๊ณผ - Node.js ๋ฒ์ :
node --version๊ฒฐ๊ณผ - ์ค๋ฅ ๋ฉ์์ง: ์ ํํ ์๋ฌ ํ ์คํธ
- ์คํ ๋จ๊ณ: ์ด๋ ๋จ๊ณ์์ ๋ฌธ์ ๋ฐ์ํ๋์ง
- ํ๊ฒฝ ์ค์ : .env ํ์ผ ์ค์ ์ฌ๋ถ (API ํค ์ ์ธ)
- Base URL:
http://localhost:3001/api - Content-Type:
application/json - CORS: ํ์ฑํ
POST /api/chat/send
Content-Type: application/json
{
"userId": "string",
"threadNum": "string",
"content": "string",
"timestamp": "string"
}์๋ต (4๋จ๊ณ ์๋ฃ ์ ๋ช ์ธ ํฌํจ)
{
"userId": "string",
"threadNum": "string",
"timestamp": "string",
"status": "completed",
"content": "AI ์๋ต",
"model": "Solar Pro",
"embedding_system": "FAISS",
"quote": {
"id": "string",
"text": "๋ช
์ธ ๋ด์ฉ",
"author": "์ ์",
"category": "์นดํ
๊ณ ๋ฆฌ",
"similarity": 0.8542,
"method": "embedding_search"
}
}GET /api/chat/status?userId={userId}&threadNum={threadNum}- ์๋ณธ ๋ฐ์ดํฐ: 500K+ ์์ด ๋ช ์ธ (Kaggle)
- ์ธ์ฌ์ดํธ ์ถ์ถ: GPT-4๋ฅผ ํตํ ํต์ฌ ์๋ฏธ ๋ถ์ (30-45๋จ์ด)
- ์๋ฒ ๋ฉ ์์ฑ: SentenceTransformer ๋ค๊ตญ์ด ๋ชจ๋ธ ์ฌ์ฉ
- ๋ฒกํฐ ์ธ๋ฑ์ฑ: FAISS ์ฝ์ฌ์ธ ์ ์ฌ๋ ์ธ๋ฑ์ค ๊ตฌ์ถ
- ์ค์๊ฐ ๊ฒ์: ์ฌ์ฉ์ ๋ํ ์ปจํ ์คํธ ๊ธฐ๋ฐ ์ ์ฌ๋ ๊ฒ์
- ๋ชจ๋ธ:
paraphrase-multilingual-mpnet-base-v2 - ์ฐจ์: 768์ฐจ์ ๋ฒกํฐ
- ์ธ๋ฑ์ค: FAISS IndexFlatIP (๋ด์ ๊ธฐ๋ฐ)
- ์ ๊ทํ: L2 ์ ๊ทํ๋ก ์ฝ์ฌ์ธ ์ ์ฌ๋ ๊ณ์ฐ
- ์๋: GPU ๊ฐ์ (์ฌ์ฉ ๊ฐ๋ฅ ์)
quote-generator-v2/
โโโ ๐ค Backend
โ โโโ app.py # ๋ฉ์ธ Flask ์๋ฒ
โ โโโ utils/system_prompt.py # LLM ์์คํ
ํ๋กฌํํธ
โ โโโ requirements.txt # Python ์์กด์ฑ
โโโ ๐จ Frontend
โ โโโ src/
โ โ โโโ components/ # React ์ปดํฌ๋ํธ
โ โ โโโ pages/ # ํ์ด์ง ์ปดํฌ๋ํธ
โ โ โโโ hooks/ # ์ปค์คํ
ํ
โ โ โโโ services/api.ts # API ํต์
โ โโโ package.json # Node.js ์์กด์ฑ
โโโ ๐ง AI/ML
โ โโโ quote_embedding/ # ์๋ฒ ๋ฉ ์์ฑ ์คํฌ๋ฆฝํธ
โ โโโ vectorDB/FAISS/ # FAISS ์ธ๋ฑ์ค (29MB)
โ โโโ Dataset/ # ๋ช
์ธ ๋ฐ์ดํฐ์
โโโ ๐ ๋ถ์๋๊ตฌ
โโโ EDA"es_selection/ # ๋ฐ์ดํฐ ๋ถ์
โโโ Insight_extractor_with_gpt_API/ # GPT ์ธ์ฌ์ดํธ ์ถ์ถ
- Solar Pro API: ํ๊ตญ์ด ์ต์ ํ๋ ๋ํํ LLM
- ์ปจํ ์คํธ ์ธ์: 4๋จ๊ณ ๋ํ ํ์คํ ๋ฆฌ ๊ธฐ๋ฐ ๋ถ์
- ๊ฐ์ ์ดํด: ์ฌ์ฉ์์ ๊ฐ์ ์ํ์ ๋ง๋ ์๋ต
- ์๋ฒ ๋ฉ ๊ธฐ๋ฐ: ์๋ฏธ์ ์ ์ฌ๋ ๊ฒ์
- 500K+ ๋ฐ์ดํฐ์ : ๋ฐฉ๋ํ ๋ช ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์ค์๊ฐ ๊ฒ์: FAISS ๊ณ ์ ๋ฒกํฐ ๊ฒ์
- ํด๋ฐฑ ์์คํ : ์์ ์ ์ธ ์๋น์ค ์ ๊ณต
- ์์ฐ์ค๋ฌ์ด ๋ํ: ์น๊ตฌ ๊ฐ์ AI ์ฑ๋ด
- ์ง๊ด์ UI: React ๊ธฐ๋ฐ ๋ฐ์ํ ๋์์ธ
- ์ค์๊ฐ ์๋ต: WebSocket ์ง์ ์ค๋น
- ๋ค๊ตญ์ด ์ง์: ํ๊ตญ์ด/์์ด ๋์ ์ง์
- ์คํธ๋ฆฌ๋ฐ API: Server-Sent Events ๊ตฌํ
- ์ฌ์ฉ์ ์ธ์ฆ: JWT ๊ธฐ๋ฐ ์ธ์ ๊ด๋ฆฌ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค: PostgreSQL/MongoDB ์ฐ๋
- ์บ์ฑ: Redis ๊ธฐ๋ฐ ์๋ต ์บ์ฑ
- ๋ชจ๋ํฐ๋ง: Prometheus + Grafana
# ๋ฐฑ์๋ ํ
์คํธ
python -m pytest tests/
# ํ๋ก ํธ์๋ ํ
์คํธ
npm test
# E2E ํ
์คํธ
npm run test:e2e# Docker ๋น๋
docker-compose up -d
# ๋๋ ๊ฐ๋ณ ๋ฐฐํฌ
# Backend: Heroku/AWS Lambda
# Frontend: Vercel/Netlify
# Vector DB: AWS S3/GCS| ๋ฉํธ๋ฆญ | ๋ชฉํ | ํ์ฌ |
|---|---|---|
| ์๋ต ์๊ฐ | <2์ด | ~1.5์ด |
| ๋ช ์ธ ์ ํ๋ | >80% | ~85% |
| ๋์ ์ฌ์ฉ์ | 100+ | ํ ์คํธ ์ค |
| ์์คํ ๊ฐ์ฉ์ฑ | 99%+ | ๊ฐ๋ฐ ๋จ๊ณ |
- ์ฌ์ฉ์ ํผ๋๋ฐฑ ์์คํ
- ๋ช ์ธ ์นดํ ๊ณ ๋ฆฌ ํํฐ๋ง
- ๋ํ ํ์คํ ๋ฆฌ ์ ์ฅ
- ๋ชจ๋ฐ์ผ ๋ฐ์ํ ์ต์ ํ
- ๋ค๊ตญ์ด ๋ช ์ธ ๋ฐ์ดํฐ ํ์ฅ
- ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ์๋ต
- ์์ ๊ณต์ ๊ธฐ๋ฅ
- ๊ฐ์ธํ ๋์๋ณด๋
- ์์ฑ ๋ํ ์ง์
- ์ด๋ฏธ์ง ๋ช ์ธ ์์ฑ
- ์ปค๋ฎค๋ํฐ ๊ธฐ๋ฅ
- ๋ชจ๋ฐ์ผ ์ฑ ์ถ์
ํ์๋ค์ ์ํ ํ ๋์ ๋ณด๋ ์ฒดํฌ๋ฆฌ์คํธ์ ๋๋ค:
- Python 3.8+ ์ค์น๋จ
- Node.js 16+ ์ค์น๋จ
- Upstage API ํค ํ๋ณด
- Git ํด๋ก ์๋ฃ
-
pip install -r requirements.txt์คํ -
python download_models.py์คํ (๋ชจ๋ธ ๋ค์ด๋ก๋) -
.envํ์ผ ์์ฑ ๋ฐ API ํค ์ค์ -
npm install์คํ
-
python app.pyโ ๋ฐฑ์๋ ์๋ฒ ์คํ๋จ -
npm startโ ํ๋ก ํธ์๋ ์๋ฒ ์คํ๋จ - Health check API ์๋ต ์ ์
- ์น ๋ธ๋ผ์ฐ์ ์์ ์ ์ ๊ฐ๋ฅ
- ์ฑํ ๊ธฐ๋ฅ ๋์
- AI ์๋ต ์์ฑ๋จ
- ๋ช ์ธ ์ถ์ฒ ์์คํ ์๋
ํ์๋ค์ด ์์์ผ ํ ํต์ฌ ํ์ผ๋ค์ ๋๋ค:
app.py # ๋ฉ์ธ Flask ์๋ฒ (๊ฐ์ฅ ์ค์)
โโโ LangGraph ์ํฌํ๋ก์ฐ # Solar API + ๋ํ ๋ถ์
โโโ ์๋ฒ ๋ฉ ๊ฒ์ ์์คํ
# FAISS + SentenceTransformer
โโโ RESTful API ์๋ํฌ์ธํธ # /api/chat/send, /api/health
utils/
โโโ system_prompt.py # AI ์์คํ
ํ๋กฌํํธ
โโโ analysis_prompt.py # ๋ํ ๋ถ์ ํ๋กฌํํธ
โโโ quote_retriever.py # ๋ช
์ธ ๊ฒ์ ์์ง
โโโ chatbot_utils.py # ์ฑ๋ด ์ ํธ๋ฆฌํฐ
requirements.txt # Python ํจํค์ง ์์กด์ฑ
download_models.py # ์๋ฒ ๋ฉ ๋ชจ๋ธ ๋ค์ด๋ก๋ ์คํฌ๋ฆฝํธ
.env # ํ๊ฒฝ ๋ณ์ (API ํค ๋ฑ)
src/
โโโ components/ # ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ
โ โโโ Chat/ # ์ฑํ
๊ด๋ จ ์ปดํฌ๋ํธ
โ โโโ Common/ # ๊ณตํต ์ปดํฌ๋ํธ
โ โโโ Layout/ # ๋ ์ด์์ ์ปดํฌ๋ํธ
โโโ pages/ # ํ์ด์ง ์ปดํฌ๋ํธ
โโโ hooks/ # ์ปค์คํ
React ํ
โโโ services/api.ts # ๋ฐฑ์๋ API ํต์
โโโ types/ # TypeScript ํ์
์ ์
package.json # Node.js ํจํค์ง ์์กด์ฑ
Dataset/
โโโ quotes_with_insights_combined.csv # 500K+ ๋ช
์ธ ๋ฐ์ดํฐ์
โโโ sampled_quotes.csv # ์ํ ๋ฐ์ดํฐ
vectorDB/FAISS/
โโโ quotes_cosine_faiss.index # FAISS ๋ฒกํฐ ์ธ๋ฑ์ค (29MB)
โโโ faiss_cosine.py # FAISS ๊ฒ์ ๋ก์ง
models/sentence-transformers/ # ๋ก์ปฌ ์๋ฒ ๋ฉ ๋ชจ๋ธ (๋ค์ด๋ก๋๋จ)
โโโ all-MiniLM-L6-v2/ # ๊ฒฝ๋ ๋ชจ๋ธ
โโโ paraphrase-multilingual-mpnet-base-v2/ # ๋ค๊ตญ์ด ๋ชจ๋ธ
# 1. ์ต์ ์ฝ๋ ๋๊ธฐํ
git pull origin main
# 2. ๊ธฐ๋ฅ ๋ธ๋์น ์์ฑ
git checkout -b feature/your-feature-name
# 3. ๊ฐ๋ฐ ๋ฐ ์ปค๋ฐ
git add .
git commit -m "feat: ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ"
# 4. ํธ์ ๋ฐ PR ์์ฑ
git push origin feature/your-feature-name
# GitHub์์ Pull Request ์์ฑfeat:์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐfix:๋ฒ๊ทธ ์์ docs:๋ฌธ์ ์์ style:์ฝ๋ ์คํ์ผ ๋ณ๊ฒฝrefactor:์ฝ๋ ๋ฆฌํฉํ ๋งtest:ํ ์คํธ ์ถ๊ฐ/์์
- ๋ฐฑ์๋:
app.py,utils/ํด๋ ๋ด๋น - ํ๋ก ํธ์๋:
src/ํด๋ ๋ด๋น - AI/ML:
vectorDB/, ๋ชจ๋ธ ์ต์ ํ ๋ด๋น - DevOps: ๋ฐฐํฌ, ํ๊ฒฝ์ค์ , ๋ฌธ์ํ ๋ด๋น
- ์ด์ ์์ฑ: GitHub Issues์์ ์์ ๋ด์ฉ ๋ช ์
- ๋ธ๋์น ์์ฑ: ์ด์ ๋ฒํธ๋ฅผ ํฌํจํ ๋ธ๋์น๋ช ์ฌ์ฉ
- ๊ฐ๋ฐ: ๋ก์ปฌ์์ ๊ธฐ๋ฅ ๊ฐ๋ฐ ๋ฐ ํ ์คํธ
- PR ์์ฑ: ์์ธํ ์ค๋ช ๊ณผ ํจ๊ป Pull Request
- ์ฝ๋ ๋ฆฌ๋ทฐ: ํ์ ๊ฒํ ํ ๋จธ์ง
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ผ์ค ํ์ ๋ฐฐํฌ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ์กฐํ์ธ์.
- ๋ฐฑ์๋ & AI/ML: ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ, ์๋ฒ ๋ฉ ์์คํ
- ํ๋ก ํธ์๋: React UI/UX, ์ฌ์ฉ์ ๊ฒฝํ
- DevOps: ๋ฐฐํฌ, ๋ชจ๋ํฐ๋ง, ์ธํ๋ผ
- ์ด์: GitHub Issues
- ์ด๋ฉ์ผ: team@quoteai.com
- ๋ฌธ์: API ๊ฐ์ด๋
๐ก "๊ฐ์ฅ ์ด๋์ด ๋ฐค๋ ๊ฒฐ๊ตญ์ ๋๋๊ณ , ํด๋ ๋ ์ค๋ฅธ๋ค." - ๋น ํฐ ์๊ณ
์ด ํ๋ก์ ํธ๊ฐ ์ฌ๋ฌ๋ถ์ ํ๋ฃจ์ ์์ ์๋ก์ ์๊ฐ์ ์ ํด๋๋ฆฌ๊ธธ ๋ฐ๋๋๋ค. โจ