File size: 13,160 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 6a33f71 7b64dcd 6a33f71 a3adfd5 6a33f71 a3adfd5 7b64dcd a3adfd5 7b64dcd a3adfd5 6a33f71 a3adfd5 6a33f71 7b64dcd a3adfd5 6a33f71 7b64dcd a3adfd5 7b64dcd 6a33f71 7b64dcd a3adfd5 7b64dcd a3adfd5 6a33f71 a3adfd5 7b64dcd a3adfd5 7b64dcd 710072a 6a33f71 a3adfd5 710072a 7b64dcd 6a33f71 a3adfd5 7b64dcd 710072a a3adfd5 710072a a3adfd5 710072a 6a33f71 a3adfd5 6a33f71 a3adfd5 7b64dcd a3adfd5 710072a a3adfd5 710072a a3adfd5 6a33f71 a3adfd5 6a33f71 a3adfd5 710072a 7b64dcd a3adfd5 710072a a3adfd5 710072a a3adfd5 7b64dcd 6a33f71 7b64dcd a3adfd5 710072a a3adfd5 710072a 6a33f71 710072a a3adfd5 6a33f71 710072a 6a33f71 710072a a3adfd5 710072a 6a33f71 7b64dcd 6a33f71 a3adfd5 7b64dcd a3adfd5 7b64dcd 6a33f71 a3adfd5 6a33f71 a3adfd5 6a33f71 a3adfd5 6a33f71 a3adfd5 6a33f71 a3adfd5 710072a a3adfd5 6a33f71 a3adfd5 6a33f71 710072a 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 |
---
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
# 使用 conda (推荐)
conda create -n voicedialogue python=3.9
conda activate voicedialogue
# 或使用 venv
python -m venv voicedialogue
source voicedialogue/bin/activate
```
3. **安装核心依赖**
```bash
# whisper.cpp for ASR
WHISPER_COREML=1 pip install git+https://github.com/absadiki/pywhispercpp
# llama.cpp for LLM
CMAKE_ARGS="-DGGML_METAL=on" pip install llama-cpp-python
```
4. **安装项目依赖**
```bash
pip install -r requirements.txt
```
5. **安装音频处理工具**
```bash
# macOS
brew install ffmpeg
# Linux (Ubuntu/Debian)
sudo apt update && sudo apt install ffmpeg
```
### 🎮 运行系统
`VoiceDialogue` 支持两种运行模式:**命令行模式 (CLI)** 和 **API 服务模式**。
#### 1. 命令行模式 (默认)
直接在终端进行实时语音对话。
```bash
# 启动语音对话系统 (默认使用中文,沈逸角色)
python src/VoiceDialogue/main.py
# 指定语言和角色
python src/VoiceDialogue/main.py --language en --speaker Heart
# 查看所有可用角色
python src/VoiceDialogue/main.py --help
```
**首次运行说明**:
- 系统会自动下载所需的模型文件 (约 10-15GB),请耐心等待。
- 模型文件会保存在 `~/.moyoyo_ai/` 目录下。
- 看到 "服务启动成功" 提示后即可开始说话。
#### 2. API 服务模式
启动一个 Web 服务器,通过 HTTP 请求进行交互。
```bash
# 启动 API 服务器
python src/VoiceDialogue/main.py --mode api
# 指定不同端口和启用热重载
python src/VoiceDialogue/main.py --mode api --port 9000 --reload
```
**API 服务特性**:
- API 文档地址: `http://localhost:8000/docs`
- 支持 TTS 模型管理(查看、加载、删除)
- 实时模型状态监控
- RESTful API 设计
## ⚙️ 配置选项
### 启动参数
通过 `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`
- **自定义**: 你可以修改系统提示词变量的值。
## 📁 项目结构
```text
VoiceDialogue/
├── src/
│ └── VoiceDialogue/
│ ├── main.py # 主程序入口
│ ├── api/ # Web API 模块 (FastAPI)
│ │ ├── app.py # FastAPI 应用实例
│ │ ├── server.py # uvicorn 服务器
│ │ ├── core/ # 核心配置
│ │ ├── routes/ # API 路由
│ │ ├── schemas/ # 数据模型
│ │ └── middleware/ # 中间件
│ ├── config/ # 配置管理
│ │ └── paths.py # 路径配置
│ ├── core/ # 核心模块
│ │ └── constants.py # 全局常量和队列
│ ├── models/ # 数据模型和任务
│ │ ├── language_model.py # 语言模型定义
│ │ └── voice_task.py # 语音任务定义
│ ├── services/ # 服务模块
│ │ ├── audio/ # 音频处理服务
│ │ │ ├── capture.py # 回声消除音频捕获
│ │ │ ├── player.py # 音频播放
│ │ │ ├── generator.py # TTS 音频生成器
│ │ │ └── generators/ # TTS 引擎管理
│ │ ├── speech/ # 语音识别服务
│ │ │ ├── monitor.py # 语音状态监控
│ │ │ ├── recognizer.py # ASR 识别服务
│ │ │ └── recognizers/ # ASR 引擎管理
│ │ └── text/ # 文本生成服务
│ │ └── generator.py # LLM 文本生成
│ └── utils/ # 工具函数
├── third_party/ # 第三方库
│ └── moyoyo_tts/ # GPT-SoVITs TTS 引擎
├── tests/ # 测试文件
├── docs/ # 文档目录 (空)
├── assets/ # 资源文件
├── requirements.txt # 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接口,封装核心服务 |
## 🛠️ 故障排除
### 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 deactivate
conda env remove -n voicedialogue
# ... 重新执行安装步骤 ...
```
### 5. 说话人角色不存在
- **问题**: 指定的说话人不在支持列表中。
- **解决方案**: 使用 `python src/VoiceDialogue/main.py --help` 查看所有可用的说话人角色。
## 📄 许可证
本项目采用 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> |