Voice Chat AI は、音声を使用してさまざまな AI キャラクターと対話できるようにするプロジェクトです。それぞれがユニークな性格と声を持つさまざまなキャラクターの中から選択できます。アルバート アインシュタインと真剣に会話したり、映画 HER の OS でロールプレイをしたりできます。
すべてをローカルで実行することも、チャットと音声に openai を使用することも、この 2 つを混在させることもできます。イレブンラボの音声は、すべて Web UI から制御される ollam モデルで使用できます。 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 のみ: Windows では TTS Microsoft Build Tools 用に Microsoft C++ 14.0 以降のビルド ツールが必要です
GPU (CUDA) バージョンの場合: RECOMMEND
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 ターミナルで ffmpeg がダウンロードされていることを確認するか ( winget install 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 .
このイメージは、すべてのチェックポイント、ベース イメージ、ビルド ツール、オーディオ ツールが含まれるため、ビルドすると巨大になります - 40 GB - 小さくする方法があるかもしれません。まだ試していませんが、サイズを小さくできるかどうかを確認するための実験でした。仕事!
Docker run コマンドを使用すると、Docker コンテナーでマイクを使用できるようになります
docker build -t voice-chat-ai .
Windows の Docker デスクトップで wsl を使用 - 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 から ollam に変更したり、再度元に戻したりすることができます。
.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 または イレブンラボのみを使用する場合、.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
適用して再起動します。
[OK] をクリックしてすべてのダイアログ ボックスを閉じ、端末 (または実行中のアプリケーション) を再起動して変更を適用します。変更を確認します。
新しいターミナルを開いて実行します
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
Windows ターミナルで ffmpeg がインストールされ、PATH に追加されていることを確認してください ( winget install ffmpeg )。また、Windows のマイクのプライバシー設定が適切で、マイクがデフォルトのデバイスに設定されていることも確認してください。 Bluetooth Apple Airpods を使用しているときにこの問題が発生しましたが、これで解決しました。
サムネイルをクリックすると動画が開きます☝️
CLI
GPU - 100% ローカル - ollama llama3、xtts-v2
サムネイルをクリックすると動画が開きます☝️
CPU 専用モード CLI
openai gpt4o と tts 用の openai speech を使用したエイリアンの会話。
サムネイルをクリックすると動画が開きます☝️
アプリの実行中にターミナルに詳細な出力が表示されます。
サーバーの最初の起動時に イレブンラボ を使用すると、使用量の制限に関する詳細が表示され、どれだけ使用したかを知ることができます。
(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 ライセンスに基づいてライセンスされています。