๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ
๊ฒฝ๊ณ 

์ด ํŠœํ† ๋ฆฌ์–ผ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ์—ฌ์ด๋ฉฐ Open WebUI ํŒ€์—์„œ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ํŠœํ† ๋ฆฌ์–ผ์€ ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž๊ฒŒ Open WebUI๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‹œ์—ฐํ•˜๋Š” ์šฉ๋„๋กœ๋งŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์œผ์‹ ๊ฐ€์š”? ๊ธฐ์—ฌ ํŠœํ† ๋ฆฌ์–ผ์„ ํ™•์ธํ•˜์„ธ์š”.

Docker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Open WebUI์— openedai-speech ํ†ตํ•ฉํ•˜๊ธฐ

openedai-speech๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?โ€‹

์ •๋ณด

openedai-speech๋Š” OpenAI ์˜ค๋””์˜ค/์Œ์„ฑ API์™€ ํ˜ธํ™˜๋˜๋Š” ํ…์ŠคํŠธ-์Œ์„ฑ ๋ณ€ํ™˜ ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

์ด ์„œ๋น„์Šค๋Š” /v1/audio/speech ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๋งž์ถคํ˜• ์Œ์„ฑ ๋ณต์ œ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ๋ฌด๋ฃŒ ๋ฐ ๊ฐœ์ธ์ ์ธ ํ…์ŠคํŠธ-์Œ์„ฑ ๋ณ€ํ™˜ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ์„œ๋น„์Šค๋Š” OpenAI์™€ ์ œํœด๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ OpenAI API ํ‚ค๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ•„์ˆ˜ ์š”๊ฑดโ€‹

  • ์‹œ์Šคํ…œ์— Docker ์„ค์น˜๋จ
  • Docker ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ ์ค‘์ธ Open WebUI
  • Docker ๋ฐ Docker Compose์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ดํ•ด

์˜ต์…˜ 1: Docker Compose ์‚ฌ์šฉโ€‹

1๋‹จ๊ณ„: openedai-speech ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ์ƒˆ ํด๋” ์ƒ์„ฑโ€‹

docker-compose.yml ๋ฐ speech.env ํŒŒ์ผ์„ ์ €์žฅํ•  ์ƒˆ๋กœ์šด ํด๋”, ์˜ˆ๋ฅผ ๋“ค์–ด openedai-speech-service,๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

2๋‹จ๊ณ„: GitHub์—์„œ openedai-speech ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ณต์ œโ€‹

git clone https://github.com/matatonic/openedai-speech.git

์ด ๋ช…๋ น์€ openedai-speech ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋กœ์ปฌ ๋จธ์‹ ์— ๋‹ค์šด๋กœ๋“œํ•˜๋ฉฐ, Docker Compose ํŒŒ์ผ(docker-compose.yml, docker-compose.min.yml, ๋ฐ docker-compose.rocm.yml)๊ณผ ๊ธฐํƒ€ ํ•„์š”ํ•œ ํŒŒ์ผ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

3๋‹จ๊ณ„: sample.env ํŒŒ์ผ์„ speech.env๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ (ํ•„์š” ์‹œ ์‚ฌ์šฉ์ž ์ง€์ •)โ€‹

openedai-speech ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํด๋”์—์„œ ๋‹ค์Œ ๋‚ด์šฉ์„ ๊ฐ€์ง„ speech.env๋ผ๋Š” ์ƒˆ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

TTS_HOME=voices
HF_HOME=voices
#PRELOAD_MODEL=xtts
#PRELOAD_MODEL=xtts_v2.0.2
#PRELOAD_MODEL=parler-tts/parler_tts_mini_v0.1
#EXTRA_ARGS=--log-level DEBUG --unload-timer 300
#USE_ROCM=1

4๋‹จ๊ณ„: Docker Compose ํŒŒ์ผ ์„ ํƒโ€‹

