fbpaul/realtime-dialogue-bot

結合STT、TTS與LLM,實現即時的語音對話Bot

Python

1

31 commits

updated Mar 19, 2026

See the code

README

結合 STT(語音轉文字)、TTS(文字轉語音)與 LLM(大型語言模型),實現即時的語音對話機器人系統。

English | 中文


1. 專案介紹

Realtime Dialogue Bot 整合 語音轉文字 (STT)、文字轉語音 (TTS) 與 大型語言模型 (LLM) 技術,打造智能語音對話系統,實現自然、即時的語音互動體驗。

核心工作流程:

語音輸入 → STT → LLM 處理 → TTS → 語音輸出

系統支援多種 TTS 引擎、語音克隆功能,並提供現代化的網頁界面,帶來無縫的使用體驗。


2. 支援功能與引擎

功能特色BreezyVoiceVibeVoiceIndexTTSSpark-TTS
即時合成⚠️✅✅✅
語音克隆✅✅✅✅
中國口音低中等重重
合成速度 (RTF)1.5-3.0~0.82~0.45~1.0
音質表現高高中等高
穩定性⚠️✅✅✅

性能說明:

  • IndexTTS: 最快的合成速度,適合即時應用
  • VibeVoice: 速度與品質平衡良好,需要高品質語音樣本
  • Spark-TTS: 接近即時性能,音質表現佳
  • BreezyVoice: 品質優秀但可能出現音頻跳針導致生成時間過長

3. 安裝需求

環境要求

  • Python 3.8+
  • Node.js 16+
  • CUDA 11.8+ (推薦使用 GPU)
  • Docker & Podman (容器化部署)

快速設置

# Clone 專案
git clone https://github.com/fbpaul/realtime-dialogue-bot.git
cd realtime-dialogue-bot

# 後端設置 (詳細說明請參考 backend/README.md)
cd backend
pip install -r requirements.txt

# 前端設置 (詳細說明請參考 frontend/README.md)  
cd frontend
npm install

4. 使用說明

4.1 後端服務

啟動 FastAPI 後端服務器:

cd backend
python start_server.py

後端提供以下 API 端點:

  • /chat - LLM 對話端點
  • /stt - 語音轉文字轉換
  • /tts/breezy - BreezyVoice TTS 合成
  • /tts/vibe - VibeVoice TTS 合成
  • /tts/index - IndexTTS 合成
  • /tts/spark - Spark-TTS 合成
API 使用範例 (點擊展開)
import requests
import json

# STT 範例
with open("audio.wav", "rb") as f:
    response = requests.post("http://localhost:8000/stt", files={"file": f})
    text = response.json()["text"]
    print(f"識別文字: {text}")

# 聊天範例
response = requests.post(
    "http://localhost:8000/chat",
    json={"message": "你好,今天天氣如何?"}
)
reply = response.json()["response"]
print(f"機器人回覆: {reply}")

# TTS 範例
response = requests.post(
    "http://localhost:8000/tts/index",
    json={
        "text": "您好,這是一段測試語音",
        "speaker": "Speaker1"
    }
)
with open("output.wav", "wb") as f:
    f.write(response.content)

4.2 前端應用

啟動 Vue.js 前端:

cd frontend
npm run dev

前端功能包括:

  • 即時語音聊天: 點擊說話的語音互動
  • 電話銷售模擬: AI 驅動的銷售對話訓練
  • 多 TTS 引擎選擇: 從 4 種不同 TTS 引擎中選擇
  • 語音克隆設置: 上傳自訂語音樣本
  • 響應式設計: 支援桌面和移動設備
前端功能概覽 (點擊展開)

主要組件:

  • VoiceChat.vue - 主要語音互動界面
  • PhoneSalesSimulation.vue - 專門的銷售訓練模組
  • useAudioRecorder.js - 音頻錄製組合式函數
  • Pinia 狀態管理

核心特色:

  • 基於 WebRTC 的音頻錄製
  • 即時音頻視覺化
  • 對話歷史管理
  • TTS 引擎選擇設定面板
  • 移動端響應式設計

4.3 Docker 部署

使用 Docker 部署整個系統:

# 後端部署
cd backend
docker-compose up -d

# 前端部署
cd frontend
docker-compose up -d
Docker 配置詳情 (點擊展開)

後端 Docker 設置:

  • 支援 CUDA 的基礎映像檔進行 GPU 加速
  • 模型下載和緩存
  • 多階段建置優化映像檔大小
  • 健康檢查和重啟政策

