intentfinder-api / README.md
youngryong's picture
deploy: IntentFinder API (HF Docker Space)
21bdc64
|
Raw
History Blame Contribute Delete
3.56 kB
---
title: IntentFinder API
emoji: ๐Ÿ”Ž
colorFrom: blue
colorTo: indigo
sdk: docker
app_port: 7860
pinned: false
---
> **HuggingFace Space ๋ฐฐํฌ ๋ฉ”๋ชจ**
> - SDK: Docker (์œ„ ๋ฉ”ํƒ€). ์ง„์ž…์  `api:app`, ํฌํŠธ 7860.
> - **Space Settings โ†’ Secrets ์— ์ž…๋ ฅ**(์ฝ”๋“œ/๋ ˆํฌ์—” ๋‘์ง€ ์•Š์Œ):
> `NAVER_CLIENT_ID`, `NAVER_CLIENT_SECRET`, `NAVER_API_KEY`, `NAVER_SECRET_KEY`, `NAVER_CUSTOMER_ID`,
> `ANTHROPIC_API_KEY`, `SUPABASE_URL`, `SUPABASE_SERVICE_KEY`
> - **๋ฐฐํฌ ๋ณดํ˜ธ ์‹œํฌ๋ฆฟ**(๊ถŒ์žฅ): `ALLOWED_ORIGINS`(๋Œ€์‹œ๋ณด๋“œ ๋„๋ฉ”์ธ), `DT_API_KEY`(๋Œ€์‹œ๋ณด๋“œ์™€ ๊ณต์œ ), `RATE_MAX_PER_MIN`
> - ํ—ฌ์Šค์ฒดํฌ: `GET /health` ยท ๋ถ„์„: `GET /analyze?keyword=...` (`DT_API_KEY` ์„ค์ • ์‹œ `X-DT-Key` ํ—ค๋” ํ•„์š”)
# IntentFinder โ€” ๊ฒ€์ƒ‰ ์ธํ…ํŠธ ๋ถ„์„ ๋Œ€์‹œ๋ณด๋“œ
ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋„ค์ด๋ฒ„ ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰ ๋ฐ์ดํ„ฐ + AI ํด๋Ÿฌ์Šคํ„ฐ๋ง์œผ๋กœ ๊ฒ€์ƒ‰ ์˜๋„ยทํƒ€๊นƒยท์—ฐ๊ด€ ๊ฒฝ๋กœ๋ฅผ ๋ถ„์„ํ•˜๋Š” SMB์šฉ ๋Œ€์‹œ๋ณด๋“œ.
## ๊ตฌ์„ฑ
```
[dashboard.html] React ๋‹จ์ผ ํŒŒ์ผ ํ”„๋ก ํŠธ (๋นŒ๋“œ ๋ถˆํ•„์š”)
โ”‚ fetch /analyze?keyword=
โ–ผ
[api.py] FastAPI ๋ฐฑ์—”๋“œ (ํฌํŠธ 8000)
โ”œโ”€ naver_collector.py ๋„ค์ด๋ฒ„ ๊ฒ€์ƒ‰๊ด‘๊ณ  ํ‚ค์›Œ๋“œ๋„๊ตฌ (๊ฒ€์ƒ‰๋Ÿ‰ยท๊ฒฝ์Ÿ)
โ”œโ”€ clusterer.py ๊ด€๋ จ์„ฑ ํ•„ํ„ฐ + S-BERTโ†’UMAPโ†’HDBSCAN ํด๋Ÿฌ์Šคํ„ฐ๋ง
โ”œโ”€ analyzer.py Overview ์นด๋“œ ์ง‘๊ณ„
โ”œโ”€ intent_classifier.py Claude Haiku ์˜๋„๋ถ„๋ฅ˜ยทํ…Œ๋งˆ๋ช…ยท๋งˆ์ผ€ํŒ… ์ œ์•ˆ
โ”œโ”€ autocomplete.py ๋„ค์ด๋ฒ„ ์ž๋™์™„์„ฑ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ
โ”œโ”€ search_path.py ์ž„๋ฒ ๋”ฉ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ(ํด๋ฐฑ)
โ”œโ”€ datalab.py ๋ฐ์ดํ„ฐ๋žฉ ์„ฑ๋ณ„ร—์—ฐ๋ น ์ถ”์ • ๋น„์ค‘
โ”œโ”€ cache.py SQLite ๋น ๋ฅธ ์žฌ์กฐํšŒ ์บ์‹œ
โ””โ”€ supabase_store.py Supabase ์ ์žฌ(ํ†ตํ•ฉ BI ์ €์žฅ์†Œ)
```
## ์„ค์น˜ ๋ฐ ์‹คํ–‰
```bash
# 1. ์˜์กด์„ฑ ์„ค์น˜ (torch ํฌํ•จ, ์ˆ˜๋ฐฑ MB)
pip install -r requirements.txt
# 2. ์ž๊ฒฉ์ฆ๋ช… ์„ค์ •: .env.example์„ .env๋กœ ๋ณต์‚ฌ ํ›„ ๊ฐ’ ์ฑ„์šฐ๊ธฐ
# - ๋„ค์ด๋ฒ„ ๊ฒ€์ƒ‰๊ด‘๊ณ  (searchad.naver.com > ๋„๊ตฌ > API)
# - ANTHROPIC_API_KEY (platform.claude.com)
# - ๋„ค์ด๋ฒ„ ๋ฐ์ดํ„ฐ๋žฉ (developers.naver.com)
# - SUPABASE_URL / SUPABASE_SERVICE_KEY (Supabase > Settings > API)
# 3. Supabase ํ…Œ์ด๋ธ” ์ƒ์„ฑ: supabase_schema.sql์„ SQL Editor์— ๋ถ™์—ฌ Run
# 4. ์‹คํ–‰
python -m uvicorn api:app --port 8000 # ๋ฐฑ์—”๋“œ
python -m http.server 5500 # ํ”„๋ก ํŠธ
# โ†’ http://127.0.0.1:5500/dashboard.html
```
## ์ž๊ฒฉ์ฆ๋ช… ํ‚ค (.env)
| ๋ณ€์ˆ˜ | ๋ฐœ๊ธ‰์ฒ˜ | ์šฉ๋„ |
|---|---|---|
| `NAVER_API_KEY` / `NAVER_SECRET_KEY` / `NAVER_CUSTOMER_ID` | searchad.naver.com | ๊ฒ€์ƒ‰๋Ÿ‰ยท๊ฒฝ์Ÿ |
| `ANTHROPIC_API_KEY` | platform.claude.com | ์˜๋„๋ถ„๋ฅ˜ยท๋งˆ์ผ€ํŒ… ์ œ์•ˆ |
| `NAVER_CLIENT_ID` / `NAVER_CLIENT_SECRET` | developers.naver.com | ์ธ๊ตฌํ†ต๊ณ„ |
| `SUPABASE_URL` / `SUPABASE_SERVICE_KEY` | Supabase | ํ†ตํ•ฉ ์ €์žฅ์†Œ ์ ์žฌ |
ํ‚ค๊ฐ€ ์—†๋Š” ๊ธฐ๋Šฅ์€ ์ž๋™์œผ๋กœ ๋น„ํ™œ์„ฑ(placeholder)๋˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ •์ƒ ๋™์ž‘ํ•œ๋‹ค.
## ์ฃผ์˜
- `.env`(์‹ค์ œ ํ‚ค)๋Š” **์ ˆ๋Œ€ ๊ณต์œ ยท์ปค๋ฐ‹ ๊ธˆ์ง€**. ๊ณต์œ ๋Š” `.env.example`๋งŒ.
- `service_role` ํ‚ค๋Š” RLS ์šฐํšŒ ํ‚ค โ†’ ์„œ๋ฒ„์—์„œ๋งŒ ์‚ฌ์šฉ, ํ”„๋ก ํŠธ ๋…ธ์ถœ ๊ธˆ์ง€.
- ๋„ค์ด๋ฒ„ ์ž๋™์™„์„ฑยท๋ฐ์ดํ„ฐ๋žฉ์€ ๋น„๊ณต์‹/์ƒ๋Œ€์ง€์ˆ˜ ๊ธฐ๋ฐ˜ โ†’ "์ถ”์ •" ๋ผ๋ฒจ ์œ ์ง€.
- CDN(BabelยทTailwind)์€ ๋ฐ๋ชจ์šฉ โ†’ ์‹ค์„œ๋น„์Šค๋Š” Vite ๋นŒ๋“œ ๊ถŒ์žฅ.
## ์ง„ํ–‰ ๊ธฐ๋ก
- `checklist.md` โ€” ๋‹จ๊ณ„๋ณ„ ์™„๋ฃŒ ํ˜„ํ™ฉ
- `context-notes.md` โ€” ์„ค๊ณ„ ๊ฒฐ์ •๊ณผ ๊ทผ๊ฑฐ
- `data-requirements.md` โ€” ๋ฐ์ดํ„ฐ ์†Œ์Šคยทํ•œ๊ณ„ ๋ถ„์„