これは、LLMとTTSを使用して2つのボットがどのように互いに「話す」ことができるかを示すPOCです。メッセージルーティングにはNATS JetStream、ユーザーの選択のLLMを使用してテキストを生成するためにOllamaを使用し、TTS音声合成にPlayHT APIを使用します。
重要
このプロジェクトは純粋に教育目的で構築されたため、バグ、非効率性などに乗っている可能性があります。このプロジェクトは非常に実験的であると考えるべきです。
クリックしてサンプルの会話を視聴/聞いてください:
Sequendediagram
TTSとしての参加者ゴッツ
LLMとしての参加者Gollm
参加者のゴボット
参加者Rustbot
参加者RustllmとしてLLM
TTSとしての参加者Rusttts
Gobot- >>+Rustbot:こんにちはRustbot!
Rustbot- >> Rustllm:こんにちはRustbot!
rustllm- >> rusttts:こんにちはゴボット!
Rustllm- >> Rustbot:こんにちはGobot!
Rustbot- >> -Gobot:こんにちはGobot!
ゴボットをアクティブにします
Gobot- >> Gollm:こんにちはGobot!
Gollm- >> Gotts:錆について教えてください!
Gollm- >> Gobot:錆について教えてください!
GOBOT- >> - Rustbot:錆について教えてください!
高レベルのアーキテクチャについてズームインして:
フローチャートTB
サブグラフ ""
playht(playht api)
オラマ(オラマ)
終わり
ボット<->オラマ
ボット<-> playht
bot <-> nats [[nats jetstream]]
注記
Mermaidには、レイアウトの制御や基本的なグラフの伝説を制御するための適切なサポートがありません。ひどい回避策があるため、このREADMEで使用しないことを選択しました。
フローチャートTB
オラマ{オラマ}
playht {playht}
LLM((LLM))
TTS((TTS))
ジェットライター((ジェットライター))
JetReader((JetReader))
ttschunks(ttschunks)
ジェチャンクス(ジェチャンク)
プロンプト(プロンプト)
ttsdone(ttsdone)
サブグラフナットジェットストリーム
ゴーゴー)
錆(錆)
終わり
Go-- 1 .-> JetReader
ジェットライター - 7。->錆
JetReader - 2。->プロンプト
プロンプト - 3。-> llm
LLM->オラマ
LLM-4 .-> ttschunks
LLM-4 .-> JETCHUNKS
JECTECHUNKS-> JetWriter
ttschunks-> tts
TTS--5。-> playht
TTS-6.。-> ttsdone
TTSDONE-> JetWriter
jet.Reader 、JetStreamの件名で公開されたメッセージを受信しますjet.Reader 、このメッセージをpromptsチャネルに送信しますllmワーカーは、 promptsチャネルに送信されたメッセージを読み取り、LLM世代のためにオラマに転送しますllmワーカーはそれをttsChunksとjetChunksチャンネルの両方に送信しますttsワーカーはメッセージを読み取り、メッセージをPlayHt APIに送信し、オーディオをデフォルトのオーディオデバイスにストリーミングします。ttsワーカーにttsDoneチャンネルを介してjet.Writerに通知します。jet.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 llama2Linuxで実行している場合は、次のライブラリをインストールする必要があります。
注記
これはubuntu linuxのためです、他のディストリビューションはおそらく異なるパッケージ名を持っています
sudo apt install -y --no-install-recommends libasound2-dev pkg-configPlayhtでアカウントを作成したら、APIキーを生成する必要があります。詳細については、こちらをご覧ください。
これで、使用するクライアントライブラリ(go-playht、playht_rs)によって読み取られる次の環境変数を介してそれらをエクスポートする必要があります。
export PLAYHT_SECRET_KEY=XXXX
export PLAYHT_USER_ID=XXX重要
gobotを開始したら、促す必要があります。 gobot 、会話をキックスタートするstdinのプロンプトを読み取ります。Rusbot rusbotそれが応答する前にgobotを待ちます!
gobotを開始します:
go run ./gobot/... rustbotを開始します:
cargo run --manifest-path rustbot/Cargo.toml