Voice Chat AI es un proyecto que te permite interactuar con diferentes personajes de IA mediante el habla. Puedes elegir entre varios personajes, cada uno con personalidades y voces únicas. Tenga una conversación seria con Albert Einstein o juegue un papel con el sistema operativo de la película HER.
Puedes ejecutar todo localmente, puedes usar openai para chat y voz, puedes mezclar ambos. Puedes utilizar voces de ElevenLabs con modelos de ollama, todos controlados desde una interfaz de usuario web. Pídele a la IA que mire tu pantalla y te explicará en detalle lo que está mirando.
Clonar el repositorio:
git clone https://github.com/bigsk1/voice-chat-ai.git
cd voice-chat-ai
Para la versión de solo CPU: clonar la rama de solo CPU https://github.com/bigsk1/voice-chat-ai/tree/cpu-only
Crear un entorno virtual: ?
python -m venv venv
source venv/bin/activate # On Windows use `venvScriptsActivate`
o usa conda
simplemente hazlo python 3.10
conda create --name voice-chat-ai python=3.10
conda activate voice-chat-ai
Instalar dependencias:
Solo Windows: es necesario tener Microsoft C++ 14.0 o superior Build Tools en Windows para TTS Microsoft Build Tools
Para la versión GPU (CUDA): RECOMENDAR
Instale PyTorch habilitado para CUDA y otras dependencias
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 la versión de solo CPU: clonar la rama de solo CPU https://github.com/bigsk1/voice-chat-ai/tree/cpu-only
# For CPU-only installations, use:
pip install -r cpu_requirements.txt
Asegúrese de haber descargado ffmpeg, en la terminal de Windows (winget install ffmpeg) o consulte https://ffmpeg.org/download.html, luego reinicie Shell o vscode, escriba ffmpeg -version para ver si está instalado correctamente
TTS local, es posible que también necesite cuDNN para usar nvidia GPU https://developer.nvidia.com/cudnn y asegúrese de que C:Program FilesNVIDIACUDNNv9.5bin12.6 esté en la RUTA del sistema
Debe descargar los puntos de control de los modelos utilizados en este proyecto. Puede descargarlos desde la página de lanzamientos de GitHub y extraer el zip en la carpeta del proyecto.
Después de la descarga, coloque las carpetas de la siguiente manera:
voice-chat-ai/
├── checkpoints/
│ ├── base_speakers/
│ │ ├── EN/
│ │ │ └── checkpoint.pth
│ │ ├── ZH/
│ │ │ └── checkpoint.pth
│ ├── converter/
│ │ └── checkpoint.pth
├── XTTS-v2/
│ ├── config.json
│ ├── other_xtts_files...
Puede utilizar los siguientes comandos para descargar y extraer los archivos directamente en el directorio del proyecto:
# 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 imagen es enorme cuando se construye debido a todos los puntos de control, la imagen base, las herramientas de compilación y las herramientas de audio - 40 GB - tal vez haya una manera de hacerla más pequeña. Aún no lo he probado, fue solo un experimento para ver si podía lograrlo. ¡trabajar!
El comando Docker Run le permite usar el micrófono en el contenedor Docker
docker build -t voice-chat-ai .
En el escritorio de Windows Docker usando wsl: ejecutar en 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
corriendo desde 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
En la carpeta acoplable también hay algunos scripts para actualizar el modelo y el proveedor tts en el contenedor, por lo que puede cambiar de openai a ollama y viceversa si lo desea, en lugar de ejecutar en el contenedor y realizar cambios manualmente.
.env
en el directorio raíz del proyecto y configúrelo con las variables de entorno necesarias: - La aplicación se controla en función de las variables que agregue. # 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)
Ejecute la aplicación: ?
Interfaz de usuario web
uvicorn app.main:app --host 0.0.0.0 --port 8000
Buscar en http://localhost:8000/
Solo CLI
python cli.py
Agregue nombres e identificaciones de voz en elevenlabs_voices.json
; en la interfaz de usuario web puede seleccionarlos en el menú desplegable.
{
"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 la CLI se utilizará la identificación de voz en .env.
Presione iniciar para comenzar a hablar. Tómese un descanso, presione detener, cuando esté listo nuevamente presione comenzar nuevamente. Presione detener para cambiar personajes y voces en el menú desplegable. También puede seleccionar el Proveedor de modelo y el Proveedor TTS que desee en el menú desplegable y se actualizará y utilizará el proveedor seleccionado en el futuro. Decir Salir, Dejar o Salir es como presionar detener.
http://localhost:8000/
Haz clic en la miniatura para abrir el vídeo☝️
character/wizard
).character/wizard/wizard.txt
).character/wizard/prompts.json
). wizard.txt
Este es el mensaje que utiliza la IA para saber quién es.
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
Esto es para el análisis de sentimientos, según lo que usted dice, puede guiar a la IA para que responda de ciertas maneras, cuando habla, se usa el analizador TextBlob
y se le otorga una puntuación, según esa puntuación, se vincula a los estados de ánimo que se muestran a continuación y se pasa a La IA en la respuesta de seguimiento explica su estado de ánimo y, por lo tanto, guía a la IA para que responda con un estilo determinado.
{
"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, busque una voz .wav, agréguela a la carpeta del asistente y asígnele el nombre Wizard.wav. La voz solo debe durar 6 segundos. Al ejecutar la aplicación, se encontrará automáticamente el .wav cuando tenga el nombre del personaje y se utilizará. Si solo usa Openai Speech o ElevenLabs, no se necesita un .wav
Could not locate cudnn_ops64_9.dll. Please make sure it is in your library path !
Invalid handle. Cannot load symbol cudnnCreateTensorDescriptor
Para resolver esto:
Instale cuDNN: descargue cuDNN desde la página de NVIDIA cuDNN https://developer.nvidia.com/cudnn
Aquí se explica cómo agregarlo a la RUTA:
Variables de entorno del sistema abierto:
Presione Win + R, escriba sysdm.cpl y presione Enter. Vaya a la pestaña Avanzado y haga clic en Variables de entorno. Edite la variable RUTA del sistema:
En la sección Variables del sistema, busque la variable Ruta, selecciónela y haga clic en Editar. Haga clic en Nuevo y agregue la ruta al directorio bin donde se encuentra cudnn_ops64_9.dll. Según su configuración, agregaría:
C: P rogram Files N VIDIA C UDNN v 9.5 b in 1 2.6
Aplicar y reiniciar:
Haga clic en Aceptar para cerrar todos los cuadros de diálogo, luego reinicie su terminal (o cualquier aplicación en ejecución) para aplicar los cambios. Verifique el cambio:
Abra una nueva terminal y ejecute
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
Asegúrese de que ffmpeg esté instalado y agregado a PATH, en la terminal de Windows (winget install ffmpeg). También asegúrese de que la configuración de privacidad de su micrófono en Windows esté bien y de configurar el micrófono en el dispositivo predeterminado. Tuve este problema al usar los airpods de Apple con Bluetooth y esto lo resolvió.
Haz clic en la miniatura para abrir el vídeo☝️
CLI
GPU - 100% local - ollama llama3, xtts-v2
Haz clic en la miniatura para abrir el vídeo☝️
CLI en modo solo CPU
Conversación extraterrestre usando openai gpt4o y openai discurso para tts.
Haz clic en la miniatura para abrir el vídeo☝️
Salida detallada en la terminal mientras se ejecuta la aplicación.
Cuando usas Elevenlabs en el primer inicio del servidor, obtienes detalles sobre tus límites de uso para ayudarte a saber cuánto has estado 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 proyecto está bajo la licencia MIT.