๋‹ค์Œ Docker Compose ํŒŒ์ผ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • docker-compose.yml: ์ด ํŒŒ์ผ์€ ghcr.io/matatonic/openedai-speech ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ Dockerfile์—์„œ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • docker-compose.min.yml: ์ด ํŒŒ์ผ์€ ghcr.io/matatonic/openedai-speech-min ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ Dockerfile.min์—์„œ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด ์ด๋ฏธ์ง€๋Š” Piper ์ง€์›๋งŒ ํฌํ•จ๋œ ์ตœ์†Œ ๋ฒ„์ „์œผ๋กœ GPU๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • docker-compose.rocm.yml: ์ด ํŒŒ์ผ์€ ghcr.io/matatonic/openedai-speech-rocm ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ROCm ์ง€์›์ด ํฌํ•จ๋œ Dockerfile์—์„œ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

4๋‹จ๊ณ„: ์„ ํƒํ•œ Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œโ€‹

Docker Compose ํŒŒ์ผ ์‹คํ–‰ ์ „์— Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • Nvidia GPU(CUDA ์ง€์›):
docker build -t ghcr.io/matatonic/openedai-speech .
  • AMD GPU(ROCm ์ง€์›):
docker build -f Dockerfile --build-arg USE_ROCM=1 -t ghcr.io/matatonic/openedai-speech-rocm .
  • CPU ์ „์šฉ, GPU ์—†์Œ(Piper๋งŒ ์ง€์›):
docker build -f Dockerfile.min -t ghcr.io/matatonic/openedai-speech-min .

5๋‹จ๊ณ„: ์˜ฌ๋ฐ”๋ฅธ docker compose up -d ๋ช…๋ น ์‹คํ–‰โ€‹

  • Nvidia GPU(CUDA ์ง€์›): openedai-speech ์„œ๋น„์Šค๋ฅผ ๋ฐํƒฏ ๋ชจ๋“œ์—์„œ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์„ธ์š”:
docker compose up -d
  • AMD GPU(ROCm ์ง€์›): openedai-speech ์„œ๋น„์Šค๋ฅผ ๋ฐํƒฏ ๋ชจ๋“œ์—์„œ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์„ธ์š”:
docker compose -f docker-compose.rocm.yml up -d
  • ARM64(Apple M-series, Raspberry Pi): ์—ฌ๊ธฐ์„œ๋Š” XTTS๊ฐ€ CPU ์ง€์›๋งŒ ๋ฐ›์œผ๋ฉฐ ๋งค์šฐ ๋А๋ฆฝ๋‹ˆ๋‹ค. XTTS๋ฅผ ์‚ฌ์šฉํ•ด CPU(๋А๋ฆผ)๋กœ Nvidia ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ Piper๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค:
docker compose -f docker-compose.min.yml up -d
  • CPU ์ „์šฉ, GPU ์—†์Œ(Piper๋งŒ ์ง€์›): Piper ์ง€์›๋งŒ ํฌํ•จ๋œ ์ตœ์†Œ docker ์ด๋ฏธ์ง€ ์‚ฌ์šฉ - ํฌ๊ธฐ๊ฐ€ ์•ฝ 1GB(< 1GB vs. 8GB):
docker compose -f docker-compose.min.yml up -d

์ด ๋ช…๋ น์€ openedai-speech ์„œ๋น„์Šค๋ฅผ ๋ฐํƒฏ ๋ชจ๋“œ์—์„œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์˜ต์…˜ 2: Docker Run ๋ช…๋ น ์‚ฌ์šฉโ€‹

๋‹ค์Œ์˜ Docker ์‹คํ–‰ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ openedai-speech ์„œ๋น„์Šค๋ฅผ ๋ถ„๋ฆฌ๋œ ๋ชจ๋“œ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • Nvidia GPU (CUDA): ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ openedai-speech ์„œ๋น„์Šค๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‹œ์ž‘ํ•˜์„ธ์š”:
docker build -t ghcr.io/matatonic/openedai-speech .
docker run -d --gpus=all -p 8000:8000 -v voices:/app/voices -v config:/app/config --name openedai-speech ghcr.io/matatonic/openedai-speech
  • ROCm (AMD GPU): ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ openedai-speech ์„œ๋น„์Šค๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‹œ์ž‘ํ•˜์„ธ์š”:

