Voice Chat AI เป็นโปรเจ็กต์ที่ให้คุณโต้ตอบกับตัวละคร AI ต่างๆ โดยใช้คำพูด คุณสามารถเลือกตัวละครได้หลากหลาย โดยแต่ละตัวจะมีบุคลิกและเสียงที่เป็นเอกลักษณ์ สนทนาอย่างจริงจังกับ Albert Einstein หรือแสดงบทบาทสมมติกับระบบปฏิบัติการจากภาพยนตร์เรื่อง 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