手措智能语音对话系统

构建智能语音对话系统
部署运行你感兴趣的模型镜像

智能语音对话系统 (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)│◀───┤   模型加载器       │
                       └─────────────────┘    └──────────────────┘

多线程架构说明

  1. 音频输入线程管理器 (AudioInputThreadManager):

    • 负责管理音频输入流和实时语音处理
    • 集成VAD和ASR模型进行语音活动检测和语音识别
    • 处理唤醒词检测和状态转换
  2. LLM线程管理器 (LLMThreadManager):

    • 负责处理用户输入并生成自然语言回复
    • 管理与大语言模型的交互
    • 协调状态转换和输出处理
  3. 音频输出线程管理器 (AudioOutputThreadManager):

    • 负责语音合成和音频播放控制
    • 管理TTS模型和音频输出流
    • 处理播放中断和状态反馈
  4. 状态管理器 (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/                # 设计文档目录

开发指南

添加新的功能模块

  1. model_classes/ 目录下创建新的类文件
  2. 新的类应该继承自适当的基类(如 BaseModelLoaderBaseThreadManager
  3. model_utils/ 目录下添加相关的工具函数(如果需要)
  4. 更新 main.py 中的初始化逻辑和状态管理逻辑
  5. configs/cfg.ini 中添加必要的配置项
  6. 编写测试脚本验证新功能

扩展模型支持

添加新的ASR模型
  1. 将模型文件放置在 models/ASR/ 目录下
  2. 修改 model_classes/asr_loader.py 以支持新的模型格式
  3. configs/cfg.ini[ASR] 部分添加模型配置
添加新的LLM模型
  1. 将模型文件放置在 models/LLM/ 目录下
  2. 修改 model_classes/llm_loader.py 以支持新的模型格式
  3. configs/cfg.ini[LLM] 部分添加模型配置
添加新的TTS模型
  1. 将模型文件放置在 models/TTS/ 目录下
  2. 修改 model_classes/tts_loader.py 以支持新的模型格式
  3. configs/cfg.ini[TTS] 部分添加模型配置

自定义配置

系统的所有配置项都位于 configs/cfg.ini 文件中,可以根据需要进行修改:

  • 音频设备配置:调整输入/输出设备ID和采样率
  • 模型路径配置:指定不同模型的加载路径
  • 唤醒词设置:修改唤醒词和相似度阈值
  • 系统行为配置:调整状态转换逻辑和超时设置

性能优化建议

  1. 模型量化:对支持量化的模型使用INT8量化以减少内存占用和提高推理速度
  2. GPU加速:在支持CUDA的设备上启用GPU加速
  3. ONNX优化:使用ONNX Runtime的优化功能提升推理性能
  4. 缓存机制:合理利用模型缓存避免重复加载
  5. 多线程优化:根据硬件配置调整线程池大小和任务分配策略

安装与配置

环境要求

  • Python 3.10+
  • CUDA 11.8+ (可选,用于GPU加速)
  • 至少8GB RAM
  • 推荐使用GPU以获得最佳性能

安装步骤

  1. 获取项目代码:AIAssistant
cd AIAssistant
  1. 安装依赖:
pip install -r requirements.txt
  1. 下载模型文件:

    • 将预训练模型文件放置在 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

系统启动后会:

  1. 初始化所有模型和音频设备
  2. 进入待机状态,等待唤醒词
  3. 检测到唤醒词后进入对话模式
  4. 实时处理用户语音输入并生成回复

性能优化

  1. 多线程处理: 系统采用多线程架构,分别处理音频输入、模型推理和音频输出
  2. GPU加速: 支持CUDA加速,显著提升模型推理速度
  3. 模型量化: 使用量化模型减少内存占用和计算开销
  4. 缓存机制: VAD和ASR模型支持缓存机制,提高连续识别效率
  5. 动态调整: 根据系统负载动态调整处理参数

自定义配置

修改唤醒词

configs/cfg.ini 中修改 wake_word 参数:

[SYSTEM_PARAMS]
wake_word="你的自定义唤醒词"

调整模型参数

根据不同需求调整模型参数:

  • 增加 max_new_tokens 可生成更长的回复
  • 调整 temperature 控制回复的创造性
  • 修改 similarity_threshold 调整唤醒词识别灵敏度

更换语音

configs/cfg.ini 中修改 voice 参数:

[TTS_PARAMS]
voice="zf_100"  # 更换为女声

故障排除

常见问题

  1. 音频设备无法识别:

    • 检查设备ID是否正确
    • 确认音频设备已连接并正常工作
    • 运行 python -m model_utils.search_all_devices 查看可用设备
  2. 模型加载失败:

    • 检查模型文件路径是否正确
    • 确认模型文件完整且未损坏
    • 检查CUDA环境配置
  3. 识别准确率低:

    • 调整VAD参数优化语音检测
    • 确保音频输入质量良好
    • 检查环境噪声水平

日志查看

系统日志保存在 logs/ 目录中:

  • main.log: 主程序日志
  • speaker.log: TTS说话人列表
  • dev_infos.log: 设备信息日志

开发指南

添加新功能

  1. model_classes/ 中创建新的模型加载器
  2. thread_manager.py 中添加相应的处理逻辑
  3. 更新 configs/cfg.ini 添加新配置项
  4. main.py 中初始化新模块

扩展模型

系统支持灵活的模型扩展:

  • ASR: 可替换为其他语音识别模型
  • LLM: 可集成不同厂商的大语言模型
  • TTS: 可添加更多语音合成模型
  • VAD: 可使用不同的语音活动检测算法

许可证

本项目仅供学习和研究使用,请遵守相关模型的许可证要求。

贡献

欢迎提交Issue和Pull Request来改进本项目。

联系方式

获取方式

您可能感兴趣的与本文相关的镜像

HunyuanVideo-Foley

HunyuanVideo-Foley

语音合成

HunyuanVideo-Foley是由腾讯混元2025年8月28日宣布开源端到端视频音效生成模型,用户只需输入视频和文字,就能为视频匹配电影级音效

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值