นี่คือ POC ที่แสดงให้เห็นว่าบอทสองบอทสามารถ "พูด" ได้อย่างอิสระโดยใช้ LLM และ TTS มันใช้ Nats Jetstream สำหรับการกำหนดเส้นทางข้อความ Ollama สำหรับการสร้างข้อความโดยใช้ LLM ของตัวเลือกของผู้ใช้และ PlayHT API สำหรับการสังเคราะห์คำพูด TTS
สำคัญ
โครงการนี้ถูกสร้างขึ้นอย่างหมดจดเพื่อจุดประสงค์ด้านการศึกษาและมีแนวโน้มที่จะขี่กับแมลงความไร้ประสิทธิภาพ ฯลฯ คุณควรพิจารณาโครงการนี้ว่าเป็นการทดลองสูง
คลิกเพื่อดู/ฟังบทสนทนาตัวอย่าง:
ลำดับ
ผู้เข้าร่วม gotts เป็น tts
ผู้เข้าร่วม Gollm เป็น LLM
Gobot ผู้เข้าร่วม
ผู้เข้าร่วม Rustbot
ผู้เข้าร่วม Rustllm เป็น LLM
ผู้เข้าร่วม Rustts เป็น TTS
Gobot->>+Rustbot: สวัสดี Rustbot!
Rustbot->> Rustllm: สวัสดี Rustbot!
Rustllm->> Rusttts: สวัสดี Gobot!
Rustllm->> Rustbot: สวัสดี Gobot!
Rustbot->>-Gobot: สวัสดี Gobot!
เปิดใช้งาน Gobot
Gobot->> Gollm: สวัสดี Gobot!
Gollm->> Gotts: สอนฉันเกี่ยวกับ Rust!
Gollm->> GOBOT: สอนฉันเกี่ยวกับ Rust!
Gobot->>-Rustbot: Teach Me เกี่ยวกับ Rust!
ซูมในมุมมองเกี่ยวกับสถาปัตยกรรมระดับสูง:
ผังงานวัณโรค
subgraph ""
playht (playht api)
Ollama (Ollama)
จบ
Bot <-> ollama
bot <-> playht
Bot <-> nats [[Nats Jetstream]]
บันทึก
นางเงือกไม่ได้รับการสนับสนุนที่เหมาะสมสำหรับการควบคุมเค้าโครงหรือแม้แต่ตำนานกราฟพื้นฐานมีวิธีแก้ปัญหาที่น่ากลัวดังนั้นฉันจึงเลือกที่จะไม่ใช้มันใน readme นี้ดังนั้นแผนภาพอาจรู้สึกไม่สบายเล็กน้อย
ผังงานวัณโรค
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 Worker อ่านข้อความที่ส่งไปยังช่อง prompts และส่งต่อไปยัง Ollama สำหรับการสร้าง LLMllm ส่งไปยังช่อง ttsChunks และ jetChunks ทั้งช่องtts 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, distros อื่น ๆ มีชื่อแพ็คเกจที่แตกต่างกัน
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