이것은 LLM과 TTS를 사용하여 두 봇이 어떻게 자율적으로 서로 "말"할 수 있는지 보여주는 POC입니다. 메시지 라우팅에 Nats JetStream, 사용자 선택의 LLM을 사용하여 텍스트를 생성하기위한 Ollama 및 TTS Speech Synthesis의 Playht API를 사용합니다.
중요한
이 프로젝트는 순전히 교육 목적으로 구축되었으므로 버그, 비 효율성 등으로 탑승 할 수 있습니다.이 프로젝트를 실험적으로 고려해야합니다.
샘플 대화를보고/듣기 위해 클릭하십시오.
시퀀스 인디 아그램
참가자 Gotts는 TTS로 Gotts
LLM으로 참가자 Gollm
참가자 gobot
참가자 Rustbot
참가자 Rustllm으로 LLM
참가자 Rusttts로 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 : Rust에 대해 가르쳐주세요!
높은 수준의 아키텍처를 확대 함 :
흐름도 TB
하위 그래프 "" "
Playht (Playht API)
올라마 (올라마)
끝
봇 <--> ollama
봇 <--> playht
bot <--> nats [[Nats JetStream]]
메모
Mermaid는 레이아웃을 제어하거나 기본 그래프 범례를 제어하는 데 적절한 지원을받지 않습니다. 끔찍한 해결 방법이 있으므로이 readme에서 사용하지 않기로 결정했습니다. 따라서 다이어그램은 다루기가 어렵다고 느낄 수 있습니다.
흐름도 TB
Ollama {Ollama}
playht {playht}
LLM ((LLM))
TTS ((TTS))
Jetwriter ((Jetwriter))
JetReader ((JetReader))
ttschunks (ttschunks)
jetchunks (jetchunks)
프롬프트 (프롬프트)
ttsdone (ttsdone)
하위 그래프 Nats JetStream
GO (Go)
녹 (녹)
끝
go-- 1.-> JetReader
제트 라이터-7.-> 녹
제트 리더-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 Worker는 prompts 채널로 전송 된 메시지를 읽고 LLM Generation을 위해 Ollama로 전달합니다.llm 작업자는 ttsChunks 및 jetChunks 채널 모두에게 보냅니다.tts Worker는 메시지를 읽고 메시지를 Playht API로 보냅니다. 오디오를 기본 오디오 장치로 스트리밍합니다.tts Worker가 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 응답하기 전에 gobot 기다립니다!
gobot 시작 :
go run ./gobot/... rustbot 시작 :
cargo run --manifest-path rustbot/Cargo.toml