智能语音对话系统 (AI Assistant)
一个基于深度学习的智能语音对话系统,具备语音识别(ASR)、自然语言处理(LLM)、语音合成(TTS)和语音活动检测(VAD)功能的完整语音交互解决方案。系统采用多线程架构设计,实现了高效的实时语音对话处理流程。
硬件环境
- CPU: Intel® Core™ i7-14700KF 28核
- GPU: NVIDIA RTX 3080 Supper
- RAM: 32GB DDR5
- 存储: 2TB NVME
项目概述
本项目实现了一个完整的智能语音对话系统,用户可以通过语音与系统进行自然语言交互。系统能够实时检测语音活动、识别语音内容、处理用户意图并生成自然语音回复。
核心功能
- 语音活动检测 (VAD): 实时检测音频流中的语音片段,过滤静音和噪声
- 自动语音识别 (ASR): 将检测到的语音转换为文本,支持中文等多种语言
- 大语言模型 (LLM): 理解用户意图并生成自然语言回复
- 文本到语音 (TTS): 将LLM生成的文本转换为自然语音输出
- 唤醒词检测: 支持自定义唤醒词,随时激活系统
- 实时对话: 实现低延迟的实时语音对话体验
系统状态管理
系统采用状态机设计模式管理不同的运行状态,确保各模块协调工作:
- IDLE (空闲状态): 系统待机,等待唤醒词
- WAKED (唤醒状态): 检测到唤醒词,准备接收用户语音输入
- LLMPROCESSING (LLM处理状态): 正在处理用户输入并生成回复
- AUDIOPLAYPROCESSING (音频播放状态): 正在播放LLM生成的语音回复
状态转换逻辑:
- IDLE → WAKED: 当语音识别到唤醒词时
- WAKED → LLMPROCESSING: 用户语音输入(非唤醒词)
- LLMPROCESSING → AUDIOPLAYPROCESSING: LLM处理完成,开始播放音频
- AUDIOPLAYPROCESSING → WAKED: 语音识别到唤醒词,终止此次音频播放或者音频播放完成
- WAKED → IDLE: 音频输入为空并且超过休眠时间,进入空闲状态
系统架构
系统采用多线程架构设计,包含四个核心线程管理器,确保各模块并行处理以提高系统响应速度:
┌─────────────────┐ ┌──────────────────────┐ ┌─────────────────┐
│ 音频输入管理 │ │ 音频输入线程管理器 │ │ │
│ (Audio Manager)│───▶│ (AudioInputThread) │────▶│ 语音识别(ASR) │
└─────────────────┘ └──────────────────────┘ │ 语音活动检测(VAD)│
│ ▲ └─────────────────┘
▼ │ │
┌──────────────────────┐ ▼
│ LLM线程管理器 │ ┌────────────────────────┐
│ (LLMThread) │◀──────┤ 状态管理器 │
└──────────────────────┘ │ (StateManager) │
│ ▲ │ │
▼ │ │ 系统状态 │
┌──────────────────────┐ │ - IDLE │
│ 音频输出线程管理器 │ │ - WAKED │
│ (AudioOutputThread) │───────┤ - LLMPROCESSING │
└──────────────────────┘ │ - AUDIOPLAYPROCESSING│
│ ▲ └────────────────────────┘
▼ │ ▲
┌─────────────────┐ ┌──────────────────┐
│ 音频输出管理 │ │ 语音合成(TTS) │
│ (Audio Manager)│◀───┤ 模型加载器 │
└─────────────────┘ └──────────────────┘
多线程架构说明
-
音频输入线程管理器 (AudioInputThreadManager):
- 负责管理音频输入流和实时语音处理
- 集成VAD和ASR模型进行语音活动检测和语音识别
- 处理唤醒词检测和状态转换
-
LLM线程管理器 (LLMThreadManager):
- 负责处理用户输入并生成自然语言回复
- 管理与大语言模型的交互
- 协调状态转换和输出处理
-
音频输出线程管理器 (AudioOutputThreadManager):
- 负责语音合成和音频播放控制
- 管理TTS模型和音频输出流
- 处理播放中断和状态反馈
-
状态管理器 (StateManager):
- 统一管理系统运行状态
- 协调各线程间的状态转换
- 确保系统状态一致性
技术栈
- 编程语言: Python 3.10.12
- 深度学习框架: PyTorch, ONNX Runtime
- 音频处理: librosa, sounddevice, numpy
- 模型推理: FunASR (语音识别), SenseVoice (语音识别), Qwen (大语言模型)
- 语音合成: Kokoro TTS
核心组件详解
1. 音频管理模块 (model_classes/audio_manager.py)
负责系统的音频输入输出管理,包括麦克风音频采集和扬声器音频播放功能。
主要特性:
- 实时音频流处理
- 音频设备自动检测与配置
- 支持多种音频格式处理
- 音频缓冲区管理
2. 模型加载器模块
ASR加载器 (model_classes/asr_loader.py)
- 加载FunASR语音识别模型
- 实现语音到文本的转换功能
- 支持实时流式识别
VAD加载器 (model_classes/vad_loader.py)
- 加载语音活动检测模型
- 实时检测音频中的语音片段
- 过滤静音和噪声干扰
LLM加载器 (model_classes/llm_loader.py)
- 加载大语言模型
- 提供文本生成和对话能力
- 支持多种LLM后端(Transformers、LLaMA.cpp等)
TTS加载器 (model_classes/tts_loader.py)
- 加载语音合成模型
- 实现文本到语音的转换功能
- 支持多种语音风格和语调调节
3. 线程管理模块
音频输入线程管理器 (AudioInputThreadManager)
- 管理音频输入流的生命周期
- 协调VAD和ASR模型的调用时机
- 实现唤醒词检测和状态切换逻辑
LLM线程管理器 (LLMThreadManager)
- 管理大语言模型推理过程
- 处理用户输入并生成回复
- 支持流式输出和中断处理
音频输出线程管理器 (AudioOutputThreadManager)
- 管理音频播放过程
- 协调TTS模型和音频输出设备
- 实现播放中断和状态同步
4. 状态管理模块 (model_classes/state_manager.py)
统一管理系统运行状态,包括:
- IDLE (空闲状态)
- WAKED (唤醒状态)
- LLMPROCESSING (LLM处理状态)
- AUDIOPLAYPROCESSING (音频播放状态)
状态之间通过预定义规则进行转换,确保系统行为的一致性和可预测性。
5. 配置管理模块 (model_classes/config_manager.py)
负责系统配置的加载、解析和管理:
- 支持INI格式配置文件
- 提供配置项的动态读取和更新
- 实现配置热重载功能
6. 工具模块 (model_utils/)
音频处理器 (audio_handler.py)
- 音频重采样功能
- 音频格式转换
- 唤醒词相似度计算
- 文本后处理过滤
设备信息查询 (search_all_devices.py)
- 音频设备枚举和信息获取
- 计算设备能力检测(CUDA、ONNX)
- 系统兼容性检查
配置读取器 (inireader.py)
- INI配置文件解析
- 配置项类型自动识别
- 配置写入和持久化支持
项目结构
AIAssistant/
├── README.md
├── main.py # 程序主入口
├── requirements.txt # 依赖包列表
├── configs/
│ └── cfg.ini # 系统配置文件
├── models/
│ ├── ASR/ # 语音识别模型目录
│ ├── LLM/ # 大语言模型目录
│ ├── TTS/ # 语音合成模型目录
│ └── VAD/ # 语音活动检测模型目录
├── model_classes/ # 核心类定义目录
│ ├── __init__.py
│ ├── asr_loader.py # ASR模型加载器
│ ├── audio_manager.py # 音频管理器
│ ├── config_manager.py # 配置管理器
│ ├── llm_loader.py # LLM模型加载器
│ ├── state_manager.py # 状态管理器
│ ├── thread_manager.py # 线程管理器基类
│ ├── tts_loader.py # TTS模型加载器
│ └── vad_loader.py # VAD模型加载器
├── model_utils/ # 工具函数目录
│ ├── __init__.py
│ ├── audio_handler.py # 音频处理工具
│ ├── inireader.py # INI配置文件读取器
│ └── search_all_devices.py # 设备信息查询工具
├── funasr_onnx/ # FunASR ONNX模型库
├── kokoro/ # Kokoro TTS模型库
├── logs/ # 日志文件目录
│ ├── dev_infos.log # 设备信息日志
│ ├── main.log # 主程序运行日志
│ └── speaker.log # 说话人输出日志
├── local_dependence/ # 本地依赖库目录
│ └── en_core_web_sm-3.8.0-py3-none-any.whl # 英文NLP依赖
└── design_docs/ # 设计文档目录
开发指南
添加新的功能模块
- 在
model_classes/目录下创建新的类文件 - 新的类应该继承自适当的基类(如
BaseModelLoader或BaseThreadManager) - 在
model_utils/目录下添加相关的工具函数(如果需要) - 更新
main.py中的初始化逻辑和状态管理逻辑 - 在
configs/cfg.ini中添加必要的配置项 - 编写测试脚本验证新功能
扩展模型支持
添加新的ASR模型
- 将模型文件放置在
models/ASR/目录下 - 修改
model_classes/asr_loader.py以支持新的模型格式 - 在
configs/cfg.ini的[ASR]部分添加模型配置
添加新的LLM模型
- 将模型文件放置在
models/LLM/目录下 - 修改
model_classes/llm_loader.py以支持新的模型格式 - 在
configs/cfg.ini的[LLM]部分添加模型配置
添加新的TTS模型
- 将模型文件放置在
models/TTS/目录下 - 修改
model_classes/tts_loader.py以支持新的模型格式 - 在
configs/cfg.ini的[TTS]部分添加模型配置
自定义配置
系统的所有配置项都位于 configs/cfg.ini 文件中,可以根据需要进行修改:
- 音频设备配置:调整输入/输出设备ID和采样率
- 模型路径配置:指定不同模型的加载路径
- 唤醒词设置:修改唤醒词和相似度阈值
- 系统行为配置:调整状态转换逻辑和超时设置
性能优化建议
- 模型量化:对支持量化的模型使用INT8量化以减少内存占用和提高推理速度
- GPU加速:在支持CUDA的设备上启用GPU加速
- ONNX优化:使用ONNX Runtime的优化功能提升推理性能
- 缓存机制:合理利用模型缓存避免重复加载
- 多线程优化:根据硬件配置调整线程池大小和任务分配策略
安装与配置
环境要求
- Python 3.10+
- CUDA 11.8+ (可选,用于GPU加速)
- 至少8GB RAM
- 推荐使用GPU以获得最佳性能
安装步骤
- 获取项目代码:AIAssistant
cd AIAssistant
- 安装依赖:
pip install -r requirements.txt
-
下载模型文件:
- 将预训练模型文件放置在
models/目录下的相应子目录中 - VAD模型:
models/VAD/fsmn-vad/ - ASR模型:
models/ASR/SenseVoice-Small-ONNX/ - LLM模型:
models/LLM/Qwen3-0.6B/ - TTS模型:
models/TTS/Kokoro-82M-v1.1-zh/
- 将预训练模型文件放置在
配置文件
系统配置位于 configs/cfg.ini 文件中,主要配置项包括:
音频设备配置
[AUDIO_DEV_PARAMS]
input_dev_id=8 # 输入设备ID
output_dev_id=9 # 输出设备ID
input_sample_rate=44100 # 输入采样率
output_sample_rate=48000 # 输出采样率
ASR配置
[ASR_PARAMS]
asr_model_path="./models/ASR/SenseVoice-Small-ONNX"
asr_sample_rate=16000
asr_backend="cuda" # 运行后端: cuda/cpu
VAD配置
[VAD_PARAMS]
vad_model_path="./models/VAD/fsmn-vad"
decibel_thres=-70 # 分贝阈值
vad_backend="cuda" # 运行后端: cuda/cpu
LLM配置
[LLM_PARAMS]
llm_model_path="./models/LLM/Qwen3-0.6B/"
llm_backend="cuda" # 运行后端: cuda/cpu
max_new_tokens=1024 # 最大生成token数
temperature=0.6 # 采样温度
TTS配置
[TTS_PARAMS]
tts_model_path="./models/TTS/Kokoro-82M-v1.1-zh/kokoro-v1_1-zh.pth"
tts_backend="cuda" # 运行后端: cuda/cpu
voice="zm_100" # 语音类型
speed=1.0 # 语速
系统配置
[SYSTEM_PARAMS]
wake_word="小智同学" # 唤醒词
sleep_time=10 # 休眠时间(秒)
similarity_threshold=0.8 # 唤醒词相似度阈值
运行系统
启动主程序
python main.py
系统启动后会:
- 初始化所有模型和音频设备
- 进入待机状态,等待唤醒词
- 检测到唤醒词后进入对话模式
- 实时处理用户语音输入并生成回复
性能优化
- 多线程处理: 系统采用多线程架构,分别处理音频输入、模型推理和音频输出
- GPU加速: 支持CUDA加速,显著提升模型推理速度
- 模型量化: 使用量化模型减少内存占用和计算开销
- 缓存机制: VAD和ASR模型支持缓存机制,提高连续识别效率
- 动态调整: 根据系统负载动态调整处理参数
自定义配置
修改唤醒词
在 configs/cfg.ini 中修改 wake_word 参数:
[SYSTEM_PARAMS]
wake_word="你的自定义唤醒词"
调整模型参数
根据不同需求调整模型参数:
- 增加
max_new_tokens可生成更长的回复 - 调整
temperature控制回复的创造性 - 修改
similarity_threshold调整唤醒词识别灵敏度
更换语音
在 configs/cfg.ini 中修改 voice 参数:
[TTS_PARAMS]
voice="zf_100" # 更换为女声
故障排除
常见问题
-
音频设备无法识别:
- 检查设备ID是否正确
- 确认音频设备已连接并正常工作
- 运行
python -m model_utils.search_all_devices查看可用设备
-
模型加载失败:
- 检查模型文件路径是否正确
- 确认模型文件完整且未损坏
- 检查CUDA环境配置
-
识别准确率低:
- 调整VAD参数优化语音检测
- 确保音频输入质量良好
- 检查环境噪声水平
日志查看
系统日志保存在 logs/ 目录中:
main.log: 主程序日志speaker.log: TTS说话人列表dev_infos.log: 设备信息日志
开发指南
添加新功能
- 在
model_classes/中创建新的模型加载器 - 在
thread_manager.py中添加相应的处理逻辑 - 更新
configs/cfg.ini添加新配置项 - 在
main.py中初始化新模块
扩展模型
系统支持灵活的模型扩展:
- ASR: 可替换为其他语音识别模型
- LLM: 可集成不同厂商的大语言模型
- TTS: 可添加更多语音合成模型
- VAD: 可使用不同的语音活动检测算法
许可证
本项目仅供学习和研究使用,请遵守相关模型的许可证要求。
贡献
欢迎提交Issue和Pull Request来改进本项目。
联系方式
- 邮箱: 1145570610@qq.com
- 公众号: “CrazyNet”
获取方式
- 公众号回复: aichatrobot 获取项目代码
构建智能语音对话系统
9002

被折叠的 条评论
为什么被折叠?



