Ini adalah POC yang menunjukkan bagaimana dua bot dapat secara mandiri "berbicara" satu sama lain menggunakan LLM dan TTS. Ini menggunakan Nats JetStream untuk perutean pesan, ollama untuk menghasilkan teks menggunakan LLM pilihan pengguna dan playht API untuk sintesis ucapan TTS.
Penting
Proyek ini dibangun murni untuk tujuan pendidikan dan dengan demikian kemungkinan ditunggangi dengan bug, ketidakefisienan, dll. Anda harus menganggap proyek ini sebagai sangat eksperimental.
Klik untuk menonton/mendengarkan Contoh Percakapan:
Sequencediagram
peserta gotts sebagai tts
Peserta Gollm sebagai LLM
Peserta Gobot
Peserta Rustbot
Rustllm peserta sebagai llm
Partisipan Rusttts sebagai TTS
Gobot->>+RustBot: Hai Rustbot!
RustBot->> Rustllm: Hai Rustbot!
Rustllm->> Rusttts: Hai Gobot!
Rustllm->> RustBot: Hai Gobot!
RustBot->>-Gobot: Hai Gobot!
Aktifkan Gobot
Gobot->> Gollm: Hai Gobot!
Gollm->> Gotts: Ajari aku tentang karat!
Gollm->> Gobot: Ajari aku tentang karat!
Gobot->>-Rustbot: Ajari aku tentang karat!
Diperkecil pada arsitektur tingkat tinggi:
Flowchart TB
subgraph ""
Playht (API playht)
Ollama (Ollama)
akhir
bot <-> ollama
bot <--> playht
bot <-> nats [[nats jetstream]]
Catatan
Putri duyung tidak memiliki dukungan yang tepat untuk mengendalikan tata letak atau bahkan legenda grafik dasar ada beberapa solusi yang mengerikan, jadi saya telah memilih untuk tidak menggunakannya dalam readme ini, karenanya diagram mungkin terasa agak sulit
Flowchart TB
Ollama {ollama}
playht {playht}
llm ((llm))
TTS ((TTS))
jetwriter ((jetwriter))
Jetreader ((Jetreader))
Ttschunks (ttschunks)
Jetchunks (Jetchunks)
meminta (meminta)
ttsdone (ttsdone)
Subgraph Nats Jetstream
Pergi pergi)
Karat (karat)
akhir
Go-- 1.-> Jetreader
Jetwriter-- 7.-> Rust
Jetreader-- 2.-> meminta
prompts-- 3.-> llm
llm-> ollama
llm-- 4.-> ttschunks
llm-- 4.-> Jetchunks
Jetchunks-> Jetwriter
ttschunks-> tts
tts-- 5.-> playht
tts-- 6.-> ttsdone
ttsdone-> jetwriter
jet.Reader menerima pesan yang diterbitkan pada subjek jetstreamjet.Reader mengirim pesan ini ke saluran promptsllm membaca pesan yang dikirim ke saluran prompts dan meneruskannya ke ollama untuk generasi llmllm mengirimkannya ke saluran ttsChunks dan jetChunkstts Worker membaca pesan dan mengirim pesan ke playht API dan streaming audio ke perangkat audio default;tts memberi tahu jet.Writer melalui saluran ttsDone bahwa ia selesai bermain audiojet.Writer Menerima pemberitahuan di saluran ttsDone dan menerbitkan pesan yang diterimanya di saluran jetChunks ke subjek jetstreamAda beberapa prasyarat:
Kedua bot menggunakan NATS sebagai saluran komunikasi mereka.
Memasang
brew tap nats-io/nats-tools
brew install nats nats-serverBerlari:
nats-server -jsnix-shell -p nats-server natscli
nats-server -jsUnduh dari situs resmi atau lihat pemasangan NIX di bawah ini.
nix-shell -p ollama
Jalankan model yang Anda putuskan untuk digunakan
ollama run llama2Jika Anda menjalankan di Linux, Anda harus menginstal perpustakaan berikut-dengan asumsi Anda ingin bermain dengan layanan berbahasa bot
Catatan
Ini untuk Ubuntu Linux, distro lain kemungkinan memiliki nama paket yang berbeda
sudo apt install -y --no-install-recommends libasound2-dev pkg-configSetelah Anda membuat akun di playht, Anda perlu menghasilkan kunci API. Lihat di sini untuk detail lebih lanjut.
Sekarang, Anda perlu mengekspornya melalui variabel lingkungan berikut yang dibaca oleh pustaka klien yang kami gunakan (go-playht, playht_rs):
export PLAYHT_SECRET_KEY=XXXX
export PLAYHT_USER_ID=XXXPenting
Setelah Anda memulai gobot , Anda perlu meminta. gobot membaca prompt dari stdin yang memulai percakapan: rusbot menunggu gobot sebelum merespons!
Mulailah gobot :
go run ./gobot/... Mulai rustbot :
cargo run --manifest-path rustbot/Cargo.toml