Voice Chat AI هو مشروع يسمح لك بالتفاعل مع شخصيات مختلفة من الذكاء الاصطناعي باستخدام الكلام. يمكنك الاختيار بين شخصيات مختلفة، ولكل منها شخصيات وأصوات فريدة. قم بإجراء محادثة جادة مع ألبرت أينشتاين أو لعب الأدوار مع نظام التشغيل من فيلم HER.
يمكنك تشغيل كل شيء محليًا، ويمكنك استخدام openai للدردشة والصوت، ويمكنك المزج بين الاثنين. يمكنك استخدام أصوات ElevenLabs مع نماذج ollama التي يتم التحكم فيها جميعًا من خلال واجهة مستخدم الويب. اطلب من الذكاء الاصطناعي أن ينظر إلى شاشتك وسيشرح لك بالتفصيل ما ينظر إليه.
استنساخ المستودع:
git clone https://github.com/bigsk1/voice-chat-ai.git
cd voice-chat-ai
بالنسبة لإصدار وحدة المعالجة المركزية فقط: استنساخ فرع وحدة المعالجة المركزية فقط 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 أو أدوات بناء أحدث على نظام التشغيل 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
بالنسبة لإصدار وحدة المعالجة المركزية فقط: استنساخ فرع وحدة المعالجة المركزية فقط https://github.com/bigsk1/voice-chat-ai/tree/cpu-only
# For CPU-only installations, use:
pip install -r cpu_requirements.txt
تأكد من تنزيل ffmpeg، على محطة Windows (winget install ffmpeg) أو قم بالخروج https://ffmpeg.org/download.html ثم أعد تشغيل shell أو vscode، اكتب ffmpeg -version لمعرفة ما إذا كان مثبتًا بشكل صحيح
تحويل النص إلى كلام (TTS) المحلي قد تحتاج أيضًا إلى cuDNN لاستخدام nvidia GPU https://developer.nvidia.com/cudnn وتأكد من وجود C:Program FilesNVIDIACUDNNv9.5bin12.6 في مسار النظام
تحتاج إلى تنزيل نقاط التفتيش للنماذج المستخدمة في هذا المشروع. يمكنك تنزيلها من صفحة إصدارات GitHub واستخراج الملف المضغوط إلى مجلد المشروع.
بعد التحميل ضع المجلدات كما يلي:
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 .
هذه الصورة ضخمة عند إنشائها بسبب جميع نقاط التفتيش والصورة الأساسية وأدوات البناء والأدوات الصوتية - 40 جيجابايت - ربما تكون هناك طريقة لتصغيرها لم أحاولها بعد، كانت مجرد تجربة لمعرفة ما إذا كان بإمكاني الحصول عليها عمل!
يتيح لك أمر 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
يوجد في مجلد docker أيضًا بعض البرامج النصية لتحديث النموذج وموفر tts في الحاوية، بحيث يمكنك التغيير من openai إلى ollama والعودة مرة أخرى إذا أردت، بدلاً من exec في الحاوية وإجراء التغييرات يدويًا.
.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)
تشغيل التطبيق : ؟
واجهة مستخدم الويب
uvicorn app.main:app --host 0.0.0.0 --port 8000
ابحث عن http://localhost:8000/
سطر الأوامر فقط
python cli.py
أضف الأسماء والمعرفات الصوتية في elevenlabs_voices.json
- في واجهة الويب، يمكنك تحديدها في القائمة المنسدلة.
{
"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
اضغط على ابدأ لبدء الحديث. خذ استراحة، وتوقف، وعندما تكون جاهزًا مرة أخرى، اضغط على ابدأ مرة أخرى. اضغط على "إيقاف" لتغيير الأحرف والأصوات في القائمة المنسدلة. يمكنك أيضًا تحديد موفر النموذج وموفر تحويل النص إلى كلام (TTS) الذي تريده في القائمة المنسدلة وسيتم تحديث واستخدام الموفر المحدد للمضي قدمًا. إن قول خروج أو مغادرة أو إنهاء يشبه الضغط على زر التوقف.
http://localhost:8000/
انقر على الصورة المصغرة لفتح الفيديو☝️
character/wizard
).character/wizard/wizard.txt
).character/wizard/prompts.json
). wizard.txt
هذه هي المطالبة التي يستخدمها الذكاء الاصطناعي لمعرفة هويته
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
هذا مخصص لتحليل المشاعر، بناءً على ما تقوله، يمكنك توجيه الذكاء الاصطناعي للرد بطرق معينة، عندما تتحدث يتم استخدام محلل TextBlob
وإعطائه درجة، بناءً على تلك النتيجة يتم ربطه بالحالات المزاجية الموضحة أدناه وتمريرها إلى يشرح الذكاء الاصطناعي في استجابة المتابعة حالتك المزاجية ومن ثم يوجه الذكاء الاصطناعي للرد بأسلوب معين.
{
"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. انتقل إلى علامة التبويب "خيارات متقدمة"، وانقر فوق "متغيرات البيئة". تحرير متغير مسار النظام:
في قسم متغيرات النظام، ابحث عن متغير المسار، وحدده، ثم انقر فوق تحرير. انقر فوق جديد وأضف المسار إلى دليل 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 ffmpeg) وتأكد أيضًا من أن إعدادات خصوصية الميكروفون على Windows جيدة ومن ضبط الميكروفون على الجهاز الافتراضي. لقد واجهت هذه المشكلة عند استخدام Apple airpods بتقنية البلوتوث وهذا حلها.
انقر على الصورة المصغرة لفتح الفيديو☝️
سطر الأوامر
وحدة معالجة الرسومات - محلية 100% - ollama llama3، xtts-v2
انقر على الصورة المصغرة لفتح الفيديو☝️
وضع وحدة المعالجة المركزية فقط CLI
محادثة غريبة باستخدام openai gpt4o وخطاب openai لتحويل النص إلى كلام.
انقر على الصورة المصغرة لفتح الفيديو☝️
الإخراج التفصيلي في المحطة أثناء تشغيل التطبيق.
عند استخدام 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.