1. 맀λ μ¦κ°νλ μ¬λ§λ₯ | 2. μ λ μκ° λΆμ‘± |
---|---|
μ¬νμ μΌλ‘ 맀λ μ¦κ°νλ μ¬λ§μ μμ λμνμ¬, μ°λ¦¬μ μλΉμ€λ μ½λ‘λλ κ°μ’ μ¬κ³ λ‘ μΈν΄ κ°μμ€λ½κ² μ΄λ³μ κ²½ννκ³ , μ¬νμ μΆ©λΆν μ²λ¦¬ν μκ°μ‘°μ°¨ κ°μ§ λͺ»νλ μ΄λ€μκ² νμν μ§μ§μ μλ‘λ₯Ό μ 곡ν©λλ€.
μ΄λ¬ν μν©λ€μ κ°μΈμκ² κ·Ήμ¬ν μ€νΈλ μ€μ μ μ μ λΆλ΄μ κ°μ Έμ€λ©°, μ΄λ₯Ό μνμν€λ κ²μ΄ μ°λ¦¬ μλΉμ€μ ν΅μ¬ λͺ©νμ λλ€.
AIλ₯Ό νμ©ν κ³ μΈκ³Όμ μ±ν λ° μμ± λ³΅μ μλΉμ€
-
κ³ μΈμ ν μ€νΈ μ€νμΌμ μ¬ννλ μ±ν μλΉμ€
LLMμ νμ©νμ¬ κ³ μΈμ ν μ€νΈ μ€νμΌμ μ¬ννκ³ , μ±ν μ ν΅ν΄ μ€μκ°μΌλ‘ μνΈμμ©νλ©° κ³ μΈμ λν 그리μμ λ¬λ μ μμ΅λλ€.
-
κ³ μΈμ λͺ©μ리λ₯Ό μ¬ννλ μμ± λ³΅μ μλΉμ€
μμ± λ³΅μ λͺ¨λΈλ‘ κ³ μΈμ λͺ©μ리λ₯Ό μ¬ννμ¬ λμ± μμν λν κ²½νμ μ 곡ν©λλ€.
OS: Linux Ubuntu 22.04
Front-end: React Native, JavaScript, Expo
Back-end: Python 3.10, FastAPI
API: Clova speech API, OpenAI API, Kakao Login API
DB: MySQL, MongoDB, Docker, Docker-compose
Tool: Visual Studio Code, MySQL Workbench, MongoDB Compass, Docker Desktop, Swagger UI, Postman, Figma, notion
vos-server/
β
βββ backend/
β βββ app/
β β βββ ai_models/
β β β βββ speaker_identification/
β β β βββ clova_speech.py
β β β βββ postprocessing.py
β β β βββ text_generation/
β β β βββ characteristic_generation.py
β β β βββ chat_generation.py
β β β βββ crime_prevention.py
β β β βββ preprocessing.py
β β β βββ run_prompt.py
β β β βββ token_limit.py
β β β βββ voice_cloning/
β β β βββ xtts.py
β β β
β β βββ api/
β β β βββ admin.py
β β β βββ chat.py
β β β βββ star.py
β β β βββ user.py
β β β
β β βββ database/
β β β βββ connection.py
β β β βββ orm.py
β β β βββ repository.py
β β β
β β βββ resources/
β β β βββ audio/
β β β βββ images/
β β β βββ text/
β β β βββ crime_prevention.txt
β β β βββ extract_characteristic.txt
β β β βββ system_input.txt
β β β
β β βββ schema/
β β β βββ request.py
β β β βββ response.py
β β β
β β βββ service/
β β β βββ ai_serving.py
β β β βββ auth.py
β β β βββ s3_service.py
β β β
β β βββ main.py
β β βββ security.py
β β
β βββ requirements.txt
β
βββ .env
βββ .gitignore
βββ docker-compose.yml
βββ README.md
- λͺ¨λ°μΌ μ ν리μΌμ΄μ
μ μ μ΄κΈ°νλ©΄
- κΈ°μ‘΄ λ‘κ·ΈμΈ λ° μμΈμ€ ν ν° μ ν¨κΈ°κ° λ΄ μ± μ€ν μ λ°λ‘ κ³ μΈκ³Όμ μ±ν 리μ€νΈ νλ©΄ μ§μ
- μΉ΄μΉ΄μ€ λ‘κ·ΈμΈ APIλ₯Ό ν΅ν μμ λ‘κ·ΈμΈ κ΅¬ν
- μ΄λ©μΌ μ£Όμ ννλ‘ μμ΄λ μμ±
- μ΄λ©μΌ μ€λ³΅ νμΈ κΈ°λ₯μ ν΅ν΄ κΈ°μ‘΄ DBμ μ‘΄μ¬νμ§ μλ μμ΄λ μΌ κ²½μ° κ°μ κ°λ₯νλλ‘ κ΅¬ν
- βλΉλ°λ²νΈ νμΈβλμ ν΅ν΄ λΉλ°λ²νΈ μΌμΉ μ¬λΆ νλ¨
- μ½κ΄ λμ μ νμκ°μ κ°λ₯
- κ³ μΈμ κΈ°λ³Έ μ 보, νΉμ§(ν둬ννΈ μμ§λμ΄λ§μ νλ₯΄μλ λ°μ΄ν°), μ±ν μ€νμΌ μΆμΆ λ° κΈ°μ΅ νμ΅μ μν μΉ΄μΉ΄μ€ν‘ λν νμΌ λͺ¨λ μ λ ₯νμ¬μΌ λ³ μμ± κ°λ₯
- μ λ‘λ λ ν μ€νΈ νμΌμ νΉμ§ μΆμΆ λ° ν둬ννΈ λ°μ΄ν° DB μ μ₯
- κ³ μΈμ μμ±μ΄ λ΄κΈ΄ μ€λμ€ νμΌμ μ
λ ₯λ°κ³ AI λͺ¨λΈμ ν΅ν΄ νμ λΆλ¦¬
- μ¬λ¬ μ¬λμ λͺ©μλ¦¬κ° λ΄κΈ΄ νμΌλ μ λ‘λ λ° λΆλ¦¬ κ°λ₯
- νμμ μ λ§νΌ μ€λμ€ λ¦¬μ€νΈκ° μκΈ°κ³ νμμ λΆλ¦¬λ μμ± νμΌ μ€ κ°μ₯ κΈ΄ μ¬μ μκ°μ μ€λμ€λ₯Ό μνλ‘ μ 곡, μ¬μ λ²νΌμ ν΅ν΄ μ μ κ° νλμ© μ¬μν¨μΌλ‘μ¨ νμ κ΅¬λΆ λ° μ ν κ°λ₯
- μ νλ νμμ μμ±μ AI λͺ¨λΈμ ν΅ν΄ νΉμ§ μΆμΆ λ° λ²‘ν° λ°μ΄ν° DB μ μ₯
- λ³(κ³ μΈ)μ΄ μμ±λλ©΄ μ±ν 리μ€νΈμ μμ±λ λ³μ μλ§νΌ μ±ν 리μ€νΈ νκΈ°
- μ±ν
μ
- βλ©μμ§κ° μμ΅λλ€.β 문ꡬ νκΈ°
- μ±ν
ν
- λ§μ§λ§ μ±ν μ DBμμ μ‘°ν ν νκΈ°
- μ±ν
λ΅λ³ μμ±
- κ³ μΈμ μ±ν μ€νμΌ μ¬ν λ° κΈ°μ΅ κΈ°λ°μ λ©μμ§λ₯Ό μμ±ν΄ μ€μκ° μ±ν κΈ°λ₯ ꡬν
- λ©μμ§ λ²νΌμ 1μ΄ μ΄μ ν΄λ¦ν¨μΌλ‘μ¨ νμ λ©λ΄κ° λ±μ₯νκ³ βλͺ©μ리 λ£κΈ°β λ²νΌ ν΄λ¦ μ ν΄λΉ ν μ€νΈλ₯Ό κ³ μΈμ λͺ©μλ¦¬λ‘ μ¬ννλ μ€λμ€ μ¬μ
- κΈμ , κΈμ΅ κ΄λ ¨ λν λ΄μ© νμ§ μ βμμ¬μ€λ¬μ΄ λ©μμ§κ° κ°μ§λμμ΅λλ€. λ€μ λ©μμ§λ₯Ό μ μ‘ν΄μ£ΌμΈμ.β λΌλ λ©μμ§λ₯Ό λμ°λ©° λΆμ μ ν μλ΅μΌλ‘ μΈν λνκ° μ§νλμ§ μλλ‘ μ°¨λ¨ κΈ°λ₯ ꡬν
- κ³ μΈμ μ΄λ―Έμ§λ₯Ό λͺ¨λ°μΌκΈ°κΈ°μ μΊμνμΌλ‘ μμ μ μ₯ ν μ±ν λ°©μμ λΆλ¬μ€κΈ°
- λ©μΈμ§λ₯Ό long press μ 리μ€νΈ νμ , λͺ©μ리 λ£κΈ°κΈ°λ₯ μΆκ°
- Base64λ‘ μΈμ½λ©λ νμλ³ μμ± λ°μ΄ν°λ₯Ό expoμ Audioλ₯Ό μ΄μ©νμ¬ νλ‘ νΈμμ μ¬μ
- μ±ν λ°© μ μ₯ μ μΉ μμΌ μ€ν
- νμκ°μ μ λΉλ°λ²νΈ hash μνΈν ν DB μ μ₯
- HS256 μκ³ λ¦¬μ¦ μ¬μ© jwt μμ±
- λ‘κ·ΈμΈ μ λΉλ°λ²νΈ bcrypt μΈμ½λ© λ° plain, hash password κ²μ¦, access token λ°κΈ
- access token λ§λ£κΈ°κ° μ€μ μΌλ‘ ν΄λΉ κΈ°κ° λμ λ‘κ·ΈμΈ μ μ§ λ° API νΈμΆ κ°λ₯
- Database ORM(SQLAlchemy) μ μ©
- API μ€ν μ μ μ κ²μ¦ λ° μ‘°ν Dependency Injection
- λ°μ΄ν°λ² μ΄μ€ κ°μ 컨ν μ΄λ μ΄μ(MySQL, MongoDB)
- μ μ , κ³ μΈ μ΄λ―Έμ§ AWS S3 μ μ₯
- Voice Cloning λͺ¨λΈ μλΉ
- κ³ μΈ μμ± λ°μ΄ν°λ‘λΆν° μμ± νΉμ§ vector λ°μ΄ν° μΆμΆ λ° λ°μ΄ν°λ² μ΄μ€ μ μ₯ β μμ± μ¬μ μ λ°μ΄ν° μ‘°ν ν μμ± μ¬μ μ model, text, vector λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ μμ± λ³΅μ
π Text Generation (Prompt Engineering)
κ³ μΈμ μ±ν μ€νμΌμ λ°μνμ¬ ν μ€νΈ λ΅λ³μ μμ±νλ ν둬ννΈ μ μ
-
ν μ€νΈ νΉμ§ μΆμΆ ν둬ννΈ (GPT-3.5)
κ³ μΈμ ν μ€νΈμμ νΉμ§μ μΈ μμλ₯Ό 10κ°μ§ λ΄μΈλ‘ μΆμΆ
μΆμΆλ νΉμ§μ μ±ν μμ± ν둬ννΈμ μ¬μ©
-
μ±ν μμ± ν둬ννΈ (GPT-4)
κ³ μΈμ μ±ν μ€νμΌμ λ¬μ¬νμ¬ κ³ μΈμ μ±ν μ€νμΌκ³Ό μ μ¬ν λ΅λ³μ μμ±
κ³ μΈμ νλ₯΄μλλ₯Ό μ£Όμ νκ³ , chain-of-thought / least-to-most λ±μ κΈ°λ²μ μν
-
보μ΄μ€νΌμ± λ°©μ§ ν둬ννΈ (GPT-3.5)
λ³Έ μλΉμ€κ° λ²μ£μ μ μ©λλ κ²μ λ°©μ§νκΈ° μν΄ μ±ν λ΄μ©μμ μμ¬μ€λ¬μ΄ λ©μμ§λ₯Ό κ°μ§
ποΈ Speaker Identification
λ€μμ νμκ° λ΄κΈ΄ μμ±νμΌμμ κ³ μΈμ λͺ©μλ¦¬λ§ μΆμΆ
Svoice | SpeechBrain | VoiceFilter | Clova speech AI | |
---|---|---|---|---|
model weight μ 곡 | O | O | O | O |
3λͺ μ΄μ λΆλ¦¬ | O | X | X | O |
confidence μ 곡 | X | X | X | O |
β 3λͺ μ΄μμ νμ λΆλ¦¬ κ°λ₯ μ¬λΆ λ° μ±λ₯μ κ³ λ €νμ¬ Clova speech AI μ μ
π Voice cloning
μΆμΆλ κ³ μΈμ μμ±κ³Ό μμ±λ ν μ€νΈλ₯Ό νμ©ν΄ κ³ μΈ λͺ©μ리 볡μ
SCE-TTS | Bark | vall-e | xtts-v2 | |
---|---|---|---|---|
zero-shot | x | o | o | o |
νκ΅μ΄ μ§μ | o | x | x | o |
inference data | 3μκ° | 3μ΄ | 3μ΄ | 3μ΄ |
β νκ΅μ΄ μ§μ λ° μμ± λ³΅μ μ±λ₯μ κ³ λ €νμ¬ xtts-v2 μ μ
1-1. pytorch μ€μΉ
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
1-2. requirements μ€μΉ
pip install -r backend/requirements.txt
1-3. ffmpeg μ€μΉ
sudo apt install ffmpeg
3κ°μ§ ν둬ννΈ νμΌμ κ°κ°μ κ²½λ‘μ μΆκ°ν©λλ€.
PROMPT_FILE_PATH (κ³ μΈ ν μ€νΈ νΉμ§μ μΆμΆνλ ν둬ννΈ)
VOS-server/backend/app/resources/text/extract_characteristic.txt
SYSTEM_INPUT_PATH (κ³ μΈμ ν μ€νΈ μ€νμΌκ³Ό μ μ¬ν μ±ν μλ΅μ μ λνλ ν둬ννΈ)
VOS-server/backend/app/resources/text/system_input.txt
VOICE_PHISHING_PROMPT_PATH (보μ΄μ€νΌμ± κ°μ§ ν둬ννΈ)
VOS-server/backend/app/resources/text/crime_prevention.txt
.env νμΌ λ΄ νκ²½λ³μ μΈν μ΄ νμν©λλ€.
[μμ± μμ]
SECRET_KEY="jwt μμ±μ μν λλ€ν λΉλ°ν€" # μμ±λ°©λ²: terminal> openssl rand -hex 32
JWT_ALGORITHM="JWT μκ³ λ¦¬μ¦" # μμ: HS256
# MySQL
MYSQL_URL="MYSQL URL" # μμ: mysql+pymysql://root:vos@127.0.0.1:3306/vos"
MYSQL_BINDING_PORT="MYSQL BINDING PORT" # μμ: 3306
MYSQL_PORT= "MYSQL PORT" # μμ: 3306
MYSQL_DATABASE="DATABASE NAME"
MYSQL_USER="USER NAME"
MYSQL_PASSWORD="MYSQL PASSWORD"
MYSQL_ROOT_PASSWORD="MYSQL ROOT PASSWORD"
# MongoDB
MONGO_URI="MongoDB URI" # μμ: mongodb://vos:vos@localhost:27017/
MONGO_BINDING_PORT="MongoDB BINDING PORT" # μμ: 27017
MONGO_INITDB_ROOT_USERNAME="MongoDB USER NAME"
MONGO_INITDB_ROOT_PASSWORD="MongoDB USER PASSWORD"
# AI
INVOKE_URL="CLOVA SPEECH INVOKE URL"
CLOVA_SECRET_KEY="CLOVA SPEECH SECRET KEY"
GPT_API_KEY = "ChatGPT API KEY"
VOICE_CLONING_MODEL_PATH="tts_models/multilingual/multi-dataset/xtts_v2"
COMBINED_STAR_VOICE_FILE_PATH="VOS-server/backend/app/resources/audio"
# Prompt
PROMPT_FILE_PATH="VOS-server/backend/app/resources/text/extract_characteristic.txt"
SYSTEM_INPUT_PATH="VOS-server/backend/app/resources/text/system_input.txt"
VOICE_PHISHING_PROMPT_PATH="VOS-server/backend/app/resources/text/crime_prevention.txt"
# CORS
ORIGIN="Allowance Domain"
# AWS S3
S3_BUCKET="BUCKET NAME"
AWS_ACCESS_KEY_ID="AWS ACCESS KEY ID"
AWS_SECRET_ACCESS_KEY="AWS SECRET ACCESS KEY"
cd backend/app
uvicorn main:app --host 0.0.0.0 --port 8000
docker-compose up -d