前端 Docker 設置:

  • 基於 Nginx 的靜態檔案服務
  • 生產環境建置優化
  • 可配置的 API 端點
  • SSL/TLS 支援準備
---

5. 系統架構

5.1 專案結構

realtime-dialogue-bot/
├── README.md               # 專案說明文件
├── assets/                 # 靜態資源檔案
├── backend/                # 後端服務
│   ├── app/                # FastAPI 應用程式
│   │   ├── main.py         # API 主程式
│   │   ├── config.py       # 配置管理
│   │   ├── stt.py          # 語音轉文字服務
│   │   ├── chat.py         # LLM 聊天服務
│   │   ├── tts_breezy.py   # BreezyVoice TTS 服務
│   │   ├── tts_vibe.py     # VibeVoice TTS 服務
│   │   ├── tts_index.py    # IndexTTS 服務
│   │   └── tts_spark.py    # Spark-TTS 服務
│   ├── BreezyVoice/        # BreezyVoice 模型原始碼
│   ├── VibeVoice/          # VibeVoice 模型原始碼
│   ├── Spark-TTS/          # Spark-TTS 模型原始碼
│   ├── index-tts/          # IndexTTS 模型原始碼
│   ├── llm_tools/          # LLM 工具和配置
│   │   ├── async_llm_chat.py
│   │   ├── embed_rerank_model.py
│   │   ├── llm_chat.py
│   │   ├── memory.py
│   │   └── configs/        # LLM 模型配置
│   ├── models/             # 預訓練模型目錄
│   │   ├── models--Qwen--Qwen2.5-1.5B/
│   │   ├── models--MediaTek-Research--BreezyVoice-300M/
│   │   ├── models--mobiuslabsgmbh--faster-whisper-large-v3-turbo/
│   │   ├── IndexTTS-1.5/
│   │   ├── Spark-TTS-0.5B/
│   │   └── VibeVoice/
│   ├── voices/             # 語者音檔目錄
│   ├── outputs/            # 生成音頻輸出目錄
│   ├── uploads/            # 上傳檔案暫存目錄
│   ├── config.yaml         # 主要配置檔案
│   ├── requirements.txt    # Python 依賴套件
│   ├── Dockerfile          # 容器化配置
│   └── docker-compose.yml  # 多容器編排
├── frontend/               # 前端應用
│   ├── src/
│   │   ├── App.vue         # 主應用元件
│   │   ├── components/     # Vue 元件
│   │   ├── composables/    # Vue 組合式函數
│   │   ├── router/         # 路由配置
│   │   ├── services/       # API 服務
│   │   └── stores/         # 狀態管理
│   ├── package.json        # Node.js 依賴配置
│   ├── vite.config.js      # Vite 建置配置
│   ├── docker-compose.yml  # 前端容器配置
│   └── start-frontend*.sh  # 前端啟動腳本
└── repo_ref/               # 參考資料和文檔

5.2 系統性能指標

系統性能指標:

  • STT 延遲: ~500-800ms
  • LLM 響應: ~600-900ms
  • TTS 合成: ~2-7s (取決於引擎和文字長度)
  • 端到端延遲: ~3-8s

詳細 TTS 性能測試結果:

基於標準測試用例的 RTF (Real Time Factor) 性能測試結果:

BreezyVoice 測試結果

文本語者RTF合成時間音頻長度
短文字Speaker12.23022.088s9.903s
短文字Speaker22.17642.799s19.667s
短文字Speaker33.09519.582s6.327s
中等文字Speaker11.56922.710s14.478s
中等文字Speaker21.71362.698s36.595s
中等文字Speaker32.85923.232s8.127s
長文字Speaker11.90128.208s14.838s
長文字Speaker21.96781.422s41.390s
長文字Speaker32.30221.195s9.207s

VibeVoice 測試結果

文本語者RTF合成時間音頻長度
短文字Speaker11.0197.065s6.933s
短文字Speaker20.8516.124s7.200s
短文字Speaker30.8315.427s6.533s
中等文字Speaker10.82012.906s15.733s
中等文字Speaker20.8278.379s10.133s
中等文字Speaker30.8228.216s10.000s
長文字Speaker10.81910.488s12.800s
長文字Speaker20.8229.096s11.067s
長文字Speaker30.8209.951s12.133s

IndexTTS 測試結果

