Voice Chat AI est un projet qui vous permet d'interagir avec différents personnages d'IA en utilisant la parole. Vous pouvez choisir entre différents personnages, chacun avec une personnalité et une voix uniques. Ayez une conversation sérieuse avec Albert Einstein ou jouez un rôle avec le système d'exploitation du film HER.
Vous pouvez tout exécuter localement, vous pouvez utiliser openai pour le chat et la voix, vous pouvez mélanger les deux. Vous pouvez utiliser les voix ElevenLabs avec des modèles ollama, tous contrôlés depuis une interface utilisateur Web. Demandez à l'IA de regarder votre écran et elle vous expliquera en détail ce qu'elle regarde.
Clonez le dépôt :
git clone https://github.com/bigsk1/voice-chat-ai.git
cd voice-chat-ai
Pour la version CPU uniquement : clonez la branche CPU uniquement https://github.com/bigsk1/voice-chat-ai/tree/cpu-only
Créer un environnement virtuel : ?
python -m venv venv
source venv/bin/activate # On Windows use `venvScriptsActivate`
ou utilisez conda
, faites-le simplement en python 3.10
conda create --name voice-chat-ai python=3.10
conda activate voice-chat-ai
Installer les dépendances :
Windows uniquement : besoin d'avoir Microsoft C++ 14.0 ou version ultérieure sur Windows pour TTS Microsoft Build Tools
Pour la version GPU (CUDA) : RECOMMANDÉ
Installer PyTorch compatible CUDA et d'autres dépendances
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
Pour la version CPU uniquement : clonez la branche CPU uniquement https://github.com/bigsk1/voice-chat-ai/tree/cpu-only
# For CPU-only installations, use:
pip install -r cpu_requirements.txt
Assurez-vous d'avoir téléchargé ffmpeg, sur le terminal Windows (winget install ffmpeg) ou consultez https://ffmpeg.org/download.html puis redémarrez le shell ou le vscode, tapez ffmpeg -version pour voir s'il est correctement installé
TTS local, vous pourriez également avoir besoin de cuDNN pour utiliser le GPU nvidia https://developer.nvidia.com/cudnn et assurez-vous que C:Program FilesNVIDIACUDNNv9.5bin12.6 est dans le PATH système
Vous devez télécharger les points de contrôle des modèles utilisés dans ce projet. Vous pouvez les télécharger depuis la page des versions de GitHub et extraire le zip dans le dossier du projet.
Après le téléchargement, placez les dossiers comme suit :
voice-chat-ai/
├── checkpoints/
│ ├── base_speakers/
│ │ ├── EN/
│ │ │ └── checkpoint.pth
│ │ ├── ZH/
│ │ │ └── checkpoint.pth
│ ├── converter/
│ │ └── checkpoint.pth
├── XTTS-v2/
│ ├── config.json
│ ├── other_xtts_files...
Vous pouvez utiliser les commandes suivantes pour télécharger et extraire les fichiers directement dans le répertoire du projet :
# 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 .
Cette image est énorme une fois construite à cause de tous les points de contrôle, de l'image de base, des outils de construction et des outils audio - 40 Go - il y a peut-être un moyen de la réduire, je n'ai pas encore essayé, c'était juste une expérience pour voir si je pouvais l'obtenir travail!
La commande Docker run vous permet d'utiliser le microphone dans le conteneur Docker
docker build -t voice-chat-ai .
Sur le bureau Windows Docker en utilisant wsl - exécuté sous 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
Courir depuis 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
Dans le dossier docker, il y a également des scripts pour mettre à jour le modèle et le fournisseur tts dans le conteneur, vous pouvez donc passer d'openai à ollama et vice-versa si vous le souhaitez, au lieu d'exécuter dans le conteneur et d'apporter des modifications manuellement.
.env
dans le répertoire racine du projet et configurez-le avec les variables d'environnement nécessaires : - L'application est contrôlée en fonction des variables que vous ajoutez. # 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)
Exécutez l'application : ?
Interface utilisateur Web
uvicorn app.main:app --host 0.0.0.0 --port 8000
Rechercher sur http://localhost:8000/
CLI uniquement
python cli.py
Ajoutez des noms et des identifiants vocaux elevenlabs_voices.json
- dans le webui, vous pouvez les sélectionner dans le menu déroulant.
{
"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 "
}
]
}
Pour la CLI, l'identifiant vocal dans le .env sera utilisé
Appuyez sur Démarrer pour commencer à parler. Faites une pause, appuyez sur Stop, lorsque vous êtes prêt, appuyez à nouveau sur Start. Appuyez sur Stop pour changer les personnages et les voix dans la liste déroulante. Vous pouvez également sélectionner le fournisseur de modèle et le fournisseur TTS souhaités dans le menu déroulant. Il mettra à jour et utilisera le fournisseur sélectionné à l'avenir. Dire Quitter, Quitter ou Quitter, c'est comme appuyer sur stop.
http://localhost:8000/
Cliquez sur la vignette pour ouvrir la vidéo☝️
character/wizard
).character/wizard/wizard.txt
).character/wizard/prompts.json
). wizard.txt
C'est l'invite utilisée par l'IA pour savoir de qui il s'agit.
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
Ceci est destiné à l'analyse des sentiments, en fonction de ce que vous dites, vous pouvez guider l'IA pour qu'elle réponde de certaines manières. Lorsque vous parlez, l'analyseur TextBlob
est utilisé et reçoit un score, en fonction de ce score, il est lié aux humeurs indiquées ci-dessous et transmis à l'IA dans la réponse de suivi expliquant votre humeur, guidant ainsi l'IA à répondre dans un certain style.
{
"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. "
}
Pour XTTS, recherchez une voix .wav, ajoutez-la au dossier de l'assistant et nommez-la witch.wav , la voix ne doit durer que 6 secondes. L'exécution de l'application trouvera automatiquement le .wav lorsqu'il porte le nom du personnage et l'utilisera. Si vous utilisez uniquement Openai Speech ou ElevenLabs, un .wav n'est pas nécessaire
Could not locate cudnn_ops64_9.dll. Please make sure it is in your library path !
Invalid handle. Cannot load symbol cudnnCreateTensorDescriptor
Pour résoudre ce problème :
Installez cuDNN : téléchargez cuDNN depuis la page NVIDIA cuDNN https://developer.nvidia.com/cudnn
Voici comment l'ajouter au PATH :
Variables d'environnement de système ouvert :
Appuyez sur Win + R, tapez sysdm.cpl et appuyez sur Entrée. Accédez à l'onglet Avancé et cliquez sur Variables d'environnement. Modifiez la variable PATH système :
Dans la section Variables système, recherchez la variable Path, sélectionnez-la et cliquez sur Modifier. Cliquez sur Nouveau et ajoutez le chemin d'accès au répertoire bin où se trouve cudnn_ops64_9.dll. En fonction de votre configuration, vous ajouteriez :
C: P rogram Files N VIDIA C UDNN v 9.5 b in 1 2.6
Appliquer et redémarrer :
Cliquez sur OK pour fermer toutes les boîtes de dialogue, puis redémarrez votre terminal (ou toute application en cours d'exécution) pour appliquer les modifications. Vérifiez le changement :
Ouvrez un nouveau terminal et exécutez
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
Assurez-vous que ffmpeg est installé et ajouté à PATH, sur le terminal Windows (winget install ffmpeg), assurez-vous également que les paramètres de confidentialité de votre microphone sous Windows sont corrects et que vous définissez le microphone sur le périphérique par défaut. J'ai eu ce problème lors de l'utilisation d'Airpods Apple Bluetooth et cela l'a résolu.
Cliquez sur la vignette pour ouvrir la vidéo☝️
CLI
GPU - 100% local - ollama llama3, xtts-v2
Cliquez sur la vignette pour ouvrir la vidéo☝️
CLI en mode CPU uniquement
Conversation extraterrestre utilisant openai gpt4o et openai Speech pour tts.
Cliquez sur la vignette pour ouvrir la vidéo☝️
Sortie détaillée dans le terminal lors de l'exécution de l'application.
Lorsque vous utilisez Elevenlabs au premier démarrage du serveur, vous obtenez des détails sur vos limites d'utilisation pour vous aider à savoir combien vous avez utilisé.
(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
Caractéristiques:
Ce projet est sous licence MIT.