File size: 16,681 Bytes
40186e2 7b64dcd 6a33f71 7b64dcd 6a33f71 7b64dcd 6a33f71 a3adfd5 6a33f71 7b64dcd 6a33f71 7b64dcd 516d7b8 a3adfd5 516d7b8 7b64dcd a3adfd5 7b64dcd 710072a a3adfd5 710072a a3adfd5 710072a a3adfd5 7b64dcd 6a33f71 7b64dcd 6a33f71 7b64dcd be3d38f 7b64dcd 6a33f71 a3adfd5 6a33f71 a3adfd5 7b64dcd be3d38f 7b64dcd be3d38f a3adfd5 be3d38f 7b64dcd be3d38f 6a33f71 be3d38f 6a33f71 7b64dcd a5d5551 7b64dcd a5d5551 de86e54 be3d38f 7b64dcd be3d38f de86e54 be3d38f a3adfd5 2c7b9b6 6a33f71 a3adfd5 7b64dcd a3adfd5 7b64dcd 710072a de86e54 2c7b9b6 a3adfd5 de86e54 710072a 2c7b9b6 de86e54 7b64dcd 6a33f71 a5d5551 a3adfd5 de86e54 2c7b9b6 7b64dcd 710072a de86e54 a3adfd5 710072a a3adfd5 710072a 6a33f71 2c7b9b6 6a33f71 a3adfd5 6a33f71 a3adfd5 7b64dcd a3adfd5 710072a a3adfd5 710072a a5d5551 6a33f71 a3adfd5 6a33f71 a3adfd5 710072a 7b64dcd a3adfd5 710072a a3adfd5 710072a a3adfd5 2c7b9b6 7b64dcd 6a33f71 7b64dcd a3adfd5 de86e54 2c7b9b6 de86e54 2c7b9b6 de86e54 2c7b9b6 de86e54 7b64dcd 6a33f71 a3adfd5 7b64dcd a3adfd5 7b64dcd 6a33f71 a3adfd5 6a33f71 a3adfd5 6a33f71 a5d5551 6a33f71 a3adfd5 6a33f71 a3adfd5 6a33f71 a3adfd5 710072a a3adfd5 6a33f71 a5d5551 6a33f71 a5d5551 6a33f71 710072a a5d5551 2c7b9b6 a5d5551 6a33f71 a3adfd5 6a33f71 7b64dcd 6a33f71 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 |
---
title: VoiceDialogue - 智能语音对话系统
license: mit
language:
- zh
- en
pipeline_tag: text-to-speech
tags:
- voice-dialogue
- speech-recognition
- text-to-speech
- large-language-model
- asr
- tts
- llm
- chinese
- english
- real-time
library_name: transformers
---
# VoiceDialogue - 智能语音对话系统
<div align="center">




