Dies ist ein POC, der zeigt, wie zwei Bots mithilfe eines LLM und TTS autonom miteinander "sprechen" können. Es verwendet Nats Jetstream für Nachrichtenrouting, Ollama zum Generieren von Text mit einem LLM der Auswahl und der PlayHT -API des Benutzers für die TTS -Sprachsynthese.
Wichtig
Dieses Projekt wurde nur für Bildungszwecke erstellt und ist daher wahrscheinlich mit Fehlern, Ineffizienzen usw. gefahren. Sie sollten dieses Projekt als äußerst experimentell ansehen.
Klicken Sie hier, um ein Beispielgespräch zu sehen/zu hören:
sequenzieren
Teilnehmer Gotts als TTS
Teilnehmer Gollm als LLM
Teilnehmer Gobot
Teilnehmer Rostbot
Teilnehmer rostllm als LLM
Teilnehmer Rusttts als TTS
Gobot->>+Rustbot: Hallo Rustbot!
Rustbot->> Rustllm: Hallo Rustbot!
Rustllm->> Rusttts: Hallo Gobot!
Rustllm->> Rustbot: Hallo Gobot!
Rustbot->>-Gobot: Hallo Gobot!
Gobot aktivieren
Gobot->> Gollm: Hallo Gobot!
Gollm->> Gotts: Bring mir Rost bei!
Gollm->> Gobot: Bring mir Rost bei!
Gobot->>-Rustbot: Bring mich über Rost bei!
Im Hinblick auf die hochrangige Architektur vergrößert:
Flowchart TB
Subgraph "" "
Playht (PlayHt API)
Ollama (Ollama)
Ende
Bot <--> Ollama
Bot <--> Playht
Bot <--> nats [[Nats Jetstream]]
Notiz
Mermaid hat keine ordnungsgemäße Unterstützung für die Steuerung von Layout oder sogar grundlegende Graphenlegenden Es gibt einige schreckliche Problemumgehungen
Flowchart TB
Ollama {Ollama}
Playht {PlayHt}
LLM ((LLM))
TTS ((TTS))
Jetwriter ((Jetwriter))
Jetreader ((Jetreader))
TTSchunks (TTSchunks)
jetchunks (jetchunks)
Eingabeaufforderungen (Eingabeaufforderungen)
TTSDone (TTSDone)
Subgraph Nats Jetstream
Geh (gehen Sie)
Rost (Rost)
Ende
Go-- 1.-> Jetreader
Jetwriter-7.-> Rost
Jetreader-- 2.-> Eingabeaufforderungen
Eingabeaufforderungen-3.-> llm
LLM-> Ollama
llm-- 4.-> ttschunks
LLM-- 4.-> Jetchunks
Jetchunks-> JetWriter
ttschunks-> tts
TTS-- 5.-> Playht
TTS-- 6.-> TTSDone
TTSDone-> JetWriter
jet.Reader erhält eine Nachricht, die in einem Jetstream -Thema veröffentlicht wurdejet.Reader sendet diese Nachricht an den promptsllm Worker liest die Nachrichten, die an den prompts gesendet werden, und leitet sie für die LLM -Generation an Ollama weiterllm -Mitarbeiter sendet sie sowohl an ttsChunks als auch an jetChunks -Kanäletts Worker liest die Nachricht und sendet die Nachricht an die PlayHT -API und streamt den Audio an das Standard -Audiogerät.jet.Writer Wiedergabe tts Worker ttsDone hatjet.Writer erhält die Benachrichtigung auf dem ttsDone -Kanal und veröffentlicht die Meldung, die sie auf jetChunks -Kanal an ein Jetstream -Motiv empfangen hatEs gibt ein paar Voraussetzungen:
Beide Bots verwenden NATS als Kommunikationskanal.
Installieren
brew tap nats-io/nats-tools
brew install nats nats-serverLaufen:
nats-server -jsnix-shell -p nats-server natscli
nats-server -jsLaden Sie es von der offiziellen Site herunter oder sehen Sie die NIX -Installation unten.
nix-shell -p ollama
Führen Sie ein Modell aus, das Sie verwenden möchten
ollama run llama2Wenn Sie unter Linux ausführen
Notiz
Dies gilt für Ubuntu Linux, andere Distributionen haben wahrscheinlich unterschiedliche Paketnamen
sudo apt install -y --no-install-recommends libasound2-dev pkg-configSobald Sie ein Konto auf PlayHT erstellt haben, müssen Sie API -Schlüssel generieren. Weitere Informationen finden Sie hier.
Jetzt müssen Sie sie über die folgenden Umgebungsvariablen exportieren, die von den von uns verwendeten Clientbibliotheken (Go-Playht, PlayHt_RS) gelesen werden:
export PLAYHT_SECRET_KEY=XXXX
export PLAYHT_USER_ID=XXXWichtig
Sobald Sie gobot angefangen haben, müssen Sie es fordern. gobot liest Eingabeaufforderung von stdin , das das Gespräch startet: rusbot wartet auf gobot , bevor es antwortet!
Starten Sie die gobot :
go run ./gobot/... Starten Sie den rustbot :
cargo run --manifest-path rustbot/Cargo.toml