File size: 13,436 Bytes
7b64dcd
 
 
 
 
 
 
6a33f71
7b64dcd
 
 
6a33f71
 
7b64dcd
 
 
 
6a33f71
 
 
 
7b64dcd
6a33f71
7b64dcd
6a33f71
7b64dcd
 
 
 
6a33f71
 
 
 
7b64dcd
 
516d7b8
 
 
 
 
 
 
7b64dcd
 
6a33f71
 
 
 
 
7b64dcd
 
6a33f71
 
 
 
 
 
 
7b64dcd
 
 
6a33f71
 
 
 
 
 
7b64dcd
 
 
 
 
 
 
 
 
 
6a33f71
7b64dcd
6a33f71
7b64dcd
 
6a33f71
 
 
 
 
7b64dcd
 
6a33f71
7b64dcd
6a33f71
 
 
 
 
7b64dcd
 
516d7b8
6a33f71
 
 
7b64dcd
516d7b8
7b64dcd
6a33f71
 
7b64dcd
6a33f71
 
 
7b64dcd
6a33f71
 
 
 
 
7b64dcd
 
6a33f71
7b64dcd
 
 
6a33f71
7b64dcd
 
6a33f71
 
 
 
 
7b64dcd
6a33f71
 
 
 
 
 
7b64dcd
 
 
 
6a33f71
7b64dcd
6a33f71
 
 
 
 
 
 
7b64dcd
6a33f71
7b64dcd
 
6a33f71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7b64dcd
6a33f71
 
 
 
 
 
 
 
 
7b64dcd
 
 
6a33f71
7b64dcd
 
6a33f71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
516d7b8
6a33f71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7b64dcd
 
 
6a33f71
 
 
7b64dcd
516d7b8
7b64dcd
 
 
 
 
6a33f71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
516d7b8
6a33f71
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7b64dcd
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
# VoiceDialogue - 智能语音对话系统

<div align="center">

