bot banter
1.0.0
這是一個POC,展示了兩個機器人如何使用LLM和TTS自主“說話”。它使用NATS JETSTREAM進行消息路由,Ollama使用用戶選擇的LLM生成文本,以及用於TTS語音綜合的PlayHT API。
重要的
該項目純粹是出於教育目的而構建的,因此很可能會被錯誤,效率低下等。您應該認為該項目是高度實驗性的。
單擊觀看/收聽示例對話:
測序圖
參與者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:教我銹!
在高級體系結構上進行了放大:
流程圖結核
子圖“”
Playht(Playht API)
ollama(ollama)
結尾
bot <-> ollama
bot <-> Playht
bot <-> nats [[nats jetstream]]
筆記
美人魚沒有適當的支持來控制佈局甚至基本的圖形傳說,有一些可怕的解決方法,所以我選擇在此讀數中不使用它們,因此該圖可能會感到有些笨拙
流程圖結核
ollama {ollama}
playht {playht}
LLM((LLM))
TTS((TTS))
JetWriter((JetWriter))
juetReader((jetReader))
ttschunks(ttschunks)
jetchunks(jetchunks)
提示(提示)
ttsdone(ttsdone)
子圖nats射擊
去(去)
銹(銹)
結尾
去 - 1。 -> jetReader
噴氣作者 - 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收到一條有關Jetstream主題的消息jet.Reader將此消息發送到prompts頻道llm工作人員閱讀發送到prompts頻道的消息,並將其轉發給Ollama for LLM生成llm工人將其發送到ttsChunks和jetChunks頻道tts Worker讀取消息,並將消息發送到Playht API並將音頻流傳輸到默認的音頻設備;tts工人,請通過ttsDone頻道通知jet.Writerjet.Writer在ttsDone頻道上接收通知,並將其在jetChunks頻道上收到的消息發布給Jetstream主題有一些先決條件:
這兩個機器人都使用NAT作為其通信渠道。
安裝
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