Skip to content

KuriBus/AI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

14 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ€– AI ν…μŠ€νŠΈ λͺ¨λ”λ ˆμ΄μ…˜ API

ν•œκ΅­μ–΄ ν…μŠ€νŠΈμ˜ μ•…μ˜μ„±μ„ νƒμ§€ν•˜κ³  μš•μ„€/비속어λ₯Ό μžλ™μœΌλ‘œ μˆœν™”ν•΄μ£ΌλŠ” FastAPI μ„œλ²„μž…λ‹ˆλ‹€.

✨ μ£Όμš” κΈ°λŠ₯

  • μ•…μ˜μ„± 탐지: νŒŒμΈνŠœλ‹λœ AI λͺ¨λΈλ‘œ ν…μŠ€νŠΈ μ•…μ˜μ„± 점수 계산 (0.0-1.0)
  • μžλ™ μˆœν™”: HyperCLOVA X APIλ₯Ό ν™œμš©ν•œ μ§€λŠ₯ν˜• ν…μŠ€νŠΈ μˆœν™”
  • RESTful API: FastAPI 기반의 κ°„λ‹¨ν•œ HTTP API
  • ν—¬μŠ€μ²΄ν¬: μ„œλ²„ μƒνƒœ λͺ¨λ‹ˆν„°λ§ μ—”λ“œν¬μΈνŠΈ

πŸš€ λΉ λ₯Έ μ‹œμž‘

1. μ €μž₯μ†Œ 클둠

git clone <your-repo-url>
cd <repo-name>

2. κ°€μƒν™˜κ²½μ΄ ν™œμ„±ν™”λ˜μ—ˆλŠ”μ§€ 확인

# ν˜„μž¬ 디렉토리 확인
pwd
# /home/ubuntu/AI λ˜λŠ” /home/ubuntu/moderation-api μ—¬μ•Ό 함

# κ°€μƒν™˜κ²½ ν™œμ„±ν™” (μ€‘μš”!)
source venv/bin/activate

# ν”„λ‘¬ν”„νŠΈκ°€ (venv) ubuntu@... 둜 λ°”λ€Œμ–΄μ•Ό 함

2. Python ν™˜κ²½ μ„€μ •

# Python 3.11+ ꢌμž₯
# requests와 tqdm μ„€μΉ˜
pip install requests tqdm

# λ˜λŠ” requirements.txt둜 λͺ¨λ“  νŒ¨ν‚€μ§€ μ„€μΉ˜
pip install -r requirements.txt

3. λͺ¨λΈ λ‹€μš΄λ‘œλ“œ

# gdown μ„€μΉ˜ (Google Drive μ „μš© λ‹€μš΄λ‘œλ”)
pip install gdown

# gdown으둜 λ‹€μš΄λ‘œλ“œ
gdown "{ꡬ글 λ“œλΌμ΄λΈŒμ˜ 곡유 링크 id}" -O final_moderation_model.zip

4. HyperCLOVA X API ν‚€ μ„€μ • (ν•„μˆ˜)

# ν™˜κ²½λ³€μˆ˜λ‘œ μ„€μ •
export HYPERCLOVA_API_KEY="your-api-key-here"

# λ˜λŠ” .env 파일 생성
echo "HYPERCLOVA_API_KEY=your-api-key-here" > .env

API ν‚€ λ°œκΈ‰ 방법:

  1. 넀이버 ν΄λΌμš°λ“œ μ½˜μ†” 접속
  2. AI Services β†’ CLOVA Studio β†’ API ν‚€
  3. [ν…ŒμŠ€νŠΈ] νƒ­μ—μ„œ ν…ŒμŠ€νŠΈ API ν‚€ λ°œκΈ‰

5. μ„œλ²„ μ‹€ν–‰

uvicorn main:app --host 0.0.0.0 --port 8000

μ„œλ²„κ°€ μ‹œμž‘λ˜λ©΄ http://localhost:8000μ—μ„œ APIλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ“‘ API μ‚¬μš©λ²•

