Voice Chat AI é um projeto que permite interagir com diferentes personagens de IA usando a fala. Você pode escolher entre vários personagens, cada um com personalidades e vozes únicas. Tenha uma conversa séria com Albert Einstein ou faça uma dramatização com o sistema operacional do filme HER.
Você pode executar tudo localmente, pode usar openai para chat e voz, pode misturar os dois. Você pode usar vozes ElevenLabs com modelos ollama, todos controlados por uma interface da Web. Peça à IA para olhar para a sua tela e ela explicará detalhadamente o que está vendo.
Clone o repositório:
git clone https://github.com/bigsk1/voice-chat-ai.git
cd voice-chat-ai
Para versão somente CPU: clone o branch somente CPU https://github.com/bigsk1/voice-chat-ai/tree/cpu-only
Crie um ambiente virtual: ?
python -m venv venv
source venv/bin/activate # On Windows use `venvScriptsActivate`
ou use conda
, basta torná-lo python 3.10
conda create --name voice-chat-ai python=3.10
conda activate voice-chat-ai
Instale dependências:
Somente Windows: é necessário ter o Microsoft C++ 14.0 ou superior Build Tools no Windows para TTS Microsoft Build Tools
Para versão GPU (CUDA): RECOMENDAR
Instale PyTorch habilitado para CUDA e outras dependências
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
Para versão somente CPU: clone o branch somente CPU https://github.com/bigsk1/voice-chat-ai/tree/cpu-only
# For CPU-only installations, use:
pip install -r cpu_requirements.txt
Certifique-se de ter baixado o ffmpeg, no terminal do Windows ( winget install ffmpeg ) ou checkout https://ffmpeg.org/download.html e reinicie o shell ou vscode, digite ffmpeg -version para ver se está instalado corretamente
TTS local, você também pode precisar de cuDNN para usar a GPU nvidia https://developer.nvidia.com/cudnn e certifique-se de que C:Program FilesNVIDIACUDNNv9.5bin12.6 esteja no PATH do sistema
Você precisa baixar os pontos de verificação dos modelos usados neste projeto. Você pode baixá-los na página de lançamentos do GitHub e extrair o zip para a pasta do projeto.
Após o download, coloque as pastas da seguinte forma:
voice-chat-ai/
├── checkpoints/
│ ├── base_speakers/
│ │ ├── EN/
│ │ │ └── checkpoint.pth
│ │ ├── ZH/
│ │ │ └── checkpoint.pth
│ ├── converter/
│ │ └── checkpoint.pth
├── XTTS-v2/
│ ├── config.json
│ ├── other_xtts_files...
Você pode usar os seguintes comandos para baixar e extrair os arquivos diretamente no diretório do projeto:
# 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 .
Esta imagem é enorme quando construída por causa de todos os pontos de verificação, imagem base, ferramentas de construção e ferramentas de áudio - 40gb - talvez haja uma maneira de diminuí-la. Ainda não tentei, foi apenas um experimento para ver se conseguia fazê-la. trabalhar!
O comando Docker run permite que você use o microfone no contêiner docker
docker build -t voice-chat-ai .
Na área de trabalho do Windows Docker usando wsl - execute no 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
Correndo do 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
Na pasta docker também há alguns scripts para atualizar o modelo e o provedor tts no contêiner, para que você possa mudar de openai para ollama e vice-versa, se desejar, em vez de exec no contêiner e fazer alterações manualmente.
.env
no diretório raiz do projeto e configure-o com as variáveis de ambiente necessárias: - O aplicativo é controlado com base nas variáveis que você adiciona. # 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)
Execute o aplicativo: ?
IU da Web
uvicorn app.main:app --host 0.0.0.0 --port 8000
Encontre em http://localhost:8000/
Somente CLI
python cli.py
Adicione nomes e IDs de voz em elevenlabs_voices.json
- no webui você pode selecioná-los no menu suspenso.
{
"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 "
}
]
}
Para a CLI, o ID de voz no .env será usado
Pressione start para começar a falar. Faça uma pausa, aperte stop, quando estiver pronto novamente, aperte start novamente. Pressione parar para alterar personagens e vozes no menu suspenso. Você também pode selecionar o Provedor de Modelo e o Provedor de TTS desejado no menu suspenso e ele atualizará e usará o provedor selecionado no futuro. Dizer Sair, Sair ou Sair é como pressionar parar.
http://localhost:8000/
Clique na miniatura para abrir o vídeo☝️
character/wizard
).character/wizard/wizard.txt
).character/wizard/prompts.json
). wizard.txt
Este é o prompt usado para a IA saber quem é
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
Isto é para análise de sentimento, com base no que você diz, você pode orientar a IA para responder de certas maneiras, quando você fala o analisador TextBlob
é usado e recebe uma pontuação, com base nessa pontuação ele é vinculado aos humores mostrados abaixo e passado para a IA na resposta de acompanhamento explica seu humor, orientando assim a IA a responder em um determinado estilo.
{
"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. "
}
Para XTTS, encontre uma voz .wav e adicione-a à pasta do assistente e nomeie-a como wizard.wav , a voz só precisa ter 6 segundos de duração. A execução do aplicativo encontrará automaticamente o .wav quando ele tiver o nome do personagem e o utilizará. Se estiver usando apenas Openai Speech ou ElevenLabs, um .wav não é necessário
Could not locate cudnn_ops64_9.dll. Please make sure it is in your library path !
Invalid handle. Cannot load symbol cudnnCreateTensorDescriptor
Para resolver isso:
Instale o cuDNN: Baixe o cuDNN da página NVIDIA cuDNN https://developer.nvidia.com/cudnn
Veja como adicioná-lo ao PATH:
Variáveis de ambiente de sistema aberto:
Pressione Win + R, digite sysdm.cpl e pressione Enter. Vá para a guia Avançado e clique em Variáveis de Ambiente. Edite a variável PATH do sistema:
Na seção Variáveis do sistema, encontre a variável Path, selecione-a e clique em Editar. Clique em Novo e adicione o caminho para o diretório bin onde cudnn_ops64_9.dll está localizado. Com base na sua configuração, você adicionaria:
C: P rogram Files N VIDIA C UDNN v 9.5 b in 1 2.6
Aplicar e reiniciar:
Clique em OK para fechar todas as caixas de diálogo e reinicie seu terminal (ou qualquer aplicativo em execução) para aplicar as alterações. Verifique a alteração:
Abra um novo terminal e execute
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
Certifique-se de que o ffmpeg esteja instalado e adicionado ao PATH, no terminal do Windows ( winget install ffmpeg ), certifique-se também de que as configurações de privacidade do microfone no Windows estejam corretas e defina o microfone para o dispositivo padrão. Eu tive esse problema ao usar airpods bluetooth da Apple e isso resolveu.
Clique na miniatura para abrir o vídeo☝️
CLI
GPU - 100% local - ollama llama3, xtts-v2
Clique na miniatura para abrir o vídeo☝️
CLI do modo somente CPU
Conversa alienígena usando openai gpt4o e discurso openai para tts.
Clique na miniatura para abrir o vídeo☝️
Saída detalhada no terminal durante a execução do aplicativo.
Ao usar o Elevenlabs na primeira inicialização do servidor, você obtém detalhes sobre seus limites de uso para ajudá-lo a saber quanto está usando.
(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
Características:
Este projeto está licenciado sob a licença MIT.