intentfinder-api / README.md
youngryong's picture
deploy: IntentFinder API (HF Docker Space)
21bdc64
|
Raw
History Blame Contribute Delete
3.56 kB
metadata
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 ์ €์žฅ์†Œ)

์„ค์น˜ ๋ฐ ์‹คํ–‰

# 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 โ€” ๋ฐ์ดํ„ฐ ์†Œ์Šคยทํ•œ๊ณ„ ๋ถ„์„