![Python](https://img.shields.io/badge/Python-3.9+-blue.svg)
![License](https://img.shields.io/badge/License-MIT-green.svg)
![Platform](https://img.shields.io/badge/Platform-macOS-lightgrey.svg)
![Version](https://img.shields.io/badge/Version-1.0.0-orange.svg)

一个集成了语音识别(ASR)、大语言模型(LLM)和文本转语音(TTS)的实时语音对话系统

[快速开始](#-快速开始) • [功能特性](#-主要特性) • [配置说明](#-配置选项) • [系统架构](#-系统架构) • [故障排除](#-故障排除)

</div>

## 🎯 项目简介

VoiceDialogue 是一个基于 Python 的完整语音对话系统,实现了端到端的语音交互体验。系统采用模块化设计,支持:

- 🎤 **实时语音识别** - 基于 Whisper 的高精度语音转文本,支持中英文识别
- 🤖 **智能对话生成** - 集成多种大语言模型(Qwen2.5、Llama3、Mistral等)
- 🔊 **高质量语音合成** - 基于 GPT-SoVITS 的多角色语音生成
- 🔇 **回声消除** - 内置音频处理技术,支持实时语音交互
- 🌍 **多语言支持** - 支持中文和英文语音识别与合成
-**低延迟处理** - 优化的音频流处理管道,实现流畅对话体验

## ✨ 主要特性

### 🎵 音频处理
- **回声消除音频捕获** - 自动消除回声干扰,提升语音质量
- **语音活动检测(VAD)** - 智能检测用户说话状态,自动开始/停止录制
- **实时音频流处理** - 低延迟音频播放和处理
- **多格式音频支持** - 支持多种音频格式的输入输出

### 🗣️ 语音识别
- **智能语音识别引擎** - 中文使用FunASR高精度识别,其他语言使用Whisper模型
- **FunASR中文优化** - 专为中文语音优化的识别引擎,支持方言和口音识别
- **Whisper多语言支持** - 支持 Medium / Large 模型,覆盖多种国际语言
- **自动语言检测** - 根据配置自动选择最适合的识别引擎
- **实时转录处理** - 流式语音转文本处理,降低响应延迟
- **高精度识别** - 基于最新语音识别技术,提供业界领先的识别准确率


### 🧠 语言模型
支持多种预训练大语言模型:
- **Qwen2.5** (7B/14B) - 阿里巴巴开源的中文优化模型
- **Llama3** (8B) - Meta 开源的通用对话模型  
- **Mistral** (7B) - 高效推理的欧洲开源模型
- **自定义系统提示词** - 可配置 AI 助手的行为风格

### 🎭 语音合成
内置丰富的音色选择,基于 GPT-SoVITS 技术:
- **罗翔** - 法学教授风格,适合严肃话题
- **马保国** - 网络名人风格,轻松幽默
- **沈逸** - 学者风格,理性分析
- **杨幂** - 明星风格,亲和力强
- **周杰伦** - 歌手风格,个性鲜明
- **马云** - 企业家风格,商务感强

## 🚀 快速开始

### 系统要求

- **操作系统**: 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

# 或使用 virtualenv
python -m venv voicedialogue
source voicedialogue/bin/activate  # Linux/macOS
# voicedialogue\Scripts\activate  # Windows
```

3. **安装 whisper.cpp**
```bash
WHISPER_COREML=1 pip install git+https://github.com/absadiki/pywhispercpp
```
4. **安装 llama.cpp**
```bash
CMAKE_ARGS="-DGGML_METAL=on" pip install llama-cpp-python
```

5. **安装项目依赖**
```bash
pip install -r requirements.txt
```

6. **安装音频处理工具**
```bash
# macOS
brew install ffmpeg

# Ubuntu/Debian
sudo apt update
sudo apt install ffmpeg

# CentOS/RHEL
sudo yum install ffmpeg

# 或使用 conda
conda install ffmpeg
```

### 🎮 首次运行

```bash
# 启动语音对话系统
python src/VoiceDialogue/main.py
```

**首次运行说明**- 系统会自动下载所需的模型文件 (约 5-10GB)
- 下载时间取决于网络速度,请耐心等待
- 模型文件会保存在 `~/.moyoyo_ai/` 目录下
- 看到 "服务启动成功" 提示后即可开始语音对话


## ⚙️ 配置选项

### 基础配置`src/VoiceDialogue/main.py``main()` 函数中可以自定义以下选项:

```python
def main():
    # 语言设置
    user_language = 'zh'  # 'zh': 中文 | 'en': 英文

    # 系统提示词 - 定义 AI 助手的行为风格
    SYSTEM_PROMPT = (
        "你是善于模拟真实的思考过程的AI助手。"
        "回答时,必须首先生成一个不超过5个字的简短句子,"
        "比如:\"让我想一下\"、\"在我看来\"、\"稍等我理一理\"等,"
        "然后再进行正式回答,保持中文口语化表达。"
    )

    # TTS 语音合成角色
    tts_speaker = '沈逸'  # 可选: 罗翔、马保国、沈逸、杨幂、周杰伦、马云

    # 大语言模型规模
    llm = '14B'  # '7B': 更快推理 | '14B': 更好效果

    # Whisper 语音识别模型
    whisper_model = 'medium'  # 'medium': 平衡速度和精度 | 'large': 最高精度
```

### 高级配置

#### 大语言模型参数调优

```python
# 在 main.py 中的 default_llm_params 字典
default_llm_params = {
    'streaming': True,        # 启用流式输出
    'n_gpu_layers': -1,      # GPU 层数 (-1 为全部)
    'n_batch': 512,          # 批处理大小
    'n_ctx': 2048,           # 上下文长度
    'f16_kv': True,          # 16位浮点数
    'temperature': 0.8,      # 创造性参数 (0.0-1.0)
    'top_k': 50,             # Top-K 采样
    'top_p': 1.0,            # Top-P 采样
}

#### 路径配置

系统使用 `src/VoiceDialogue/config/settings.py` 管理路径配置:

```python
# 默认数据目录
DATA_FOLDER = ~/.moyoyo_ai/

# 模型存储路径
├── llm_models/          # 大语言模型
├── audio_models/        # TTS 语音模型  
├── audio_output/        # 音频输出文件
└── .single_instance_locker  # 单实例锁文件
```

## 📁 项目结构

```text
VoiceDialogue/
├── src/                          # 源代码目录
│   └── VoiceDialogue/           # 主要代码包
│       ├── config/              # 配置管理
│       │   ├── __init__.py
│       │   ├── paths.py         # 路径配置
│       │   └── settings.py      # 系统设置
│       ├── models/              # 模型管理模块
│       │   ├── audio_model.py   # 音频模型管理
│       │   ├── language_model.py # 语言模型管理
│       │   └── voice_model.py   # 语音模型管理
│       ├── services/            # 服务模块
│       │   ├── audio/           # 音频处理服务
│       │   │   ├── aec_audio_capture.py  # 回声消除捕获
│       │   │   ├── audio_answer.py       # TTS 音频生成
│       │   │   └── audio_player.py       # 音频播放
│       │   ├── speech/          # 语音识别服务
│       │   │   ├── speech_monitor.py     # 语音状态监控
│       │   │   └── asr_service.py        # ASR 识别服务
│       │   ├── text/            # 文本生成服务
│       │   │   └── text_generator.py     # LLM 文本生成
│       │   └── core/            # 核心服务
│       ├── utils/               # 工具函数
│       └── main.py              # 主程序入口
├── models/                      # 预训练模型存储
│   └── asr/                     # 语音识别模型
├── resources/                   # 资源文件
│   ├── audio/                   # 音频资源
│   └── libraries/               # 动态库文件
├── third_party/                 # 第三方库
├── tests/                       # 测试文件
├── docs/                        # 文档目录
├── requirements.txt             # Python 依赖
├── .gitignore                   # Git 忽略文件
└── README.md                    # 项目说明文档
```

## 🔧 系统架构

### 数据流程图

```
用户语音输入  →  回声消除  →  语音活动检测  →  语音转录  →  LLM生成回复  →  TTS合成  →  音频输出
    ↑                                                                                 ↓
    └───────────────────────────────── 实时语音交互循环 ─────────────────────────────────┘
```


### 核心组件说明

| 组件 | 功能描述 | 技术实现 |
|------|----------|----------|
| **EchoCancellingAudioCapture** | 回声消除音频捕获 | 实时音频流捕获与预处理 |
| **SpeechStateMonitor** | 语音活动检测 | VAD 算法检测用户说话状态 |
| **WhisperWorker** | 语音识别转录 | OpenAI Whisper 模型推理 |
| **LLMResponseGenerator** | 智能文本生成 | 大语言模型对话生成 |
| **TTSAudioGenerator** | 语音合成 | GPT-SoVITS 文本转语音 |
| **AudioStreamPlayer** | 音频流播放 | 实时音频输出播放 |

### 多线程架构

系统采用多线程并发处理架构,通过消息队列实现组件间通信:

- `audio_frames_queue`: 原始音频帧队列
- `user_voice_queue`: 用户语音片段队列  
- `transcribed_text_queue`: 转录文本队列
- `generated_answer_queue`: 生成回答队列
- `tts_generated_audio_queue`: TTS 音频队列

## 🔍 使用指南

### 基本使用流程

1. **启动系统**: 运行 `python src/VoiceDialogue/main.py`
2. **等待加载**: 首次运行会下载模型,请耐心等待
3. **开始对话**: 看到"服务启动成功"后直接开始说话
4. **语音交互**: 系统会自动检测语音并进行对话
5. **停止系统**: 使用 Ctrl+C 终止程序

### 性能优化建议

#### 硬件优化
- **GPU 加速**: 如有 NVIDIA GPU,确保安装 CUDA 版本的 PyTorch
- **内存管理**: 16GB RAM 可同时运行 14B 模型,8GB RAM 建议使用 7B 模型
- **存储优化**: SSD 硬盘可显著提升模型加载速度

#### 软件优化
```python
# 针对不同硬件配置的推荐设置

# 高性能配置 (16GB+ RAM, GPU)
llm = '14B'
whisper_model = 'large'
default_llm_params['n_batch'] = 1024
default_llm_params['n_ctx'] = 4096

# 平衡配置 (8-16GB RAM)
llm = '7B'
whisper_model = 'medium'
default_llm_params['n_batch'] = 512
default_llm_params['n_ctx'] = 2048

# 轻量配置 (8GB RAM, CPU only)
llm = '7B'
whisper_model = 'medium'
default_llm_params['n_gpu_layers'] = 0
default_llm_params['n_batch'] = 256
```

## 🛠️ 故障排除

### 常见问题及解决方案

#### 1. 模型下载失败
```bash
# 问题: 网络连接超时或模型下载失败
# 解决方案:
export HF_ENDPOINT=https://hf-mirror.com  # 使用镜像站点
pip install -U huggingface_hub
```

#### 2. 音频设备问题
```bash
# 问题: 找不到音频设备或权限被拒绝
# macOS 解决方案:
# 系统偏好设置 → 安全性与隐私 → 隐私 → 麦克风 → 添加终端应用

# Linux 解决方案:
sudo usermod -a -G audio $USER
# 重新登录生效
```

#### 3. 内存不足错误
```python
# 问题: CUDA out of memory 或 RAM 不足
# 解决方案: 降低模型规模和批处理大小
llm = '7B'  # 改为 7B 模型
default_llm_params['n_batch'] = 256  # 减少批处理大小
default_llm_params['n_ctx'] = 1024   # 减少上下文长度
```

#### 4. 依赖包冲突
```bash
# 问题: 包版本冲突或导入错误
# 解决方案: 重新创建虚拟环境
conda deactivate
conda env remove -n voicedialogue
conda create -n voicedialogue python=3.9
conda activate voicedialogue
pip install -r requirements.txt
```

### 调试模式

启用详细日志输出进行问题诊断:

```python
import logging
logging.basicConfig(level=logging.DEBUG)

# 在 main.py 开头添加上述代码
```

### 性能监控

```bash
# 监控系统资源使用情况
# macOS
top -pid $(pgrep -f "python.*main.py")

# Linux  
htop -p $(pgrep -f "python.*main.py")

# 监控 GPU 使用 (NVIDIA)
nvidia-smi -l 1
```

## 📚 相关资源

### 官方文档
- [OpenAI Whisper](https://github.com/openai/whisper)
- [GPT-SoVITS](https://github.com/RVC-Boss/GPT-SoVITS)
- [Qwen2.5 模型](https://huggingface.co/Qwen)
- [LangChain 框架](https://python.langchain.com/)

### 社区支持
- 问题反馈: [GitHub Issues](https://github.com/MoYoYoTech/VoiceDialogue/issues)
- 功能建议: [GitHub Discussions](https://github.com/MoYoYoTech/VoiceDialogue/discussions)

## 📄 许可证

本项目采用 MIT 许可证开源。详细信息请查看 [LICENSE](LICENSE) 文件。

## 🤝 贡献指南

欢迎提交 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">

**如果这个项目对您有帮助,请给我们一个 ⭐️!**

Made with ❤️ by [MoYoYo Tech](https://github.com/MoYoYoTech)

</div>