LangChain + RAG ๊ธฐ๋ฐ ์ค์๊ฐ ํฌ์ ์๋ด AI ์๋น์ค
ํน์ง โข ์ํคํ ์ฒ โข ์์ํ๊ธฐ โข API ๋ฌธ์ โข ๋ฐฐํฌ
- ๊ฐ์
- ์ฃผ์ ํน์ง
- ์์คํ ์ํคํ ์ฒ
- ๊ธฐ์ ์คํ
- ํ๋ก์ ํธ ๊ตฌ์กฐ
- ๋น ๋ฅธ ์์
- API ๋ฌธ์
- ์ง๋ฌธ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ
- ๋ฐฐํฌ
- ๊ฐ๋ฐ ๊ฐ์ด๋
- ํธ๋ฌ๋ธ์ํ
- ๋ผ์ด์ ์ค
AI ํฌ์ ์ด๋๋ฐ์ด์ ๋ LangChain๊ณผ RAG(Retrieval-Augmented Generation) ๊ธฐ์ ์ ํ์ฉํ์ฌ ์ค์๊ฐ ํฌ์ ์๋ด์ ์ ๊ณตํ๋ ์ง๋ฅํ AI ์๋น์ค์ ๋๋ค.
- ๐ ์ค์๊ฐ ์ฃผ๊ฐ ๋ถ์ - pykrx API๋ฅผ ํตํ ํ๊ตญ ์ฃผ์์์ฅ ๋ฐ์ดํฐ
- ๐ ๊ฒฝ์ ์งํ ํด์ - MariaDB ๊ธฐ๋ฐ ๊ฑฐ์๊ฒฝ์ ์งํ ๋ถ์
- ๐ ์ฆ๊ถ์ฌ ๋ฆฌํฌํธ ๊ฒ์ - ChromaDB ๋ฒกํฐ ๊ฒ์์ ํตํ ์ ๋๋ฆฌ์คํธ ๋ฆฌํฌํธ ๋ถ์
- ๐ก ๊ฐ์ธํ๋ ํฌ์ ์กฐ์ธ - GPT-4 ๊ธฐ๋ฐ ๋ง์ถคํ ํฌ์ ์ ๋ต ์ ๊ณต
์ฌ์ฉ์ ์ง๋ฌธ โ AI ๋ถ๋ฅ๊ธฐ โ 4๊ฐ์ง ์นดํ
๊ณ ๋ฆฌ
โโ economic_indicator (๊ฒฝ์ ์งํ)
โโ stock_price (์ฃผ๊ฐ ๋ถ์)
โโ analyst_report (์ฆ๊ถ์ฌ ๋ฆฌํฌํธ)
โโ general (์ผ๋ฐ ํฌ์ ์๋ด)
| ์นดํ ๊ณ ๋ฆฌ | ๋ฐ์ดํฐ ์์ค | ์ฒ๋ฆฌ ๋ฐฉ์ |
|---|---|---|
| ๊ฒฝ์ ์งํ | MariaDB (Spring Boot) | REST API + LLM ํด์ |
| ์ฃผ๊ฐ ๋ฐ์ดํฐ | pykrx (ํ๊ตญ๊ฑฐ๋์) | Real-time API + ๊ฐ์ฑ ๋ถ์ |
| ๋ฆฌํฌํธ | ChromaDB (PDF ์๋ฒ ๋ฉ) | RAG ๊ฒ์ + LLM ๋ต๋ณ |
| ์ผ๋ฐ ์๋ด | - | GPT-4 Direct |
- ๋น๋๊ธฐ ์ฒ๋ฆฌ: FastAPI + httpx๋ฅผ ํตํ ๊ณ ์ API ์ฒ๋ฆฌ
- ๋ฒกํฐ ๊ฒ์: ChromaDB๋ฅผ ํ์ฉํ ์๋ฏธ ๊ธฐ๋ฐ ๋ฌธ์ ๊ฒ์
- ์บ์ฑ: ๋์๋ณด๋ ๋ฐ์ดํฐ 60์ด ์บ์ฑ์ผ๋ก ์ฑ๋ฅ ์ต์ ํ
- ์ปจํ ์ด๋ํ: Docker + Kubernetes ๊ธฐ๋ฐ ๋ง์ดํฌ๋ก์๋น์ค
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Frontend (React) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ HTTP
โโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Backend (Spring Boot - Port 8080) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Controllers: /api/chat, /api/stocks, /api/indicatorsโ โ
โ โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ MariaDB (๊ฒฝ์ ์งํ, ์ข
๋ชฉ ๋ง์คํฐ) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ HTTP
โโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ AI Service (FastAPI - Port 8000) โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ POST /ai/query (๋ฉ์ธ ์ง๋ฌธ ์ฒ๋ฆฌ ์๋ํฌ์ธํธ) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Question Classifier (LLM ๊ธฐ๋ฐ ๋ถ๋ฅ) โ โ
โ โโโโฌโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ โ โ
โ โโโโผโโโโ โโโโผโโโโ โโโโโผโโโ โโโโโโผโโโโโ โ
โ โEconomicโStock โAnalystโGeneral โ โ
โ โChain โChain โChain โChain โ โ
โ โโโโฌโโโโ โโโโฌโโโโ โโโโโฌโโโ โโโโโโฌโโโโโ โ
โ โ โ โ โ โ
โ โโโโผโโโโโโ โโผโโโโโโโ โโโผโโโโโโ โ โ
โ โMariaDB โ โpykrx โ โChromaDB โ โ
โ โvia API โ โAPI โ โVector DBโ โ โ
โ โโโโโโโโโโ โโโโโโโโโ โโโโโโโโโโ โ โ
โ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโ โ
โ โ GPT-4 Turbo (OpenAI API) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
graph LR
A[์ฌ์ฉ์ ์ง๋ฌธ] --> B[FastAPI /ai/query]
B --> C{์ง๋ฌธ ๋ถ๋ฅ}
C -->|๊ฒฝ์ ์งํ| D[Spring Boot API]
C -->|์ฃผ๊ฐ| E[pykrx API]
C -->|๋ฆฌํฌํธ| F[ChromaDB RAG]
C -->|์ผ๋ฐ| G[GPT-4 Direct]
D --> H[LLM ํด์]
E --> I[๊ฐ์ฑ ๋ถ์]
F --> J[๋ฌธ๋งฅ ๊ธฐ๋ฐ ๋ต๋ณ]
G --> K[ํฌ์ ์กฐ์ธ]
H --> L[์ต์ข
์๋ต]
I --> L
J --> L
K --> L
- FastAPI 0.110.0 - ๊ณ ์ฑ๋ฅ ๋น๋๊ธฐ ์น ํ๋ ์์ํฌ
- Python 3.10+ - ์์ ์ ์ธ ์ต์ ๋ฒ์
- LangChain 0.3.27 - LLM ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ
- OpenAI GPT-4 Turbo - ์์ฐ์ด ์ดํด ๋ฐ ์์ฑ
- ChromaDB 0.4.24 - ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- tiktoken 0.12.0 - ํ ํฐ ์นด์ดํ
- pykrx 1.0.51 - ํ๊ตญ๊ฑฐ๋์ API
- httpx 0.28.1 - ๋น๋๊ธฐ HTTP ํด๋ผ์ด์ธํธ
- pandas 2.2.1 - ๋ฐ์ดํฐ ๋ถ์
- pypdf 4.1.0 - PDF ๋ฌธ์ ํ์ฑ
- langchain-text-splitters - ์ค๋งํธ ํ ์คํธ ์ฒญํน
- Docker - ์ปจํ ์ด๋ํ
- Kubernetes (GKE) - ์ค์ผ์คํธ๋ ์ด์
- GitHub Actions - CI/CD
jeonbongjun-ai/
โโโ ๐ chains/ # LangChain ์ฒด์ธ ๋ก์ง
โ โโโ __init__.py
โ โโโ classifier.py # ์ง๋ฌธ ๋ถ๋ฅ๊ธฐ (4-way classification)
โ โโโ rag_chain.py # RAG ์ฒด์ธ (์ฆ๊ถ์ฌ ๋ฆฌํฌํธ)
โ โโโ indicator_chain.py # ๊ฒฝ์ ์งํ ๋ถ์ ์ฒด์ธ
โ โโโ stock_chain.py # ์ฃผ๊ฐ ๋ถ์ + ๊ฐ์ฑ ๋ถ์
โ โโโ general_chain.py # ์ผ๋ฐ ํฌ์ ์๋ด
โ
โโโ ๐ routers/ # FastAPI ๋ผ์ฐํฐ
โ โโโ market_data.py # ์์ฅ ๋ฐ์ดํฐ API
โ โโโ GET /api/dashboard # ํตํฉ ๋์๋ณด๋
โ โโโ GET /api/stock/{ticker} # ๊ฐ๋ณ ์ข
๋ชฉ ์กฐํ
โ โโโ POST /api/stock-details # ๋ค์ค ์ข
๋ชฉ ์กฐํ
โ
โโโ ๐ utils/ # ์ ํธ๋ฆฌํฐ ๋ชจ๋
โ โโโ config.py # ํ๊ฒฝ ์ค์ (Pydantic)
โ โโโ logger.py # ๋ก๊น
์ค์
โ โโโ embedder.py # OpenAI ์๋ฒ ๋ฉ
โ โโโ db_client.py # ChromaDB ํด๋ผ์ด์ธํธ
โ โโโ spring_client.py # Spring Boot API ํด๋ผ์ด์ธํธ
โ โโโ data_loader.py # ๋ฌธ์ ๋ก๋ (PDF/CSV/JSON)
โ โโโ text_splitter.py # ํ
์คํธ ์ฒญํน
โ
โโโ ๐ notebooks/ # Jupyter ์คํ ๋
ธํธ๋ถ
โ โโโ 01_classifier_test.ipynb # ๋ถ๋ฅ๊ธฐ ํ
์คํธ
โ โโโ 02_rag_test.ipynb # RAG ํ์ดํ๋ผ์ธ ํ
์คํธ
โ โโโ test_full_pipeline.ipynb # ์ ์ฒด ํตํฉ ํ
์คํธ
โ
โโโ ๐ k8s/ # Kubernetes ๋งค๋ํ์คํธ
โ โโโ ai-service-deployment.yaml # Deployment ์ค์
โ โโโ ai-service-service.yaml # Service (ClusterIP)
โ โโโ ai-config.yaml # BackendConfig (Health Check)
โ
โโโ ๐ .github/workflows/ # GitHub Actions CI/CD
โ โโโ build-push-ai.yaml # Docker ์ด๋ฏธ์ง ๋น๋ ๋ฐ ํธ์
โ
โโโ ๐ data/ # ๋ฐ์ดํฐ ๋๋ ํ ๋ฆฌ (gitignore)
โ โโโ reports/ # ์ฆ๊ถ์ฌ ๋ฆฌํฌํธ PDF
โ โโโ news/ # ๋ด์ค ๋ฐ์ดํฐ
โ โโโ indicators/ # ๊ฒฝ์ ์งํ CSV
โ
โโโ ๐ embeddings/ # ChromaDB ์ ์ฅ์ (gitignore)
โ โโโ chromadb/ # ๋ฒกํฐ ์๋ฒ ๋ฉ DB
โ
โโโ ๐ logs/ # ๋ก๊ทธ ํ์ผ (gitignore)
โ
โโโ ๐ main.py # FastAPI ์ ํ๋ฆฌ์ผ์ด์
์ํธ๋ฆฌํฌ์ธํธ
โโโ ๐ Dockerfile # Docker ์ด๋ฏธ์ง ๋น๋ ์ค์
โโโ ๐ requirements.txt # Python ์์กด์ฑ
โโโ ๐ .env.example # ํ๊ฒฝ ๋ณ์ ํ
ํ๋ฆฟ
โโโ ๐ .gitignore # Git ์ ์ธ ํ์ผ
โโโ ๐ README.md # ํ๋ก์ ํธ ๋ฌธ์ (๋ณธ ํ์ผ)
- Python 3.10 ์ด์
- Docker (์ ํ์ฌํญ)
- OpenAI API ํค
- Spring Boot ๋ฐฑ์๋ ์๋ฒ (ํฌํธ 8080)
# ์ ์ฅ์ ํด๋ก
git clone https://github.com/yourusername/jeonbongjun-ai.git
cd jeonbongjun-ai
# ๊ฐ์ํ๊ฒฝ ์์ฑ ๋ฐ ํ์ฑํ
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# ์์กด์ฑ ์ค์น
pip install -r requirements.txt# .env ํ์ผ ์์ฑ
cp .env.example .env
# .env ํ์ผ ํธ์ง (ํ์!)
# OPENAI_API_KEY=sk-proj-your-actual-api-key.env ์์
# OpenAI API
OPENAI_API_KEY=sk-proj-your-actual-api-key-here
# FastAPI Settings
HOST=0.0.0.0
PORT=8000
DEBUG=True
# ChromaDB
CHROMA_DB_PATH=./embeddings/chromadb
# Logging
LOG_LEVEL=INFO
LOG_FILE=./logs/app.log# FastAPI ์๋ฒ ์์
python main.py
# ๋๋ uvicorn ์ง์ ์คํ
uvicorn main:app --host 0.0.0.0 --port 8000 --reload์๋ฒ ์คํ ํ ์ ์:
- API ๋ฌธ์: http://localhost:8000/docs
- ํฌ์ค ์ฒดํฌ: http://localhost:8000/health
GET /health์๋ต ์์
{
"status": "ok",
"service": "InvestAI Core",
"version": "1.0.0",
"timestamp": "2026-01-18T10:30:00.000Z"
}POST /ai/query
Content-Type: application/json์์ฒญ ๋ฐ๋
{
"session_id": "user123-session456",
"question": "์ผ์ฑ์ ์์ AI ๋ฐ๋์ฒด ์ ๋ง์ ์ด๋?"
}์๋ต ์์
{
"session_id": "user123-session456",
"question": "์ผ์ฑ์ ์์ AI ๋ฐ๋์ฒด ์ ๋ง์ ์ด๋?",
"answer": "NHํฌ์์ฆ๊ถ ๋ฆฌํฌํธ์ ๋ฐ๋ฅด๋ฉด, ์ผ์ฑ์ ์๋ HBM3E ์์ฐ ์์์ผ๋ก...",
"category": "analyst_report",
"sources": [
{
"title": "NHํฌ์์ฆ๊ถ_์ผ์ฑ์ ์_20251015.pdf",
"securities_firm": "NHํฌ์์ฆ๊ถ",
"date": "20251015",
"content": "AI ๋ฐ๋์ฒด ์์ฅ์์ ์ผ์ฑ์ ์๋..."
}
],
"timestamp": "2026-01-18T10:35:00.000Z"
}GET /api/dashboard์๋ต ๊ตฌ์กฐ
{
"indices": {
"kospi": {
"value": 2850.34,
"changeValue": 12.5,
"changeRate": 0.44,
"chartData": [{"value": 2840}, {"value": 2850}, ...]
},
"kosdaq": { ... }
},
"topGainers": [
{"code": "005930", "name": "์ผ์ฑ์ ์", "price": 75000, "change_rate": 3.5}
],
"topLosers": [...],
"topVolume": [...],
"topMarketCap": [...]
}GET /api/stock/{ticker}์์
curl http://localhost:8000/api/stock/005930์๋ต
{
"name": "์ผ์ฑ์ ์",
"ticker": "005930",
"price": 75000,
"changePct": 2.3,
"ohlc": {
"open": 74000,
"high": 76000,
"low": 73500
}
}โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. ์ฌ์ฉ์ ์ง๋ฌธ ์
๋ ฅ โ
โ "์ผ์ฑ์ ์ AI ๋ฐ๋์ฒด ์ ๋ง์?" โ
โโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. Question Classifier (GPT-4 ๊ธฐ๋ฐ) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Prompt: "๋ค์ ์ง๋ฌธ์ 4๊ฐ์ง ์นดํ
๊ณ ๋ฆฌ๋ก ๋ถ๋ฅ..." โ โ
โ โ Output: {"category": "analyst_report", โ โ
โ โ "stock_code": "005930"} โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโดโโโโโโโโโโโโโโ
โ โ
โโโโโโโโโโผโโโโโโโโโ โโโโโโโโโโผโโโโโโโโโ
โ 3a. RAG Chain โ โ 3b. Other Chainsโ
โ (analyst_report)โ โ (stock/economic)โ
โ โ โ โ
โ ChromaDB Search โ โ API Calls โ
โ โ โ โ โ โ
โ Top 3 Documents โ โ Data Fetch โ
โ โ โ โ โ โ
โ GPT-4 Generationโ โ GPT-4 Analysis โ
โโโโโโโโโโฌโโโโโโโโโ โโโโโโโโโโฌโโโโโโโโโ
โ โ
โโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 4. ์ต์ข
์๋ต ์์ฑ โ
โ - ๋ต๋ณ (answer) โ
โ - ์ถ์ฒ (sources) โ
โ - ์นดํ
๊ณ ๋ฆฌ (category) โ
โ - ํ์์คํฌํ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
# 1. Spring Boot API์์ ์ต์ ๊ฒฝ์ ์งํ ์กฐํ
indicators = await spring_client.get_economic_indicators()
# {"๊ธฐ์ค๊ธ๋ฆฌ": "3.5%", "M2": "3500์กฐ์", ...}
# 2. GPT-4๋ก ์งํ ํด์ ๋ฐ ์ํฅ ๋ถ์
answer = llm.invoke(prompt_template.format(
question=question,
indicators=indicators_str
))# 1. pykrx๋ก ์ค์๊ฐ ์ฃผ๊ฐ ์กฐํ
stock_data = get_stock_data_from_pykrx(stock_code)
# 2. ๊ฐ์ฑ ๋ถ์ (๋ฑ๋ฝ๋ฅ ๊ธฐ๋ฐ)
sentiment = analyze_sentiment(stock_data) # "๊ธ์ ", "์ค๋ฆฝ", "๋ถ์ "
# 3. GPT-4๋ก ์ฃผ๊ฐ ๋ถ์ ๋ฐ ์์ฅ ํด์
answer = llm.invoke(prompt_template.format(
stock_data=stock_str,
sentiment=sentiment
))# 1. ChromaDB ๋ฒกํฐ ๊ฒ์ (์ ์ฌ๋ ๊ธฐ๋ฐ)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
docs = retriever.get_relevant_documents(question)
# 2. ๊ฒ์๋ ๋ฌธ์๋ฅผ ์ปจํ
์คํธ๋ก GPT-4 ํธ์ถ
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=retriever,
return_source_documents=True
)
result = qa_chain({"query": question})# GPT-4์ ์ง์ ์ง๋ฌธ (์ธ๋ถ ๋ฐ์ดํฐ ์์)
answer = llm.invoke(prompt_template.format(question=question))docker build -t ai-service:latest .docker run -d \
--name ai-service \
-p 8000:8000 \
-e OPENAI_API_KEY=your-api-key \
ai-service:latestkubectl create secret generic jeonbongjun-secrets \
--from-literal=OPENAI_API_KEY=your-api-key \
-n jeonbongjun# Deployment
kubectl apply -f k8s/ai-service-deployment.yaml
# Service
kubectl apply -f k8s/ai-service-service.yaml
# BackendConfig (Health Check)
kubectl apply -f k8s/ai-config.yaml# Pod ์ํ
kubectl get pods -n jeonbongjun -l app=ai-service
# ๋ก๊ทธ ํ์ธ
kubectl logs -f deployment/ai-service-deployment -n jeonbongjun
# Health Check
kubectl exec -it <pod-name> -n jeonbongjun -- curl localhost:8000/healthํ๋ก์ ํธ๋ ์๋ ๋น๋/๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ํฌํจํฉ๋๋ค:
# .github/workflows/build-push-ai.yaml
on:
push:
branches: [main]
jobs:
- Docker ์ด๋ฏธ์ง ๋น๋
- Docker Hub์ ํธ์
- ๋ฉํฐ ์ํคํ
์ฒ ์ง์ (amd64, arm64)Docker Hub: o11117/ai-service:latest
PDF ๋ฆฌํฌํธ๋ฅผ ChromaDB์ ์๋ฒ ๋ฉํ๋ ค๋ฉด:
# 1. PDF ํ์ผ์ data/reports/์ ์ถ๊ฐ
# ํ์ผ๋ช
ํ์: {์ฆ๊ถ์ฌ๋ช
}_{์ข
๋ชฉ๋ช
}_{๋ ์ง}.pdf
# ์: NHํฌ์์ฆ๊ถ_์ผ์ฑ์ ์_20251015.pdf
# 2. ์๋ฒ ๋ฉ ์คํฌ๋ฆฝํธ ์คํ
python scripts/embed_reports.py์คํฌ๋ฆฝํธ๋ ์๋์ผ๋ก:
- PDF ํ์ผ ๋ก๋
- ํ์ด์ง๋ณ๋ก ํ ์คํธ ์ถ์ถ
- ์ฒญํน (500์, 50์ ์ค๋ฒ๋ฉ)
- OpenAI ์๋ฒ ๋ฉ ์์ฑ
- ChromaDB์ ์ ์ฅ
# Jupyter ์คํ
jupyter notebook
# ๋
ธํธ๋ถ ์คํ ์์:
# 1. notebooks/01_classifier_test.ipynb (์ง๋ฌธ ๋ถ๋ฅ ํ
์คํธ)
# 2. notebooks/02_rag_test.ipynb (RAG ํ์ดํ๋ผ์ธ)
# 3. notebooks/test_full_pipeline.ipynb (์ ์ฒด ํตํฉ)# ์ค์๊ฐ ๋ก๊ทธ ๋ชจ๋ํฐ๋ง
tail -f logs/app.log
# ๋ก๊ทธ ๋ ๋ฒจ ๋ณ๊ฒฝ (.env)
LOG_LEVEL=DEBUG # DEBUG, INFO, WARNING, ERRORError: Incorrect API key provided
ํด๊ฒฐ์ฑ
: .env ํ์ผ์ OPENAI_API_KEY๋ฅผ ํ์ธํ์ธ์.
Error: Cannot access chromadb path
ํด๊ฒฐ์ฑ :
mkdir -p embeddings/chromadb
chmod 755 embeddings/chromadbError: ์ฃผ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์์ต๋๋ค
ํด๊ฒฐ์ฑ :
- ์ฃผ๋ง/๊ณตํด์ผ์๋ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์์ต๋๋ค.
- ์ข ๋ชฉ ์ฝ๋๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ์ธ์ (6์๋ฆฌ ์ซ์).
CrashLoopBackOff
์ฒดํฌ๋ฆฌ์คํธ:
# 1. Secret ํ์ธ
kubectl get secret jeonbongjun-secrets -n jeonbongjun
# 2. ๋ก๊ทธ ํ์ธ
kubectl logs <pod-name> -n jeonbongjun
# 3. Health Check ํ์ธ
kubectl describe pod <pod-name> -n jeonbongjunError: ๊ฒฝ์ ์งํ ์กฐํ HTTP ์ค๋ฅ
ํด๊ฒฐ์ฑ :
utils/spring_client.py์์base_urlํ์ธ- Kubernetes:
http://backend-svc:8080 - ๋ก์ปฌ:
http://localhost:8080
- ๋ฉํฐํด ๋ํ ์ง์ - ์ธ์ ๊ธฐ๋ฐ ๋ํ ์ปจํ ์คํธ ์ ์ง
- ์ค์๊ฐ ๋ด์ค ํฌ๋กค๋ง - ์ฆ๊ถ ๋ด์ค ์๋ ์์ง ๋ฐ ์๋ฒ ๋ฉ
- ๋ฐฑํ ์คํ ์๋ฎฌ๋ ์ด์ - AI ์ถ์ฒ ๊ธฐ๋ฐ ๊ฐ์ ํฌ์ ์ฑ๊ณผ ๋ถ์
- ๊ฐ์ฑ ๋ถ์ ๊ณ ๋ํ - BERT ๊ธฐ๋ฐ ๋ด์ค/SNS ๊ฐ์ฑ ๋ถ์
- ํฌํธํด๋ฆฌ์ค ์ต์ ํ - ํ๋ ํฌํธํด๋ฆฌ์ค ์ด๋ก (MPT) ์ ์ฉ
- WebSocket ์ง์ - ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ์๋ต
- ๋ค๊ตญ์ด ์ง์ - ์์ด/์ค๊ตญ์ด ์ง๋ฌธ ์ฒ๋ฆฌ
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ ์ค ํ์ ๋ฐฐํฌ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ์กฐํ์ธ์.