Voice Chat AI — это проект, который позволяет взаимодействовать с разными персонажами AI с помощью речи. Вы можете выбирать между различными персонажами, каждый из которых обладает уникальным характером и голосом. Проведите серьезный разговор с Альбертом Эйнштейном или поиграйте с ОС из фильма ОНА.
Вы можете запускать все локально, вы можете использовать openai для чата и голосовой связи, вы можете смешивать их. Вы можете использовать голоса ElevenLabs с моделями олламы, управляемыми через веб-интерфейс. Попросите ИИ посмотреть на ваш экран, и он подробно объяснит, на что он смотрит.
Клонируем репозиторий:
git clone https://github.com/bigsk1/voice-chat-ai.git
cd voice-chat-ai
Для версии только для процессора: клонируйте ветку только для процессора 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: необходимо иметь Microsoft C++ 14.0 или более позднюю версию Build Tools в Windows для TTS Microsoft Build Tools.
Для версии GPU (CUDA): РЕКОМЕНДУЕМ
Установите PyTorch с поддержкой CUDA и другие зависимости.
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
Для версии только для процессора: клонируйте ветку только для процессора https://github.com/bigsk1/voice-chat-ai/tree/cpu-only
# For CPU-only installations, use:
pip install -r cpu_requirements.txt
Убедитесь, что у вас загружен ffmpeg, на терминале Windows (winget install ffmpeg) или проверьте https://ffmpeg.org/download.html, затем перезапустите оболочку или vscode, введите ffmpeg -version, чтобы проверить, правильно ли он установлен.
Локальный TTS, вам также может понадобиться cuDNN для использования графического процессора nvidia https://developer.nvidia.com/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 ГБ - возможно, есть способ уменьшить его, я еще не пробовал, это был просто эксперимент, чтобы посмотреть, смогу ли я его получить работа!
Команда запуска Docker позволяет использовать микрофон в контейнере Docker
docker build -t voice-chat-ai .
На рабочем столе докера Windows с помощью 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 на 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)
Запустите приложение: ?
Веб-интерфейс
uvicorn app.main:app --host 0.0.0.0 --port 8000
Найти на http://localhost:8000/
Только интерфейс командной строки
python cli.py
Добавьте имена и голосовые идентификаторы в elevenlabs_voices.json
— в веб-интерфейсе вы можете выбрать их в раскрывающемся меню.
{
"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.
Нажмите «Старт», чтобы начать говорить. Сделайте перерыв, нажмите «Стоп», когда снова будете готовы, снова нажмите «Начать». Нажмите «Стоп», чтобы изменить персонажей и голоса в раскрывающемся списке. Вы также можете выбрать нужного поставщика модели и поставщика TTS в раскрывающемся меню, и в дальнейшем он будет обновляться и использовать выбранного поставщика. Сказать «Выход», «Оставить» или «Выйти» — все равно что нажать кнопку «Стоп».
http://локальный хост:8000/
Нажмите на миниатюру, чтобы открыть видео☝️
character/wizard
).character/wizard/wizard.txt
).character/wizard/prompts.json
). wizard.txt
Это подсказка, используемая ИИ, чтобы узнать, кто это.
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
Это для анализа настроений: на основе того, что вы говорите, вы можете заставить ИИ реагировать определенным образом. Когда вы говорите, используется анализатор TextBlob
, которому присваивается оценка, на основе этой оценки он привязывается к настроениям, показанным ниже, и передается в ИИ в последующем ответе объясняет ваше настроение и тем самым помогает ИИ ответить в определенном стиле.
{
"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: загрузите cuDNN со страницы NVIDIA cuDNN https://developer.nvidia.com/cudnn.
Вот как добавить его в PATH:
Переменные среды открытой системы:
Нажмите Win + R, введите sysdm.cpl и нажмите Enter. Перейдите на вкладку «Дополнительно» и нажмите «Переменные среды». Отредактируйте системную переменную PATH:
В разделе «Системные переменные» найдите переменную «Путь», выберите ее и нажмите «Изменить». Нажмите «Создать» и добавьте путь к каталогу bin, где находится cudnn_ops64_9.dll. В зависимости от ваших настроек вы должны добавить:
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 в порядке, и вы установили микрофон на устройство по умолчанию. У меня возникла эта проблема при использовании наушников Apple Airpods с Bluetooth, и это решило ее.
Нажмите на миниатюру, чтобы открыть видео☝️
интерфейс командной строки
Графический процессор — 100% локальный — ollama llama3, xtts-v2
Нажмите на миниатюру, чтобы открыть видео☝️
CLI режима «Только ЦП»
Разговор с инопланетянами с использованием openai gpt4o и openai voice для tts.
Нажмите на миниатюру, чтобы открыть видео☝️
Подробный вывод в терминале при запуске приложения.
При использовании 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.