ROCm ์ง€์›์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด speech.env ํŒŒ์ผ์—์„œ #USE_ROCM=1 ์ค„์˜ ์ฃผ์„์„ ํ•ด์ œํ•˜์„ธ์š”.

docker build -f Dockerfile --build-arg USE_ROCM=1 -t ghcr.io/matatonic/openedai-speech-rocm .
docker run -d --privileged --init --name openedai-speech -p 8000:8000 -v voices:/app/voices -v config:/app/config ghcr.io/matatonic/openedai-speech-rocm
  • CPU ์ „์šฉ, GPU ์—†์Œ (Piper๋งŒ ์‚ฌ์šฉ): ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ openedai-speech ์„œ๋น„์Šค๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‹œ์ž‘ํ•˜์„ธ์š”:
docker build -f Dockerfile.min -t ghcr.io/matatonic/openedai-speech-min .
docker run -d -p 8000:8000 -v voices:/app/voices -v config:/app/config --name openedai-speech ghcr.io/matatonic/openedai-speech-min

6๋‹จ๊ณ„: Open WebUI์„ TTS์— openedai-speech๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•˜๊ธฐโ€‹

openedai-tts

Open WebUI ์„ค์ •์„ ์—ด๊ณ  ๊ด€๋ฆฌ ํŒจ๋„ > ์„ค์ • > ์˜ค๋””์˜ค์˜ TTS ์„ค์ •์œผ๋กœ ์ด๋™ํ•˜์„ธ์š”. ์•„๋ž˜ ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”:

  • API ๊ธฐ๋ณธ URL: http://host.docker.internal:8000/v1
  • API ํ‚ค: sk-111111111 (์ด๊ฒƒ์€ ์˜ˆ์ œ API ํ‚ค์ด๋ฉฐ, openedai-speech๋Š” API ํ‚ค๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ํ•„๋“œ์— ๋ฌด์—‡์ด๋“  ์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.)

7๋‹จ๊ณ„: ๋ชฉ์†Œ๋ฆฌ ์„ ํƒํ•˜๊ธฐโ€‹

TTS Voice์—์„œ Admin Panel์˜ ์˜ค๋””์˜ค ์„ค์ • ๋ฉ”๋‰ด์—์„œ ์•„๋ž˜์˜ ์„ ํƒ์ง€ ์ค‘์—์„œ ์‚ฌ์šฉํ•  TTS ๋ชจ๋ธ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋ธ์˜ ๋ชฉ์†Œ๋ฆฌ๋Š” ์˜์–ด์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • tts-1 ๋˜๋Š” tts-1-hd: alloy, echo, echo-alt, fable, onyx, nova, ๊ทธ๋ฆฌ๊ณ  shimmer (tts-1-hd๋Š” ์„ค์ • ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ OpenAI ์ƒ˜ํ”Œ์„ ์‚ฌ์šฉ)

8๋‹จ๊ณ„: ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ €์žฅํ•˜๊ณ  ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋“ค๋ฆฌ๋Š” ๋ชฉ์†Œ๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•˜์„ธ์š”โ€‹

์ €์žฅ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ Open WebUI ์„ค์ •์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜์„ธ์š”. ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๊ณ ์ณ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์™„์ „ํžˆ ์ ์šฉ๋˜๋„๋ก ํ•˜๊ณ  openedai-speech ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์—ฐ์Šค๋Ÿฌ์šด ์Œ์„ฑ์œผ๋กœ ํ…์ŠคํŠธ ์‘๋‹ต์„ ์ฝ์–ด์ฃผ๋Š” ํ…์ŠคํŠธ ์Œ์„ฑ ๋ณ€ํ™˜์„ ์ฆ๊ธฐ์„ธ์š”.

๋ชจ๋ธ ์„ธ๋ถ€ ์‚ฌํ•ญ:โ€‹

