Spaces:
Running
Running
| 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` โ ๋ฐ์ดํฐ ์์คยทํ๊ณ ๋ถ์ | |