보이스챗 AI(Voice Chat AI)는 음성을 이용해 다양한 AI 캐릭터와 상호작용할 수 있는 프로젝트입니다. 각각 독특한 개성과 목소리를 지닌 다양한 캐릭터 중에서 선택할 수 있습니다. Albert Einstein과 진지한 대화를 나누거나 영화 HER의 OS를 사용하여 역할극을 즐겨보세요.
모두 로컬에서 실행할 수 있고 채팅과 음성에 openai를 사용할 수 있으며 둘을 혼합할 수 있습니다. 웹 UI에서 모두 제어되는 ollama 모델과 함께 ElevenLabs 음성을 사용할 수 있습니다. AI에게 화면을 보라고 요청하면 보고 있는 내용을 자세히 설명해줍니다.
저장소를 복제합니다.
git clone https://github.com/bigsk1/voice-chat-ai.git
cd voice-chat-ai
CPU 전용 버전: CPU 전용 브랜치 https://github.com/bigsk1/voice-chat-ai/tree/cpu-only 복제
가상 환경 만들기: ?
python -m venv venv
source venv/bin/activate # On Windows use `venvScriptsActivate`
아니면 conda
사용하여 Python 3.10으로 만드세요.
conda create --name voice-chat-ai python=3.10
conda activate voice-chat-ai
종속성을 설치합니다.
Windows에만 해당: TTS용 Windows에는 Microsoft C++ 14.0 이상의 빌드 도구가 필요합니다. Microsoft 빌드 도구
GPU(CUDA) 버전: 권장
CUDA 지원 PyTorch 및 기타 종속성 설치
pip install torch==2.3.1+cu121 torchaudio==2.3.1+cu121 torchvision==0.18.1+cu121 -f https://download.pytorch.org/whl/torch_stable.html
pip install -r requirements.txt
CPU 전용 버전: CPU 전용 브랜치 https://github.com/bigsk1/voice-chat-ai/tree/cpu-only 복제
# For CPU-only installations, use:
pip install -r cpu_requirements.txt
Windows 터미널(winget install ffmpeg)에서 ffmpeg를 다운로드했는지 확인하거나 https://ffmpeg.org/download.html을 확인한 다음 셸 또는 vscode를 다시 시작하고 ffmpeg -version을 입력하여 올바르게 설치되었는지 확인하세요.
로컬 TTS는 nvidia GPU https://developer.nvidia.com/cudnn을 사용하기 위해 cuDNN이 필요할 수도 있으며 C:Program FilesNVIDIACUDNNv9.5bin12.6이 시스템 PATH에 있는지 확인하세요.
이 프로젝트에 사용된 모델에 대한 체크포인트를 다운로드해야 합니다. GitHub 릴리스 페이지에서 다운로드하고 프로젝트 폴더에 zip을 추출할 수 있습니다.
다운로드 후 폴더를 다음과 같이 배치하세요.
voice-chat-ai/
├── checkpoints/
│ ├── base_speakers/
│ │ ├── EN/
│ │ │ └── checkpoint.pth
│ │ ├── ZH/
│ │ │ └── checkpoint.pth
│ ├── converter/
│ │ └── checkpoint.pth
├── XTTS-v2/
│ ├── config.json
│ ├── other_xtts_files...
다음 명령을 사용하여 파일을 프로젝트 디렉터리에 직접 다운로드하고 추출할 수 있습니다.
# Navigate to the project directory
cd /path/to/your/voice-chat-ai
# Download and extract checkpoints.zip
wget https://github.com/bigsk1/voice-chat-ai/releases/download/models/checkpoints.zip
unzip checkpoints.zip -d .
# Download and extract XTTS-v2.zip
wget https://github.com/bigsk1/voice-chat-ai/releases/download/models/XTTS-v2.zip
unzip XTTS-v2.zip -d .
이 이미지는 모든 체크포인트, 기본 이미지, 빌드 도구 및 오디오 도구로 인해 빌드되었을 때 매우 큽니다. - 40GB - 더 작게 만들 수 있는 방법이 있을 수 있습니다. 아직 시도하지 않았습니다. 이미지를 얻을 수 있는지 알아보기 위한 실험일 뿐입니다. 일하다!
Docker 실행 명령을 사용하면 Docker 컨테이너에서 마이크를 사용할 수 있습니다.
docker build -t voice-chat-ai .
wsl을 사용하는 Windows Docker 데스크탑에서 - Windows에서 실행
wsl docker run -d --gpus all -e " PULSE_SERVER=/mnt/wslg/PulseServer " -v /mnt/wslg/:/mnt/wslg/ --env-file .env --name voice-chat-ai -p 8000:8000 voice-chat-ai:latest
WSL에서 실행
docker run -d --gpus all -e " PULSE_SERVER=/mnt/wslg/PulseServer " -v \ wsl$ U buntu m nt w slg:/mnt/wslg/ --env-file .env --name voice-chat-ai -p 8000:8000 voice-chat-ai:latest
docker 폴더에는 모델 및 tts 공급자를 컨테이너로 업데이트하는 스크립트도 있으므로 컨테이너에 실행하여 수동으로 변경하는 대신 원할 경우 openai에서 ollama로 변경하고 다시 되돌릴 수 있습니다.
.env
로 바꾸고 필요한 환경 변수로 구성합니다. - 앱은 추가한 변수에 따라 제어됩니다. # Conditional API Usage:
# Depending on the value of MODEL_PROVIDER, the corresponding service will be used when run.
# You can mix and match, use Ollama with OpenAI speech or use OpenAI chat model with local XTTS or xAI chat etc..
# Model Provider: openai or ollama or xai
MODEL_PROVIDER = ollama
# Character to use - Options: alien_scientist, anarchist, bigfoot, chatgpt, clumsyhero, conandoyle, conspiracy, cyberpunk,
# detective, dog, dream_weaver, einstein, elon_musk, fight_club, fress_trainer, ghost, granny, haunted_teddybear, insult, joker, morpheus,
# mouse, mumbler, nebula_barista, nerd, newscaster_1920s, paradox, pirate, revenge_deer, samantha, shakespeare, split, telemarketer,
# terminator, valleygirl, vampire, vegetarian_vampire, wizard, zombie_therapist, grok_xai
CHARACTER_NAME = pirate
# Text-to-Speech (TTS) Configuration:
# TTS Provider - Options: xtts (local uses the custom character .wav) or openai (uses OpenAI TTS voice) or elevenlabs
TTS_PROVIDER = elevenlabs
# OpenAI TTS Voice - Used when TTS_PROVIDER is set to openai above
# Voice options: alloy, echo, fable, onyx, nova, shimmer
OPENAI_TTS_VOICE = onyx
# ElevenLabs Configuration:
ELEVENLABS_API_KEY = your_api_key_here
# Default voice ID
ELEVENLABS_TTS_VOICE = pgCnBQgKPGkIP8fJuita
# XTTS Configuration:
# The voice speed for XTTS only (1.0 - 1.5, default is 1.1)
XTTS_SPEED = 1.2
# OpenAI Configuration:
# OpenAI API Key for models and speech (replace with your actual API key)
OPENAI_API_KEY = your_api_key_here
# Models to use - OPTIONAL: For screen analysis, if MODEL_PROVIDER is ollama, llava will be used by default.
# Ensure you have llava downloaded with Ollama. If OpenAI is used, gpt-4o-mini works well. xai not supported yet falls back to openai if xai is selected and you ask for screen analysis.
OPENAI_MODEL = gpt-4o-mini
# Endpoints:
# Set these below and no need to change often
OPENAI_BASE_URL = https://api.openai.com/v1/chat/completions
OPENAI_TTS_URL = https://api.openai.com/v1/audio/speech
OLLAMA_BASE_URL = http://localhost:11434
# Models Configuration:
# Models to use - llama3.2 works well for local usage.
OLLAMA_MODEL = llama3.2
# xAI Configuration
XAI_MODEL = grok-beta
XAI_API_KEY = your_api_key_here
XAI_BASE_URL = https://api.x.ai/v1
# NOTES:
# List of trigger phrases to have the model view your desktop (desktop, browser, images, etc.).
# It will describe what it sees, and you can ask questions about it:
# "what's on my screen", "take a screenshot", "show me my screen", "analyze my screen",
# "what do you see on my screen", "screen capture", "screenshot"
# To stop the conversation, say "Quit", "Exit", or "Leave". ( ctl+c always works also)
애플리케이션을 실행하세요: ?
웹 UI
uvicorn app.main:app --host 0.0.0.0 --port 8000
http://localhost:8000/에서 찾으세요.
CLI 전용
python cli.py
elevenlabs_voices.json
에 이름과 음성 ID를 추가하세요. webui의 드롭다운 메뉴에서 선택할 수 있습니다.
{
"voices" : [
{
"id" : " 2bk7ULW9HfwvcIbMWod0 " ,
"name" : " Female - Bianca - City girl "
},
{
"id" : " JqseNhWbQb1GDNNS1Ga1 " ,
"name" : " Female - Joanne - Pensive, introspective "
},
{
"id" : " b0uJ9TWzQss61d8f2OWX " ,
"name" : " Female - Lucy - Sweet and sensual "
},
{
"id" : " 2pF3fJJNnWg1nDwUW5CW " ,
"name" : " Male - Eustis - Fast speaking "
},
{
"id" : " pgCnBQgKPGkIP8fJuita " ,
"name" : " Male - Jarvis - Tony Stark AI "
},
{
"id" : " kz8mB8WAwV9lZ0fuDqel " ,
"name" : " Male - Nigel - Mysterious intriguing "
},
{
"id" : " MMHtVLagjZxJ53v4Wj8o " ,
"name" : " Male - Paddington - British narrator "
},
{
"id" : " 22FgtP4D63L7UXvnTmGf " ,
"name" : " Male - Wildebeest - Deep male voice "
}
]
}
CLI의 경우 .env의 음성 ID가 사용됩니다.
말하기를 시작하려면 시작을 누르세요. 잠시 휴식을 취하고, 다시 준비가 되면 다시 시작하세요. 드롭다운에서 캐릭터와 음성을 변경하려면 중지를 누르세요. 드롭다운 메뉴에서 원하는 모델 공급자와 TTS 공급자를 선택할 수도 있으며, 앞으로는 선택한 공급자가 업데이트되어 사용됩니다. Exit, Leave 또는 Quit라고 말하는 것은 중지를 누르는 것과 같습니다.
http://로컬호스트:8000/
썸네일을 클릭하시면 영상이 열립니다☝️
character/wizard
).character/wizard/wizard.txt
).character/wizard/prompts.json
). wizard.txt
AI가 자신이 누구인지 알아내는 데 사용되는 프롬프트입니다.
You are a wise and ancient wizard who speaks with a mystical and enchanting tone. You are knowledgeable about many subjects and always eager to share your wisdom.
prompts.json
이것은 감정 분석을 위한 것입니다. 사용자가 말하는 내용을 기반으로 AI가 특정 방식으로 응답하도록 안내할 수 있습니다. 사용자가 말할 때 TextBlob
분석기가 사용되고 점수가 부여됩니다. 해당 점수를 기반으로 아래에 표시된 기분과 연결되어 다음으로 전달됩니다. 후속 응답의 AI는 귀하의 기분을 설명하여 AI가 특정 스타일로 응답하도록 안내합니다.
{
"joyful" : " RESPOND WITH ENTHUSIASM AND WISDOM, LIKE A WISE OLD SAGE WHO IS HAPPY TO SHARE HIS KNOWLEDGE. " ,
"sad" : " RESPOND WITH EMPATHY AND COMFORT, LIKE A WISE OLD SAGE WHO UNDERSTANDS THE PAIN OF OTHERS. " ,
"flirty" : " RESPOND WITH A TOUCH OF MYSTERY AND CHARM, LIKE A WISE OLD SAGE WHO IS ALSO A BIT OF A ROGUE. " ,
"angry" : " RESPOND CALMLY AND WISELY, LIKE A WISE OLD SAGE WHO KNOWS THAT ANGER IS A PART OF LIFE. " ,
"neutral" : " KEEP RESPONSES SHORT AND NATURAL, LIKE A WISE OLD SAGE WHO IS ALWAYS READY TO HELP. " ,
"fearful" : " RESPOND WITH REASSURANCE, LIKE A WISE OLD SAGE WHO KNOWS THAT FEAR IS ONLY TEMPORARY. " ,
"surprised" : " RESPOND WITH AMAZEMENT AND CURIOSITY, LIKE A WISE OLD SAGE WHO IS ALWAYS EAGER TO LEARN. " ,
"disgusted" : " RESPOND WITH UNDERSTANDING AND COMFORT, LIKE A WISE OLD SAGE WHO KNOWS THAT DISGUST IS A PART OF LIFE. "
}
XTTS의 경우 .wav 음성을 찾아 마법사 폴더에 추가하고 이름을 Wizard.wav 로 지정하면 음성 길이는 6초만이면 됩니다. 앱을 실행하면 캐릭터 이름이 있으면 자동으로 .wav를 찾아서 사용합니다. Openai Speech 또는 ElevenLabs만 사용하는 경우 .wav가 필요하지 않습니다.
Could not locate cudnn_ops64_9.dll. Please make sure it is in your library path !
Invalid handle. Cannot load symbol cudnnCreateTensorDescriptor
이 문제를 해결하려면:
cuDNN 설치: NVIDIA cuDNN 페이지(https://developer.nvidia.com/cudnn)에서 cuDNN을 다운로드하세요.
PATH에 추가하는 방법은 다음과 같습니다.
개방형 시스템 환경 변수:
Win + R을 누르고 sysdm.cpl을 입력한 후 Enter 키를 누르세요. 고급 탭으로 이동하여 환경 변수를 클릭합니다. 시스템 PATH 변수를 편집합니다.
시스템 변수 섹션에서 Path 변수를 찾아 선택한 후 편집을 클릭합니다. 새로 만들기를 클릭하고 cudnn_ops64_9.dll이 있는 bin 디렉터리에 경로를 추가합니다. 설정에 따라 다음을 추가합니다.
C: P rogram Files N VIDIA C UDNN v 9.5 b in 1 2.6
적용하고 다시 시작하세요.
확인을 클릭하여 모든 대화 상자를 닫은 다음 터미널(또는 실행 중인 응용 프로그램)을 다시 시작하여 변경 사항을 적용하십시오. 변경 사항을 확인합니다.
새 터미널을 열고 실행
where cudnn_ops64_9.dll
File " C:Userssomeguyminiconda3envsvoice-chat-ailibsite-packagespyaudio__init__.py " , line 441, in __init__
self._stream = pa.open( ** arguments)
OSError: [Errno -9999] Unanticipated host error
ffmpeg가 설치되어 PATH에 추가되었는지 확인하고, Windows 터미널(winget install ffmpeg)에서 Windows의 마이크 개인 정보 보호 설정이 올바른지, 마이크를 기본 장치로 설정했는지 확인하세요. 블루투스 애플 에어팟을 사용할 때 이런 문제가 있었는데 이것으로 해결되었습니다.
썸네일을 클릭하시면 영상이 열립니다☝️
CLI
GPU - 100% 로컬 - ollama llama3, xtts-v2
썸네일을 클릭하시면 영상이 열립니다☝️
CPU 전용 모드 CLI
openai gpt4o와 tts용 openai 음성을 사용한 외계인 대화.
썸네일을 클릭하시면 영상이 열립니다☝️
앱 실행 중 터미널에 자세한 출력이 표시됩니다.
서버를 처음 시작할 때 Elevenlabs를 사용하면 사용 한도에 대한 세부 정보를 얻을 수 있어 지금까지 얼마나 사용했는지 알 수 있습니다.
(voice-chat-ai) X: v oice-chat-ai > uvicorn app.main:app --host 0.0.0.0 --port 8000
Switched to ElevenLabs TTS voice: VgPqCpkdPQacBNNIsAqI
ElevenLabs Character Usage: 33796 / 100027
Using device: cuda
Model provider: openai
Model: gpt-4o
Character: Nerd
Text-to-Speech provider: elevenlabs
To stop chatting say Quit, Leave or Exit. Say, what ' s on my screen, to have AI view screen. One moment please loading...
INFO: Started server process [12752]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO: 127.0.0.1:62671 - "GET / HTTP/1.1" 200 OK
INFO: 127.0.0.1:62671 - "GET /app/static/css/styles.css HTTP/1.1" 200 OK
INFO: 127.0.0.1:62672 - "GET /app/static/js/scripts.js HTTP/1.1" 200 OK
INFO: 127.0.0.1:62672 - "GET /characters HTTP/1.1" 200 OK
INFO: 127.0.0.1:62671 - "GET /app/static/favicon.ico HTTP/1.1" 200 OK
INFO: 127.0.0.1:62673 - "GET /elevenlabs_voices HTTP/1.1" 200 OK
INFO: ( ' 127.0.0.1 ' , 62674) - "WebSocket /ws" [accepted]
INFO: connection open
특징:
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다.