openedai-speech๋Š” ๊ฐ๊ฐ ๊ณ ์œ ํ•œ ๊ฐ•์ ๊ณผ ์š”๊ตฌ ์กฐ๊ฑด์„ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ํ…์ŠคํŠธ ์Œ์„ฑ ๋ณ€ํ™˜ ๋ชจ๋ธ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ชจ๋ธ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค:

  • Piper TTS (๋งค์šฐ ๋น ๋ฅด๊ณ  CPU์—์„œ ์‹คํ–‰๋จ): voice_to_speaker.yaml ๊ตฌ์„ฑ ํŒŒ์ผ์„ ํ†ตํ•ด Piper ๋ชฉ์†Œ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋ธ์€ ๋‚ฎ์€ ์ง€์—ฐ ์‹œ๊ฐ„๊ณผ ๋†’์€ ์„ฑ๋Šฅ์ด ํ•„์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. Piper TTS๋Š” ๋‹ค๊ตญ์–ด ๋ชฉ์†Œ๋ฆฌ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • Coqui AI/TTS XTTS v2 (๋น ๋ฅด์ง€๋งŒ ์•ฝ 4GB GPU VRAM๊ณผ CUDA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Nvidia GPU ํ•„์š”): ์ด ๋ชจ๋ธ์€ Coqui AI์˜ XTTS v2 ์Œ์„ฑ ๋ณต์ œ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ํ’ˆ์งˆ ๋ชฉ์†Œ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋” ๊ฐ•๋ ฅํ•œ GPU๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ ํ›Œ๋ฅญํ•œ ์„ฑ๋Šฅ๊ณผ ๊ณ ํ’ˆ์งˆ ์˜ค๋””์˜ค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Coqui๋Š” ๋‹ค๊ตญ์–ด ๋ชฉ์†Œ๋ฆฌ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • Beta Parler-TTS Support (์‹คํ—˜์ ์ด๊ณ  ๋А๋ฆผ): ์ด ๋ชจ๋ธ์€ Parler-TTS ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชฉ์†Œ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฒ ํƒ€ ์ƒํƒœ์ด์ง€๋งŒ ์Šคํ”ผ์ปค ๋ชฉ์†Œ๋ฆฌ์˜ ๊ธฐ๋ณธ ํŠน์ง•์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ๋ชฉ์†Œ๋ฆฌ๋Š” ์ƒ์„ฑ๋งˆ๋‹ค ์•ฝ๊ฐ„ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ œ๊ณต๋œ ์Šคํ”ผ์ปค ์„ค๋ช…๊ณผ ์œ ์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชฉ์†Œ๋ฆฌ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์˜๊ฐ์„ ์–ป์œผ๋ ค๋ฉด Text Description to Speech๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฌธ์ œ ํ•ด๊ฒฐโ€‹

openedai-speech๋ฅผ Open WebUI์— ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ์•„๋ž˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ผ์ฃผ์„ธ์š”:

  • openedai-speech ์„œ๋น„์Šค ํ™•์ธ: openedai-speech ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ด๊ณ  docker-compose.yml ํŒŒ์ผ์— ์ง€์ •๋œ ํฌํŠธ๊ฐ€ ๋…ธ์ถœ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
  • host.docker.internal์— ๋Œ€ํ•œ ์ ‘๊ทผ ํ™•์ธ: Open WebUI ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ host.docker.internal ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ด ํ•ด์„ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•˜์„ธ์š”. ์ด๋Š” openedai-speech๊ฐ€ PC์˜ localhost๋ฅผ ํ†ตํ•ด ๋…ธ์ถœ๋˜์ง€๋งŒ open-webui๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ์—์„œ ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ์— ๋งˆ์šดํŠธํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ๋ฅผ ๋“ค์–ด openedai-speech๊ฐ€ ์ œ๊ณตํ•  ๋””๋ ‰ํ† ๋ฆฌ์— ๋ณผ๋ฅจ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด docker-compose.yml ํŒŒ์ผ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • API ํ‚ค ์„ค์ • ๊ฒ€ํ† : openedai-speech๋Š” API ํ‚ค๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ API ํ‚ค๊ฐ€ ๋”๋ฏธ ๊ฐ’์œผ๋กœ ์„ค์ •๋˜์—ˆ๊ฑฐ๋‚˜ ์ฒดํฌ ํ•ด์ œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
  • ์Œ์„ฑ ์„ค์ • ํ™•์ธ: TTS์— ์‚ฌ์šฉํ•  ์Œ์„ฑ์ด voice_to_speaker.yaml ํŒŒ์ผ์— ์กด์žฌํ•˜๋ฉฐ, ํ•ด๋‹น ํŒŒ์ผ(์˜ˆ: ์Œ์„ฑ XML ํŒŒ์ผ)์ด ์˜ฌ๋ฐ”๋ฅธ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
  • ์Œ์„ฑ ๋ชจ๋ธ ๊ฒฝ๋กœ ํ™•์ธ: ์Œ์„ฑ ๋ชจ๋ธ ๋กœ๋“œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, voice_to_speaker.yaml ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๊ฐ€ ์‹ค์ œ ์Œ์„ฑ ๋ชจ๋ธ ์œ„์น˜์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ๋‹ค์‹œ ํ™•์ธํ•˜์„ธ์š”.