ν…μŠ€νŠΈ λͺ¨λ”λ ˆμ΄μ…˜

curl -X POST "http://localhost:8000/moderate" \
  -H "Content-Type: application/json" \
  -d '{"text": "ν…ŒμŠ€νŠΈν•  ν…μŠ€νŠΈλ₯Ό μž…λ ₯ν•˜μ„Έμš”"}'

응닡 μ˜ˆμ‹œ:

일반 ν…μŠ€νŠΈ (μ•ˆμ „):

{
  "text": "μ•ˆλ…•ν•˜μ„Έμš” 쒋은 ν•˜λ£¨μž…λ‹ˆλ‹€",
  "malice_score": 0.1234,
  "is_harmful": false,
  "confidence": "μ•ˆμ „",
  "purified_text": null
}

μœ ν•΄ ν…μŠ€νŠΈ (μˆœν™”λ¨):

{
  "text": "뭘 꼬라봐 μ’†κ°™μ€λ†ˆμ•„",
  "malice_score": 0.9759,
  "is_harmful": true,
  "confidence": "맀우 μœ„ν—˜",
  "purified_text": "뭘 째렀봐 μ•ˆ 쒋은 λ†ˆμ•„"
}

ν—¬μŠ€μ²΄ν¬

curl http://localhost:8000/quick-health

응닡:

{"status": "healthy"}

πŸ—οΈ AWS 배포

EC2 직접 배포 (ꢌμž₯)

  1. EC2 μΈμŠ€ν„΄μŠ€ 생성 (Ubuntu 22.04, t3.small ꢌμž₯)
  2. λ³΄μ•ˆ κ·Έλ£Ή μ„€μ •: SSH(22), HTTP(8000) 포트 μ˜€ν”ˆ
  3. μ„œλ²„ μ„€μ •:
# SSH 접속 ν›„
sudo apt update && sudo apt upgrade -y

# Python 3.11 μ„€μΉ˜
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update
sudo apt install -y python3.11 python3.11-pip python3.11-venv

# ν”„λ‘œμ νŠΈ 클둠
git clone <your-repo-url>
cd <repo-name>

# κ°€μƒν™˜κ²½ μ„€μ •
python3.11 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# ν™˜κ²½λ³€μˆ˜ μ„€μ •
export HYPERCLOVA_API_KEY="your-api-key"

# λͺ¨λΈ λ‹€μš΄λ‘œλ“œ
python download_model.py

# μ„œλ²„ μ‹€ν–‰ (λ°±κ·ΈλΌμš΄λ“œ)
nohup uvicorn main:app --host 0.0.0.0 --port 8000 > app.log 2>&1 &

# κ·Έλƒ₯ μ‹€ν–‰
python -m uvicorn main:app --host 0.0.0.0 --port 8000
  1. μ„œλΉ„μŠ€ 등둝 (μžλ™ μ‹œμž‘):
sudo tee /etc/systemd/system/moderation-api.service > /dev/null <<EOF
[Unit]
Description=Moderation API
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=$(pwd)
Environment=PATH=$(pwd)/venv/bin
Environment=HYPERCLOVA_API_KEY=your-api-key
ExecStart=$(pwd)/venv/bin/uvicorn main:app --host 0.0.0.0 --port 8000
Restart=always

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable moderation-api
sudo systemctl start moderation-api

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

