هذا هو POC يوضح كيف يمكن أن "يتحدث" اثنين من الروبوتات بشكل مستقل لبعضهما البعض باستخدام LLM و TTS. يستخدم Nats JetStream لتوجيه الرسائل ، Ollama لإنشاء نص باستخدام LLM من اختيار المستخدم و API Playht لتوليف الكلام TTS.
مهم
تم بناء هذا المشروع بحتة لأغراض تعليمية ، وبالتالي فمن المحتمل أن يتم تعزيزه مع الحشرات ، وعدم الكفاءة ، وما إلى ذلك. يجب أن تعتبر هذا المشروع تجريبيًا للغاية.
انقر لمشاهدة/الاستماع إلى نموذج محادثة:
Sequencediagram
Gotts المشارك كما TTS
المشارك جولم باسم LLM
المشارك جوبوت
المشارك Rustbot
المشارك Rustllm كما LLM
Rusttts المشاركين مثل TTS
Gobot->>+Rustbot: مرحبًا Rustbot!
Rustbot->> Rustllm: مرحبًا Rustbot!
Rustllm->> Rusttts: مرحبًا gobot!
Rustllm->> Rustbot: Hi Gobot!
Rustbot->>-gobot: مرحبًا gobot!
تنشيط gobot
Gobot->> Gollm: مرحبًا Gobot!
Gollm->> Gotts: علمني عن الصدأ!
Gollm->> gobot: علمني عن الصدأ!
Gobot->>-Rustbot: علمني عن الصدأ!
تم تكبيرها في النظرة إلى الهندسة المعمارية عالية المستوى:
مخطط انسيابي السل
الخرف الفرعي ""
Playht (Playht API)
أولاما (أولاما)
نهاية
بوت <-> Ollama
بوت <-> playht
bot <-> nats [[Nats jetstream]]
ملحوظة
لا تملك حورية البحر دعمًا مناسبًا للتحكم في التخطيط أو حتى أساطير الرسم البياني الأساسي ، فهناك بعض الحلول الرهيبة ، لذلك اخترت عدم استخدامها في هذه القراءة ، ومن ثم قد يشعر الرسم البياني باطلاع قليلاً
مخطط انسيابي السل
Ollama {Ollama}
playht {playht}
LLM ((LLM))
TTS ((TTS))
jetwriter ((jetwriter))
jetreader ((jetreader))
ttschunks (ttschunks)
jetchunks (jetchunks)
مطالبات (مطالبات)
TTSDONE (TTSDONE)
Subgraph Nats JetStream
اذهب (اذهب)
الصدأ (الصدأ)
نهاية
اذهب-1.-> Jetreader
jetwriter-7.-> الصدأ
Jetreader-2.-> المطالبات
مطالبات-3.-> LLM
LLM-> Ollama
LLM-- 4.-> ttschunks
LLM-- 4.-> Jetchunks
jetchunks-> jetwriter
ttschunks-> tts
TTS-- 5.-> Playht
TTS-- 6.-> ttsdone
ttsdone-> jetwriter
jet.Reader رسالة تم نشرها حول موضوع JetStreamjet.Reader هذه الرسالة إلى قناة promptsllm الرسائل المرسلة إلى قناة prompts وإعادة توجيهها إلى Ollama لتوليد LLMllm إلى كل من قنوات ttsChunks و jetChunkstts Worker الرسالة ويرسل الرسالة إلى Playht API ويدفق الصوت إلى جهاز الصوت الافتراضي ؛tts بإخطار jet.Writer عبر قناة ttsDone بأنه قد تم تشغيل الصوتjet.Writer الإخطار على قناة ttsDone ونشر الرسالة التي تلقتها على قناة jetChunks إلى موضوع JetStreamهناك بعض المتطلبات الأساسية:
يستخدم كلا الروبوتات NATS كقناة اتصال.
ثَبَّتَ
brew tap nats-io/nats-tools
brew install nats nats-serverيجري:
nats-server -jsnix-shell -p nats-server natscli
nats-server -jsقم بتنزيله من الموقع الرسمي أو شاهد تثبيت NIX أدناه.
nix-shell -p ollama
قم بتشغيل نموذج تقرر استخدامه
ollama run llama2إذا كنت تعمل على Linux ، فأنت بحاجة إلى تثبيت المكتبات التالية-على افتراض أنك ترغب في اللعب مع الخدمة الناطقة بالبراعة
ملحوظة
هذا بالنسبة إلى Ubuntu Linux ، على الأرجح أن توزيعات أخرى لها أسماء حزم مختلفة
sudo apt install -y --no-install-recommends libasound2-dev pkg-configبمجرد إنشاء حساب على Playht ، تحتاج إلى إنشاء مفاتيح API. انظر هنا لمزيد من التفاصيل.
الآن ، تحتاج إلى تصديرها عبر متغيرات البيئة التالية التي تقرأها مكتبات العميل التي نستخدمها (go-playht ، playht_rs):
export PLAYHT_SECRET_KEY=XXXX
export PLAYHT_USER_ID=XXXمهم
بمجرد أن تبدأ gobot ، تحتاج إلى مطالبة به. يقرأ gobot موجهًا من stdin الذي يبدأ المحادثة: rusbot ينتظر gobot قبل أن يستجيب!
ابدأ gobot :
go run ./gobot/... ابدأ rustbot :
cargo run --manifest-path rustbot/Cargo.toml