文本語者RTF合成時間音頻長度
短文字Speaker10.5404.079s7.552s
短文字Speaker20.4393.314s7.552s
短文字Speaker30.4833.070s6.357s
中等文字Speaker10.4444.541s10.240s
中等文字Speaker20.4264.367s10.240s
中等文字Speaker30.4464.358s9.771s
長文字Speaker10.4454.972s11.179s
長文字Speaker20.4444.890s11.008s
長文字Speaker30.4484.489s10.027s

Spark-TTS 測試結果

文本語者RTF合成時間音頻長度
短文字Speaker11.1609.302s8.020s
短文字Speaker31.0325.245s5.080s
中等文字Speaker11.00410.484s10.440s
中等文字Speaker31.0098.414s8.340s
長文字Speaker11.00010.476s10.480s
長文字Speaker31.0028.680s8.660s

RTF (Real Time Factor): 值越小表示合成速度越快。RTF=1.0 表示實時合成速度


6. 配置指南

6.1 後端配置

編輯 backend/config.yaml 來自訂系統設定:

# 模型配置
models:
  stt_model: "mobiuslabsgmbh/faster-whisper-large-v3-turbo"
  llm_model: "Qwen/Qwen2.5-1.5B"
  
# TTS 引擎設定
tts:
  default_engine: "index"  # breezy, vibe, index, spark
  voice_clone_enabled: true
  
# 性能設定
performance:
  cuda_enabled: true
  mixed_precision: true
  model_cache: true

6.2 語音克隆設置

  1. 準備語音樣本 (WAV 格式, 16kHz, 單聲道)
  2. 將樣本放置於 backend/voices/ 目錄
  3. 在 config.yaml 中配置語者設定
  4. 通過 API 測試語音克隆功能

7. 開發指南

7.1 新增 TTS 引擎

要整合新的 TTS 引擎:

  1. 創建新的 TTS 服務檔案: app/tts_newengine.py
  2. 實現 TTS 介面
  3. 添加配置設定
  4. 在 main.py 中註冊端點
  5. 更新前端引擎選擇

7.2 擴展 LLM 功能

要新增 LLM 功能:

  1. 修改 app/chat.py 添加新的對話邏輯
  2. 更新 llm_tools/configs/ 中的提示模板
  3. 如需要可添加記憶管理
  4. 使用不同模型配置進行測試

8. 相關文檔


9. 授權條款

本專案採用 MIT 授權條款 - 詳見 LICENSE 檔案


10. 開發團隊

fbpaul/realtime-dialogue-bot

結合STT、TTS與LLM,實現即時的語音對話Bot

Python

1

31 commits

updated Mar 19, 2026

See the code

README

結合 STT(語音轉文字)、TTS(文字轉語音)與 LLM(大型語言模型),實現即時的語音對話機器人系統。

English | 中文


1. 專案介紹

Realtime Dialogue Bot 整合 語音轉文字 (STT)、文字轉語音 (TTS) 與 大型語言模型 (LLM) 技術,打造智能語音對話系統,實現自然、即時的語音互動體驗。

核心工作流程:

語音輸入 → STT → LLM 處理 → TTS → 語音輸出

系統支援多種 TTS 引擎、語音克隆功能,並提供現代化的網頁界面,帶來無縫的使用體驗。


2. 支援功能與引擎

功能特色BreezyVoiceVibeVoiceIndexTTSSpark-TTS
即時合成⚠️✅✅✅
語音克隆✅✅✅✅
中國口音低中等重重
合成速度 (RTF)1.5-3.0~0.82~0.45~1.0
音質表現高高中等高
穩定性⚠️✅✅✅

性能說明:

  • IndexTTS: 最快的合成速度,適合即時應用
  • VibeVoice: 速度與品質平衡良好,需要高品質語音樣本
  • Spark-TTS: 接近即時性能,音質表現佳
  • BreezyVoice: 品質優秀但可能出現音頻跳針導致生成時間過長

3. 安裝需求

環境要求

  • Python 3.8+
  • Node.js 16+
  • CUDA 11.8+ (推薦使用 GPU)
  • Docker & Podman (容器化部署)

快速設置

# Clone 專案
git clone https://github.com/fbpaul/realtime-dialogue-bot.git
cd realtime-dialogue-bot

# 後端設置 (詳細說明請參考 backend/README.md)
cd backend
pip install -r requirements.txt

# 前端設置 (詳細說明請參考 frontend/README.md)  
cd frontend
npm install

4. 使用說明

4.1 後端服務

啟動 FastAPI 後端服務器:

cd backend
python start_server.py

