Voice Chat AI เป็นโปรเจ็กต์ที่ให้คุณโต้ตอบกับตัวละคร AI ต่างๆ โดยใช้คำพูด คุณสามารถเลือกตัวละครได้หลากหลาย โดยแต่ละตัวมีบุคลิกและเสียงที่เป็นเอกลักษณ์ สนทนาอย่างจริงจังกับ Albert Einstein หรือแสดงบทบาทสมมติกับ OS จากภาพยนตร์เรื่อง HER
คุณสามารถเรียกใช้ทั้งหมดภายในเครื่อง คุณสามารถใช้ openai สำหรับการแชทและเสียง คุณสามารถผสมระหว่างทั้งสองได้ คุณสามารถใช้เสียงของ ElevenLabs กับโมเดล ollama ซึ่งทั้งหมดนี้ควบคุมจาก Web UI ขอให้ 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 เท่านั้น: จำเป็นต้องมี 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
สำหรับเวอร์ชัน CPU เท่านั้น: โคลนสาขาเฉพาะ cpu https://github.com/bigsk1/voice-chat-ai/tree/cpu-only
# For CPU-only installations, use:
pip install -r cpu_requirements.txt
ตรวจสอบให้แน่ใจว่าคุณได้ดาวน์โหลด ffmpeg บนเทอร์มินัล windows ( winget ติดตั้ง ffmpeg ) หรือชำระเงิน https://ffmpeg.org/download.html จากนั้นรีสตาร์ทเชลล์หรือ vscode พิมพ์ ffmpeg -version เพื่อดูว่าติดตั้งอย่างถูกต้องหรือไม่
TTS ท้องถิ่นที่คุณอาจต้องใช้ cuDNN เพื่อใช้ nvidia GPU 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 .
ภาพนี้มีขนาดใหญ่มากเมื่อสร้างขึ้นเนื่องจากจุดตรวจสอบ อิมเมจพื้นฐาน เครื่องมือสร้าง และเครื่องมือเสียง - 40GB - อาจมีวิธีทำให้เล็กลงซึ่งฉันยังไม่ได้ลอง เป็นเพียงการทดลองเพื่อดูว่าฉันสามารถทำให้มันเล็กลงได้หรือไม่ งาน!
คำสั่ง Docker run อนุญาตให้คุณใช้ไมโครโฟนในคอนเทนเนอร์นักเทียบท่า
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
ในโฟลเดอร์นักเทียบท่า ยังมีสคริปต์บางตัวสำหรับอัปเดตโมเดลและผู้ให้บริการ 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)
เรียกใช้แอปพลิเคชัน: ?
เว็บ UI
uvicorn app.main:app --host 0.0.0.0 --port 8000
ค้นหาบน http://localhost:8000/
CLI เท่านั้น
python cli.py
เพิ่มชื่อและรหัสเสียงใน elevenlabs_voices.json
- ใน 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
กดเริ่มเพื่อเริ่มพูด หยุดพัก กดหยุด เมื่อพร้อมอีกครั้ง กดเริ่มใหม่อีกครั้ง กดหยุดเพื่อเปลี่ยนอักขระและเสียงในรายการแบบเลื่อนลง คุณยังสามารถเลือก Model Provider และ TTS Provider ที่คุณต้องการในเมนูแบบเลื่อนลง จากนั้นระบบจะอัปเดตและใช้ผู้ให้บริการที่เลือกต่อไป การพูดว่า Exit, Leave หรือ Quit ก็เหมือนกับการกดหยุด
http://localhost: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 หรือ 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 ไปที่แท็บขั้นสูงแล้วคลิกตัวแปรสภาพแวดล้อม แก้ไขตัวแปร System PATH:
ในส่วนตัวแปรระบบ ให้ค้นหาตัวแปร 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 นั้นใช้ได้และคุณตั้งค่าไมโครโฟนเป็นอุปกรณ์เริ่มต้น ฉันมีปัญหานี้เมื่อใช้ Bluetooth apple airpods และสิ่งนี้แก้ไขได้
คลิกที่ภาพขนาดย่อเพื่อเปิดวิดีโอ ✌️
คลีไอ
GPU - ท้องถิ่น 100% - ollama llama3, xtts-v2
คลิกที่ภาพขนาดย่อเพื่อเปิดวิดีโอ ✌️
CPU เฉพาะโหมด CLI
การสนทนาของมนุษย์ต่างดาวโดยใช้ openai gpt4o และคำพูด openai สำหรับ 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