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