後端提供以下 API 端點:

  • /chat - LLM 對話端點
  • /stt - 語音轉文字轉換
  • /tts/breezy - BreezyVoice TTS 合成
  • /tts/vibe - VibeVoice TTS 合成
  • /tts/index - IndexTTS 合成
  • /tts/spark - Spark-TTS 合成
API 使用範例 (點擊展開)
import requests
import json

# STT 範例
with open("audio.wav", "rb") as f:
    response = requests.post("http://localhost:8000/stt", files={"file": f})
    text = response.json()["text"]
    print(f"識別文字: {text}")

# 聊天範例
response = requests.post(
    "http://localhost:8000/chat",
    json={"message": "你好,今天天氣如何?"}
)
reply = response.json()["response"]
print(f"機器人回覆: {reply}")

# TTS 範例
response = requests.post(
    "http://localhost:8000/tts/index",
    json={
        "text": "您好,這是一段測試語音",
        "speaker": "Speaker1"
    }
)
with open("output.wav", "wb") as f:
    f.write(response.content)

4.2 前端應用

啟動 Vue.js 前端:

cd frontend
npm run dev

前端功能包括:

  • 即時語音聊天: 點擊說話的語音互動
  • 電話銷售模擬: AI 驅動的銷售對話訓練
  • 多 TTS 引擎選擇: 從 4 種不同 TTS 引擎中選擇
  • 語音克隆設置: 上傳自訂語音樣本
  • 響應式設計: 支援桌面和移動設備
前端功能概覽 (點擊展開)

主要組件:

  • VoiceChat.vue - 主要語音互動界面
  • PhoneSalesSimulation.vue - 專門的銷售訓練模組
  • useAudioRecorder.js - 音頻錄製組合式函數
  • Pinia 狀態管理

核心特色:

  • 基於 WebRTC 的音頻錄製
  • 即時音頻視覺化
  • 對話歷史管理
  • TTS 引擎選擇設定面板
  • 移動端響應式設計

4.3 Docker 部署

使用 Docker 部署整個系統:

# 後端部署
cd backend
docker-compose up -d

# 前端部署
cd frontend
docker-compose up -d
Docker 配置詳情 (點擊展開)

後端 Docker 設置:

  • 支援 CUDA 的基礎映像檔進行 GPU 加速
  • 模型下載和緩存
  • 多階段建置優化映像檔大小
  • 健康檢查和重啟政策

前端 Docker 設置:

  • 基於 Nginx 的靜態檔案服務
  • 生產環境建置優化
  • 可配置的 API 端點
  • SSL/TLS 支援準備
---

5. 系統架構

5.1 專案結構

realtime-dialogue-bot/
├── README.md               # 專案說明文件
├── assets/                 # 靜態資源檔案
├── backend/                # 後端服務
│   ├── app/                # FastAPI 應用程式
│   │   ├── main.py         # API 主程式
│   │   ├── config.py       # 配置管理
│   │   ├── stt.py          # 語音轉文字服務
│   │   ├── chat.py         # LLM 聊天服務
│   │   ├── tts_breezy.py   # BreezyVoice TTS 服務
│   │   ├── tts_vibe.py     # VibeVoice TTS 服務
│   │   ├── tts_index.py    # IndexTTS 服務
│   │   └── tts_spark.py    # Spark-TTS 服務
│   ├── BreezyVoice/        # BreezyVoice 模型原始碼
│   ├── VibeVoice/          # VibeVoice 模型原始碼
│   ├── Spark-TTS/          # Spark-TTS 模型原始碼
│   ├── index-tts/          # IndexTTS 模型原始碼
│   ├── llm_tools/          # LLM 工具和配置
│   │   ├── async_llm_chat.py
│   │   ├── embed_rerank_model.py
│   │   ├── llm_chat.py
│   │   ├── memory.py
│   │   └── configs/        # LLM 模型配置
│   ├── models/             # 預訓練模型目錄
│   │   ├── models--Qwen--Qwen2.5-1.5B/
│   │   ├── models--MediaTek-Research--BreezyVoice-300M/
│   │   ├── models--mobiuslabsgmbh--faster-whisper-large-v3-turbo/
│   │   ├── IndexTTS-1.5/
│   │   ├── Spark-TTS-0.5B/
│   │   └── VibeVoice/
│   ├── voices/             # 語者音檔目錄
│   ├── outputs/            # 生成音頻輸出目錄
│   ├── uploads/            # 上傳檔案暫存目錄
│   ├── config.yaml         # 主要配置檔案
│   ├── requirements.txt    # Python 依賴套件
│   ├── Dockerfile          # 容器化配置
│   └── docker-compose.yml  # 多容器編排
├── frontend/               # 前端應用
│   ├── src/
│   │   ├── App.vue         # 主應用元件
│   │   ├── components/     # Vue 元件
│   │   ├── composables/    # Vue 組合式函數
│   │   ├── router/         # 路由配置
│   │   ├── services/       # API 服務
│   │   └── stores/         # 狀態管理
│   ├── package.json        # Node.js 依賴配置
│   ├── vite.config.js      # Vite 建置配置
│   ├── docker-compose.yml  # 前端容器配置
│   └── start-frontend*.sh  # 前端啟動腳本
└── repo_ref/               # 參考資料和文檔