์ถ”๊ฐ€ ๋ฌธ์ œ ํ•ด๊ฒฐ ํŒโ€‹

  • openedai-speech ๋กœ๊ทธ์—์„œ ๋ฌธ์ œ์˜ ์›์ธ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์˜ค๋ฅ˜ ๋˜๋Š” ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
  • docker-compose.yml ํŒŒ์ผ์ด ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
  • ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด openedai-speech ์„œ๋น„์Šค๋‚˜ ๋„์ปค ํ™˜๊ฒฝ ์ „์ฒด๋ฅผ ์žฌ์‹œ์ž‘ํ•ด ๋ณด์„ธ์š”.
  • ๋ฌธ์ œ๊ฐ€ ์ง€์†๋˜๋ฉด openedai-speech GitHub ์ €์žฅ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ๊ด€๋ จ ์ปค๋ฎค๋‹ˆํ‹ฐ ํฌ๋Ÿผ์—์„œ ๋„์›€์„ ์š”์ฒญํ•˜์„ธ์š”.

FAQโ€‹

์ƒ์„ฑ๋œ ์˜ค๋””์˜ค์˜ ๊ฐ์ • ๋ฒ”์œ„๋ฅผ ์–ด๋–ป๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

์ƒ์„ฑ๋œ ์˜ค๋””์˜ค์˜ ๊ฐ์ • ์ถœ๋ ฅ์„ ์ง์ ‘์ ์œผ๋กœ ์ œ์–ดํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€๋ฌธ์ž ์‚ฌ์šฉ์ด๋‚˜ ๋ฌธ๋ฒ• ๊ฐ™์€ ํŠน์ • ์š”์†Œ๋Š” ์ถœ๋ ฅ ์˜ค๋””์˜ค์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋Š” ํ˜ผ์žฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์Œ์„ฑ ํŒŒ์ผ์€ ์–ด๋””์— ์ €์žฅ๋˜๋‚˜์š”? ์„ค์ • ํŒŒ์ผ์€ ์–ด๋””์— ์žˆ๋‚˜์š”?

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์Œ์„ฑ ๋ฐ ํ•ด๋‹น ์†์„ฑ์„ ์ •์˜ํ•˜๋Š” ์„ค์ • ํŒŒ์ผ์€ config ๋ณผ๋ฅจ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์Œ์„ฑ์€ voice_to_speaker.default.yaml์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ๋ฆฌ์†Œ์Šคโ€‹

openedai-speech๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก Open WebUI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•(ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• ํฌํ•จ)์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Open WebUI ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

openedai-speech์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์ €์žฅ์†Œ๋ฅผ ๋ฐฉ๋ฌธํ•˜์„ธ์š”.

openedai-speech์— ์ƒˆ๋กœ์šด ์Œ์„ฑ ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•: Custom-Voices-HowTo

๋…ธํŠธ

docker-compose.yml ํŒŒ์ผ์—์„œ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์—ด๋ ค ์žˆ๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํฌํŠธ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Open WebUI ๊ด€๋ฆฌ์ž ์˜ค๋””์˜ค ์„ค์ •์—์„œ API Base URL์„ ํ•ด๋‹น ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”.