一个集成了语音识别(ASR)、大语言模型(LLM)和文本转语音(TTS)的实时语音对话系统
[快速开始](#-快速开始) • [功能特性](#-主要特性) • [配置说明](#-配置选项) • [系统架构](#-系统架构) • [故障排除](#-故障排除)
</div>
## 🎯 项目简介
VoiceDialogue 是一个基于 Python 的完整语音对话系统,实现了端到端的语音交互体验。系统采用模块化设计,支持:
- 🎤 **实时语音识别** - 基于 FunASR 和 Whisper 的高精度语音转文本
- 🤖 **智能对话生成** - 集成 Qwen2.5 等多种大语言模型
- 🔊 **高质量语音合成** - 基于 GPT-SoVITs 和 Kokoro TTS 的多角色语音生成
- 🌐 **Web API 服务** - 提供 HTTP 接口,方便与其他应用集成
- 🔇 **回声消除** - 内置音频处理技术,支持实时语音交互
- ⚡ **低延迟处理** - 优化的音频流处理管道,实现流畅对话体验
## ✨ 主要特性
### 🎵 音频处理
- **回声消除音频捕获** - 自动消除回声干扰,提升语音质量
- **语音活动检测(VAD)** - 智能检测用户说话状态,自动开始/停止录制
- **实时音频流处理** - 低延迟音频播放和处理
### 🗣️ 语音识别
- **智能语音识别引擎** - 中文使用FunASR高精度识别,其他语言使用Whisper模型
- **自动语言切换** - 根据启动参数自动选择最优识别引擎
- **实时转录处理** - 流式语音转文本处理,降低响应延迟
### 🧠 语言模型
- **Qwen2.5 (14B)** - 内置阿里巴巴开源的中文优化模型
- **LangChain 集成** - 方便扩展和支持更多语言模型
- **自定义系统提示词** - 可在代码中配置 AI 助手的行为风格
### 🎭 语音合成
项目集成了两种先进的语音合成技术,支持动态说话人管理:
#### GPT-SoVITs 技术(中文角色)
基于 GPT-SoVITs 的中文语音合成,支持以下角色:
- **罗翔** (Luo Xiang) - 法学教授风格,具有幽默风趣和深入浅出的讲解风格
- **马保国** (Ma Baoguo) - 太极大师风格,带有标志性的口音和语调特色
- **沈逸** (Shen Yi) - 学者风格,具有理性分析风格和富有磁性的嗓音
- **杨幂** (Yang Mi) - 明星风格,拥有清甜动人的声线和自然流畅的表达方式
- **周杰伦** (Zhou Jielun) - 歌手风格,具有标志性的说话风格和音乐气质
- **马云** (Ma Yun) - 企业家风格,富有激情的演讲风格和商业洞察表达方式
#### Kokoro TTS 技术(英文角色)
基于 Kokoro TTS 的英文语音合成,支持以下角色:
- **Heart** - 温暖亲切的英语女性语音,声音富有感情色彩
- **Bella** - 优质的英语女性语音,具有清晰自然的发音和良好的表现力
- **Nicole** - 高质量的英语女性语音,发音清晰准确,语调自然流畅
#### 技术特点
- **智能引擎选择** - 系统根据内容语言自动选择最适合的TTS引擎
- **动态说话人管理** - 支持运行时动态加载和切换说话人
- **高质量合成** - 采用先进的神经网络技术,生成自然流畅的语音
- **可扩展架构** - 模块化设计,方便添加更多语音角色和TTS引擎
### ⚙️ 服务模式
- **命令行模式 (CLI)** - 在终端中直接运行,提供实时语音交互体验
- **API 服务模式** - 启动一个 FastAPI Web 服务器,提供 HTTP 接口进行交互
## 🚀 快速开始
### 系统要求
- **操作系统**: macOS 14+ (推荐)
- **Python 版本**: 3.9 或更高版本
- **内存要求**: 至少 16GB RAM (推荐 32GB 用于大模型)
- **存储空间**: 至少 20GB 可用空间 (用于模型文件)
### 安装步骤
1. **克隆项目**
```bash
git clone https://huggingface.co/MoYoYoTech/VoiceDialogue
cd VoiceDialogue
```
2. **创建并激活虚拟环境**
```bash
# 使用 uv (推荐)
pip install uv
uv venv
source .venv/bin/activate
# 或使用 conda
conda create -n voicedialogue python=3.11
conda activate voicedialogue
# 或使用 venv
python -m venv voicedialogue
source voicedialogue/bin/activate
```
3. **安装项目依赖**
```bash
# 使用 uv (推荐)
WHISPER_COREML=1 CMAKE_ARGS="-DGGML_METAL=on" uv sync
# 或使用 pip
WHISPER_COREML=1 CMAKE_ARGS="-DGGML_METAL=on" pip install -r requirements.txt
```
4. **安装音频处理工具**
```bash
# macOS
brew install ffmpeg
```
5. **安装额外依赖**
```bash
# 安装 kokoro-onnx
uv pip install kokoro-onnx
# 或
pip install kokoro-onnx
# 重新安装指定版本的 numpy
uv pip install numpy==1.26.4
# 或
pip install numpy==1.26.4
```
### 🖥️ 应用模式
#### 1. 命令行模式 (默认)
直接在终端进行实时语音对话。
```bash
# 启动语音对话系统 (默认使用中文,沈逸角色)
python main.py
# 或使用 uv
uv run main.py
# 指定语言和角色
python main.py --language en --speaker Heart
# 查看所有可用参数
python main.py --help
```
**首次运行说明**:
- 看到 "服务启动成功" 提示后即可开始说话
- 系统会自动检测语音活动并进行识别和回复
#### 2. API 服务模式
启动一个 Web 服务器,通过 HTTP 请求进行交互。
```bash
# 启动 API 服务器
python main.py --mode api
# 或使用 uv
uv run main.py --mode api
# 指定不同端口和启用热重载
python main.py --mode api --port 9000 --reload
```
**API 服务特性**:
- API 文档地址: `http://localhost:8000/docs`
- 支持 TTS 模型管理(查看、加载、删除)
- 实时模型状态监控
- RESTful API 设计
#### 3. 桌面应用模式 (Electron)
提供图形界面的桌面应用程序。
## ⚙️ 配置选项
### 启动参数
通过 `main.py` 的命令行参数可以方便地进行配置:
| 参数 | 缩写 | 可选值 | 默认值 | 描述 |
|---|---|---|---|---|
| `--mode` | `-m` | `cli`, `api` | `cli` | 设置运行模式 |
| `--language`| `-l` | `zh`, `en` | `zh` | (CLI模式) 设置用户语言 |
| `--speaker` | `-s` | (动态获取) | `沈逸` | (CLI模式) 设置TTS语音角色 |
| `--host` | | IP地址 | `0.0.0.0` | (API模式) 服务器主机 |
| `--port` | `-p` | 端口号 | `8000` | (API模式) 服务器端口 |
| `--reload`| | 无 | `False` | (API模式) 启用热重载 |
**支持的说话人角色**(动态加载):
- **中文角色**:`罗翔`, `马保国`, `沈逸`, `杨幂`, `周杰伦`, `马云`
- **英文角色**:`Heart`, `Bella`, `Nicole`
### 高级配置
#### 大语言模型 (LLM)
- **模型路径和参数**: LLM 的模型和推理参数目前在代码中硬编码,方便快速启动。
- **文件位置**: `src/VoiceDialogue/services/text/generator.py`
- **自定义**: 你可以修改 `LLMResponseGenerator` 类中的配置。
#### 语音识别 (ASR)
- **引擎自动选择**: 系统会根据 `--language` 参数自动选择最合适的 ASR 引擎。
- **模型配置**: ASR 模型的具体配置位于 `src/VoiceDialogue/services/speech/recognizers/manager.py`。
#### 系统提示词 (System Prompt)
- **功能**: 定义 AI 角色的行为和说话风格。
- **文件位置**: `src/VoiceDialogue/services/text/generator.py`
- **自定义**: 你可以修改系统提示词变量的值。
### 构建完整应用
项目提供了完整的构建脚本,可以一键构建包含Python后端和Electron前端的完整应用:
1. 首先,激活当前 Python 环境
```bash
source .venv/bin/activate
# 或使用 conda
conda activate voicedialogue
```
2. 使用构建脚本
```bash
# 使用构建脚本(推荐)
bash scripts/build.sh
# 或分别构建
bash scripts/build-python.sh # 构建Python后端
bash scripts/build-electron.sh # 构建Electron前端
# 清理构建产物
bash scripts/clean.sh
```
## 📁 项目结构
```text
VoiceDialogue/
├── src/
│ └── voice_dialogue/ # 主要源代码目录
│ ├── __init__.py # 包初始化文件
│ ├── cli/ # 命令行界面模块
│ │ └── args.py # 命令行参数解析
│ ├── api/ # Web API 模块 (FastAPI)
│ │ ├── app.py # FastAPI 应用实例
│ │ ├── server.py # uvicorn 服务器
│ │ ├── core/ # API 核心配置
│ │ ├── routes/ # API 路由
│ │ ├── schemas/ # 数据模型
│ │ ├── dependencies/ # API 依赖项
│ │ └── middleware/ # 中间件
│ ├── config/ # 配置管理
│ │ ├── paths.py # 路径配置
│ │ └── speaker_config.py # 说话人配置
│ ├── core/ # 核心模块
│ │ ├── constants.py # 全局常量和队列
│ │ └── launcher.py # 系统启动器
│ ├── models/ # 数据模型和任务
│ ├── services/ # 服务模块
│ │ ├── audio/ # 音频处理服务
│ │ ├── speech/ # 语音识别服务
│ │ └── text/ # 文本生成服务
│ └── utils/ # 工具函数
├── electron-app/ # Electron 桌面应用
│ ├── main.js # Electron 主进程
│ ├── preload.js # 预加载脚本
│ ├── loading.html # 加载页面
│ ├── utils.js # 工具函数
│ ├── package.json # Electron 依赖配置
│ ├── assets/ # Electron 资源文件
│ ├── build/ # 构建配置
│ └── python-dist/ # Python 分发包
├── scripts/ # 构建和部署脚本
│ ├── build.sh # 主构建脚本
│ ├── build-python.sh # Python 打包脚本
│ ├── build-electron.sh # Electron 打包脚本
│ └── clean.sh # 清理脚本
├── third_party/ # 第三方库
│ ├── moyoyo_tts/ # GPT-SoVITs TTS 引擎
│ └── AECAudioRecorder/ # 回声消除音频录制器
├── assets/ # 资源文件
├── dist/ # 分发包输出目录
├── build/ # 构建临时文件
├── tests/ # 测试文件
├── docs/ # 文档目录
├── main.py # 项目启动入口
├── pyproject.toml # 项目配置文件 (uv)
├── requirements.txt # Python 依赖
├── uv.lock # uv 锁定文件
├── .python-version # Python 版本配置
└── README.md # 项目说明文档
```
## 🔧 系统架构
### 数据流程图 (CLI 模式)
```
用户语音输入 → 回声消除 → 语音活动检测 → 语音转录 (ASR) → LLM生成回复 → TTS合成 → 音频输出
↑ ↓
└─────────────────────────────── 实时语音交互循环 ────────────────────────────────┘
```
### 核心组件说明
| 组件 | 功能描述 | 技术实现 |
|------|----------|----------|
| **EchoCancellingAudioCapture** | 回声消除音频捕获 | 实时音频流捕获与预处理 |
| **SpeechStateMonitor** | 语音活动检测 | VAD 算法检测用户说话状态 |
| **ASRWorker** | 语音识别转录 | FunASR / Whisper 模型推理 |
| **LLMResponseGenerator** | 智能文本生成 | Qwen2.5 (llama.cpp) 对话生成 |
| **TTSAudioGenerator** | 语音合成 | GPT-SoVITs / Kokoro TTS 文本转语音 |
| **AudioStreamPlayer** | 音频流播放 | 实时音频输出播放 |
| **FastAPI App** | API服务 | 提供HTTP接口,封装核心服务 |
### 多线程架构
系统采用多线程设计,各组件通过队列进行通信:
- **音频采集线程**: 持续捕获音频数据
- **语音监测线程**: 检测用户语音活动
- **ASR线程**: 语音识别处理
- **LLM线程**: 文本生成处理
- **TTS线程**: 语音合成处理
- **音频播放线程**: 音频输出播放
## 🛠️ 故障排除
### 1. 模型下载失败
- **问题**: 网络连接超时或模型下载失败。
- **解决方案**: 设置 Hugging Face 镜像。
```bash
export HF_ENDPOINT=https://hf-mirror.com
pip install -U huggingface_hub
```
### 2. 音频设备问题
- **问题**: 找不到音频设备或权限被拒绝。
- **macOS 解决方案**: 系统设置 → 隐私与安全性 → 麦克风 → 启用你的终端应用 (如 iTerm, Terminal)。
- **Linux 解决方案**: `sudo usermod -a -G audio $USER`,然后重新登录。
### 3. 内存不足错误 (OOM)
- **问题**: `CUDA out of memory` 或 RAM 不足。
- **解决方案**: LLM 是主要的内存消耗者。你可以通过修改 `src/VoiceDialogue/services/text/generator.py` 来降低资源消耗:
- **更换模型**: 将模型路径指向一个更小的模型(如 7B Q4 量化模型)。
- **减少批处理大小**: 减小模型参数中的 `n_batch` 值(如 `256`)。
- **减少上下文长度**: 减小 `n_ctx` 的值(如 `1024`)。
### 4. 依赖包冲突
- **问题**: 包版本冲突或导入错误。
- **解决方案**: 强烈建议在虚拟环境中安装。如果遇到问题,尝试重建虚拟环境。
```bash
# 使用 conda
conda deactivate
conda env remove -n voicedialogue
# 使用 uv
rm -rf .venv
uv venv
```
### 5. 说话人角色不存在
- **问题**: 指定的说话人不在支持列表中。
- **解决方案**: 使用 `python src/VoiceDialogue/main.py --help` 查看所有可用的说话人角色。
### 6. FFmpeg 相关错误
- **问题**: 音频处理失败或编解码错误。
- **解决方案**: 确保正确安装 FFmpeg:
```bash
# 检查 FFmpeg 安装
ffmpeg -version
# 重新安装 FFmpeg
# macOS
brew reinstall ffmpeg
```
### 7. Python 版本兼容性
- **问题**: Python 版本过低导致的兼容性问题。
- **解决方案**: 确保使用 Python 3.11+ 版本:
```bash
python --version
# 如果版本过低,请升级或使用虚拟环境
```
### 8. 桌面应用相关问题
- **问题**: Electron 应用启动失败或功能异常。
- **解决方案**:
- 确保 Node.js 版本 >= 16
- 重新安装依赖:`cd electron-app && npm install`
- 检查 Python 后端是否正常运行
### 9. 构建打包问题
- **问题**: 使用构建脚本失败。
- **解决方案**:
- 确保有执行权限:`chmod +x scripts/*.sh`
- 检查所有依赖是否安装完成
- 查看具体错误日志进行调试
## 📊 性能优化建议
### 硬件优化
- **内存**: 推荐 32GB RAM 以获得最佳性能
- **存储**: 使用 SSD 硬盘可显著提升模型加载速度
- **CPU**: 多核处理器有助于多线程处理
### 软件优化
- **模型选择**: 根据硬件配置选择合适大小的模型
- **批处理优化**: 调整 LLM 的 `n_batch` 参数
- **音频缓冲**: 根据延迟要求调整音频缓冲区大小
## 📄 许可证
本项目采用 MIT 许可证开源。
## 🤝 贡献指南
欢迎提交 Pull Request 和 Issue!
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启 Pull Request
---
<div align="center">
**如果这个项目对您有帮助,请给我们一个 ⭐️!**
</div> |