5.2 系統性能指標

系統性能指標:

  • STT 延遲: ~500-800ms
  • LLM 響應: ~600-900ms
  • TTS 合成: ~2-7s (取決於引擎和文字長度)
  • 端到端延遲: ~3-8s

詳細 TTS 性能測試結果:

基於標準測試用例的 RTF (Real Time Factor) 性能測試結果:

BreezyVoice 測試結果

文本語者RTF合成時間音頻長度
短文字Speaker12.23022.088s9.903s
短文字Speaker22.17642.799s19.667s
短文字Speaker33.09519.582s6.327s
中等文字Speaker11.56922.710s14.478s
中等文字Speaker21.71362.698s36.595s
中等文字Speaker32.85923.232s8.127s
長文字Speaker11.90128.208s14.838s
長文字Speaker21.96781.422s41.390s
長文字Speaker32.30221.195s9.207s

VibeVoice 測試結果

文本語者RTF合成時間音頻長度
短文字Speaker11.0197.065s6.933s
短文字Speaker20.8516.124s7.200s
短文字Speaker30.8315.427s6.533s
中等文字Speaker10.82012.906s15.733s
中等文字Speaker20.8278.379s10.133s
中等文字Speaker30.8228.216s10.000s
長文字Speaker10.81910.488s12.800s
長文字Speaker20.8229.096s11.067s
長文字Speaker30.8209.951s12.133s

IndexTTS 測試結果

文本語者RTF合成時間音頻長度
短文字Speaker10.5404.079s7.552s
短文字Speaker20.4393.314s7.552s
短文字Speaker30.4833.070s6.357s
中等文字Speaker10.4444.541s10.240s
中等文字Speaker20.4264.367s10.240s
中等文字Speaker30.4464.358s9.771s
長文字Speaker10.4454.972s11.179s
長文字Speaker20.4444.890s11.008s
長文字Speaker30.4484.489s10.027s

Spark-TTS 測試結果

文本語者RTF合成時間音頻長度
短文字Speaker11.1609.302s8.020s
短文字Speaker31.0325.245s5.080s
中等文字Speaker11.00410.484s10.440s
中等文字Speaker31.0098.414s8.340s
長文字Speaker11.00010.476s10.480s
長文字Speaker31.0028.680s8.660s

RTF (Real Time Factor): 值越小表示合成速度越快。RTF=1.0 表示實時合成速度


6. 配置指南

6.1 後端配置

編輯 backend/config.yaml 來自訂系統設定:

# 模型配置
models:
  stt_model: "mobiuslabsgmbh/faster-whisper-large-v3-turbo"
  llm_model: "Qwen/Qwen2.5-1.5B"
  
# TTS 引擎設定
tts:
  default_engine: "index"  # breezy, vibe, index, spark
  voice_clone_enabled: true
  
# 性能設定
performance:
  cuda_enabled: true
  mixed_precision: true
  model_cache: true

6.2 語音克隆設置

  1. 準備語音樣本 (WAV 格式, 16kHz, 單聲道)
  2. 將樣本放置於 backend/voices/ 目錄
  3. 在 config.yaml 中配置語者設定
  4. 通過 API 測試語音克隆功能

7. 開發指南

7.1 新增 TTS 引擎

要整合新的 TTS 引擎:

  1. 創建新的 TTS 服務檔案: app/tts_newengine.py
  2. 實現 TTS 介面
  3. 添加配置設定
  4. 在 main.py 中註冊端點
  5. 更新前端引擎選擇

7.2 擴展 LLM 功能

要新增 LLM 功能:

  1. 修改 app/chat.py 添加新的對話邏輯
  2. 更新 llm_tools/configs/ 中的提示模板
  3. 如需要可添加記憶管理
  4. 使用不同模型配置進行測試

8. 相關文檔


9. 授權條款

本專案採用 MIT 授權條款 - 詳見 LICENSE 檔案


10. 開發團隊