Obrolan Suara AI adalah proyek yang memungkinkan Anda berinteraksi dengan berbagai karakter AI menggunakan ucapan. Anda dapat memilih di antara berbagai karakter, masing-masing dengan kepribadian dan suara unik. Berbincang serius dengan Albert Einstein atau bermain peran dengan OS dari film HER.
Anda dapat menjalankan semuanya secara lokal, Anda dapat menggunakan openai untuk chatting dan suara, Anda dapat menggabungkan keduanya. Anda dapat menggunakan suara ElevenLabs dengan model ollama yang semuanya dikontrol dari UI Web. Minta AI untuk melihat layar Anda dan AI akan menjelaskan secara detail apa yang dilihatnya.
Kloning repositori:
git clone https://github.com/bigsk1/voice-chat-ai.git
cd voice-chat-ai
Untuk versi khusus CPU: kloning cabang khusus cpu https://github.com/bigsk1/voice-chat-ai/tree/cpu-only
Buat lingkungan virtual: ?
python -m venv venv
source venv/bin/activate # On Windows use `venvScriptsActivate`
atau gunakan conda
buat saja python 3.10
conda create --name voice-chat-ai python=3.10
conda activate voice-chat-ai
Instal dependensi:
Khusus Windows: Perlu memiliki Microsoft C++ 14.0 atau lebih tinggi Build Tools di windows untuk TTS Microsoft Build Tools
Untuk versi GPU (CUDA): MEREKOMENDASIKAN
Instal PyTorch yang mendukung CUDA dan dependensi lainnya
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
Untuk versi khusus CPU: kloning cabang khusus cpu https://github.com/bigsk1/voice-chat-ai/tree/cpu-only
# For CPU-only installations, use:
pip install -r cpu_requirements.txt
Pastikan Anda telah mengunduh ffmpeg, di terminal windows (winget install ffmpeg) atau checkout https://ffmpeg.org/download.html lalu restart Shell atau vscode, ketik ffmpeg -version untuk melihat apakah diinstal dengan benar
TTS lokal Anda juga mungkin memerlukan cuDNN untuk menggunakan GPU nvidia https://developer.nvidia.com/cudnn dan pastikan C:Program FilesNVIDIACUDNNv9.5bin12.6 ada di PATH sistem
Anda perlu mengunduh pos pemeriksaan untuk model yang digunakan dalam proyek ini. Anda dapat mengunduhnya dari halaman rilis GitHub dan mengekstrak zipnya ke dalam folder proyek.
Setelah mendownload, letakkan foldernya sebagai berikut:
voice-chat-ai/
├── checkpoints/
│ ├── base_speakers/
│ │ ├── EN/
│ │ │ └── checkpoint.pth
│ │ ├── ZH/
│ │ │ └── checkpoint.pth
│ ├── converter/
│ │ └── checkpoint.pth
├── XTTS-v2/
│ ├── config.json
│ ├── other_xtts_files...
Anda dapat menggunakan perintah berikut untuk mengunduh dan mengekstrak file langsung ke direktori proyek:
# 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 .
Gambar ini sangat besar ketika dibuat karena semua pos pemeriksaan, gambar dasar, alat pembuatan, dan alat audio - 40 GB - mungkin ada cara untuk memperkecilnya. Saya belum mencobanya, hanya percobaan untuk melihat apakah saya bisa membuatnya lebih kecil bekerja!
Perintah Docker run memungkinkan Anda menggunakan mikrofon dalam wadah buruh pelabuhan
docker build -t voice-chat-ai .
Di desktop buruh pelabuhan windows menggunakan wsl - dijalankan di 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
Berlari dari 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
Di folder docker juga terdapat beberapa skrip untuk memperbarui model dan penyedia tts ke dalam container, sehingga Anda dapat mengubah dari openai ke ollama dan kembali lagi jika Anda mau, daripada exec ke dalam container dan melakukan perubahan secara manual.
.env
di direktori root proyek dan konfigurasikan dengan variabel lingkungan yang diperlukan: - Aplikasi dikontrol berdasarkan variabel yang Anda tambahkan. # 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)
Jalankan aplikasi: ?
antarmuka web
uvicorn app.main:app --host 0.0.0.0 --port 8000
Temukan di http://localhost:8000/
Hanya CLI
python cli.py
Tambahkan nama dan ID suara di elevenlabs_voices.json
- di webui Anda dapat memilihnya di menu tarik-turun.
{
"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 "
}
]
}
Untuk CLI, id suara di .env akan digunakan
Tekan mulai untuk mulai berbicara. Istirahat, tekan berhenti, bila sudah siap, tekan mulai lagi. Tekan berhenti untuk mengubah karakter dan suara di dropdown. Anda juga dapat memilih Penyedia Model dan Penyedia TTS yang Anda inginkan di menu tarik-turun dan penyedia tersebut akan diperbarui dan menggunakan penyedia yang dipilih di masa mendatang. Mengatakan Keluar, Keluar, atau Keluar seperti menekan berhenti.
http://localhost:8000/
Klik pada thumbnail untuk membuka video☝️
character/wizard
).character/wizard/wizard.txt
).character/wizard/prompts.json
). wizard.txt
Ini adalah perintah yang digunakan AI untuk mengetahui siapa orang itu
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
Ini untuk analisis sentimen, berdasarkan apa yang Anda katakan, Anda dapat memandu AI untuk merespons dengan cara tertentu, saat Anda berbicara, penganalisis TextBlob
digunakan dan diberi skor, berdasarkan skor tersebut, skor tersebut dikaitkan dengan suasana hati yang ditunjukkan di bawah dan diteruskan ke AI dalam respons tindak lanjut menjelaskan suasana hati Anda sehingga memandu AI untuk membalas dengan gaya tertentu.
{
"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. "
}
Untuk XTTS temukan suara .wav dan tambahkan ke folder wizard dan beri nama wizard.wav , suara tersebut hanya perlu berdurasi 6 detik. Menjalankan aplikasi akan secara otomatis menemukan .wav ketika memiliki nama karakter dan menggunakannya. Jika hanya menggunakan Openai Speech atau ElevenLabs, .wav tidak diperlukan
Could not locate cudnn_ops64_9.dll. Please make sure it is in your library path !
Invalid handle. Cannot load symbol cudnnCreateTensorDescriptor
Untuk mengatasi ini:
Instal cuDNN: Unduh cuDNN dari halaman NVIDIA cuDNN https://developer.nvidia.com/cudnn
Berikut cara menambahkannya ke PATH:
Variabel Lingkungan Sistem Terbuka:
Tekan Win + R, ketik sysdm.cpl, dan tekan Enter. Buka tab Tingkat Lanjut, dan klik Variabel Lingkungan. Edit Variabel PATH Sistem:
Di bagian Variabel sistem, temukan variabel Jalur, pilih variabel tersebut, dan klik Edit. Klik Baru dan tambahkan jalur ke direktori bin tempat cudnn_ops64_9.dll berada. Berdasarkan pengaturan Anda, Anda akan menambahkan:
C: P rogram Files N VIDIA C UDNN v 9.5 b in 1 2.6
Terapkan dan Mulai Ulang:
Klik OK untuk menutup semua kotak dialog, kemudian restart terminal Anda (atau aplikasi apa pun yang sedang berjalan) untuk menerapkan perubahan. Verifikasi Perubahan:
Buka terminal baru dan jalankan
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
Pastikan ffmpeg diinstal dan ditambahkan ke PATH, di terminal windows (winget install ffmpeg) juga pastikan pengaturan privasi mikrofon Anda di windows baik-baik saja dan Anda mengatur mikrofon ke perangkat default. Saya mengalami masalah ini saat menggunakan bluetooth apple airpods dan ini menyelesaikannya.
Klik pada thumbnail untuk membuka video☝️
CLI
GPU - 100% lokal - ollama llama3, xtts-v2
Klik pada thumbnail untuk membuka video☝️
CLI mode Hanya CPU
Percakapan alien menggunakan openai gpt4o dan pidato openai untuk tts.
Klik pada thumbnail untuk membuka video☝️
Output terperinci di terminal saat menjalankan aplikasi.
Saat menggunakan Elevenlabs saat server pertama kali dimulai, Anda mendapatkan detail tentang batas penggunaan untuk membantu Anda mengetahui berapa banyak yang telah Anda gunakan.
(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
Fitur:
Proyek ini dilisensikan di bawah Lisensi MIT.