β”œβ”€β”€ main.py                    # 메인 FastAPI μ• ν”Œλ¦¬μΌ€μ΄μ…˜
β”œβ”€β”€ requirements.txt           # Python νŒ¨ν‚€μ§€ μ˜μ‘΄μ„±
β”œβ”€β”€ download_model.py          # Google Drive λͺ¨λΈ μžλ™ λ‹€μš΄λ‘œλ“œ
β”œβ”€β”€ README.md                  # ν”„λ‘œμ νŠΈ λ¬Έμ„œ
β”œβ”€β”€ .gitignore                # Git μ œμ™Έ 파일 λͺ©λ‘
└── final_moderation_model/    # AI λͺ¨λΈ νŒŒμΌλ“€ (μžλ™ λ‹€μš΄λ‘œλ“œ)
    β”œβ”€β”€ pytorch_model-001.pth  # νŒŒμΈνŠœλ‹λœ λͺ¨λΈ κ°€μ€‘μΉ˜
    β”œβ”€β”€ tokenizer.json         # ν† ν¬λ‚˜μ΄μ € μ„€μ •
    β”œβ”€β”€ tokenizer_config.json  # ν† ν¬λ‚˜μ΄μ € ꡬ성
    └── ...                    # 기타 λͺ¨λΈ νŒŒμΌλ“€

πŸ”§ 문제 ν•΄κ²°

λͺ¨λΈ λ‹€μš΄λ‘œλ“œ μ‹€νŒ¨

# Google Drive 파일 ID 확인
# download_model.pyμ—μ„œ MODEL_FILE_ID μˆ˜μ • ν•„μš”

# μˆ˜λ™ λ‹€μš΄λ‘œλ“œ
python download_model.py

API ν‚€ 인증 μ‹€νŒ¨

# API ν‚€ 확인
echo $HYPERCLOVA_API_KEY

# μƒˆ API ν‚€ λ°œκΈ‰ (ν…ŒμŠ€νŠΈ νƒ­μ—μ„œ)
# Bearer 토큰 λ°©μ‹μœΌλ‘œ 변경됨

μ„œλ²„ μ‹œμž‘ μ‹€νŒ¨

# 포트 μ‚¬μš© μ—¬λΆ€ 확인
lsof -i :8000

# μ˜μ‘΄μ„± μž¬μ„€μΉ˜
pip install -r requirements.txt

# 둜그 확인
tail -f app.log

πŸ”§ λͺ¨λ‹ˆν„°λ§

둜그 확인

# μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 둜그
tail -f app.log

# μ‹œμŠ€ν…œ μ„œλΉ„μŠ€ 둜그 (μ„œλΉ„μŠ€ λ“±λ‘ν•œ 경우)
sudo journalctl -u moderation-api -f

μ„±λŠ₯ λͺ¨λ‹ˆν„°λ§

# μ„œλ²„ λ¦¬μ†ŒμŠ€ 확인
htop

# API 응닡 μ‹œκ°„ ν…ŒμŠ€νŠΈ
time curl -X POST "http://localhost:8000/moderate" \
  -H "Content-Type: application/json" \
  -d '{"text": "ν…ŒμŠ€νŠΈ"}'

πŸ“‹ μš”κ΅¬μ‚¬ν•­

  • Python: 3.11+
  • λ©”λͺ¨λ¦¬: μ΅œμ†Œ 2GB (λͺ¨λΈ λ‘œλ”©μš©)
  • λ””μŠ€ν¬: μ΅œμ†Œ 3GB (λͺ¨λΈ 파일용)
  • λ„€νŠΈμ›Œν¬: HyperCLOVA X API μ ‘κ·Ό κ°€λŠ₯

πŸ” λ³΄μ•ˆ 고렀사항

  • API ν‚€λ₯Ό ν™˜κ²½λ³€μˆ˜λ‘œ μ•ˆμ „ν•˜κ²Œ 관리
  • HTTPS μ‚¬μš© ꢌμž₯ (ν”„λ‘œλ•μ…˜ ν™˜κ²½)
  • λ°©ν™”λ²½μœΌλ‘œ ν•„μš”ν•œ 포트만 μ˜€ν”ˆ
  • 정기적인 λ³΄μ•ˆ μ—…λ°μ΄νŠΈ

🎯 μ™„μ „ μžλ™ν™”λœ ν…μŠ€νŠΈ λͺ¨λ”λ ˆμ΄μ…˜ μ†”λ£¨μ…˜μ„ κ²½ν—˜ν•΄λ³΄μ„Έμš”!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages