Skip to content

语音交互模式说明

Image

项目概述

py-xiaozhi是一个基于Python开发的AI语音助手客户端,采用现代化的异步架构设计,支持丰富的多模态交互功能。系统集成了语音识别、自然语言处理、视觉识别、IoT设备控制等先进技术,为用户提供智能化的交互体验。

核心特性

  • 多协议支持: WebSocket/MQTT双协议通信
  • MCP工具生态: 集成10+专业工具模块
  • IoT设备集成: Thing-based架构的设备管理
  • 视觉识别: 基于GLM-4V的多模态理解
  • 音频处理: Opus编码+WebRTC增强
  • 全局快捷键: 系统级交互控制

语音交互模式

系统提供多种语音交互方式,支持灵活的交互控制和智能语音检测:

1. 手动按压模式

  • 操作方法: 按住快捷键期间录音,松开自动发送
  • 默认快捷键: Ctrl+J (可在配置中修改)
  • 适用场景: 精确控制录音时间,避免环境噪音干扰
  • 优势特点:
    • 避免误触发录音
    • 录音时长完全可控
    • 适合嘈杂环境使用

2. 回合制模式

  • 操作方法: 按下快捷键开启/点击GUI右下角手动对话模式切换自动对话
  • 默认快捷键: Ctrl+K (可在配置中修改)
  • 适用场景: 连续对话、长时间交互
  • 智能特性: 支持连续多轮对话

3. 唤醒词模式

  • 操作方法: 语音说出预设唤醒词激活系统
  • 默认唤醒词: "小智"、"小美" (可在配置中自定义)
  • 模型支持: 基于Vosk离线语音识别
  • 配置要求: 需要下载对应的语音识别模型

模式切换与配置

json
// 在 config/config.json 中配置快捷键
{
  "SHORTCUTS": {
    "ENABLED": true,
    "MANUAL_PRESS": {"modifier": "ctrl", "key": "j"},
    "AUTO_TOGGLE": {"modifier": "ctrl", "key": "k"},
    "MODE_TOGGLE": {"modifier": "ctrl", "key": "m"}
  }
}
  • 界面显示: GUI右下角实时显示当前交互模式
  • 快速切换: 使用 Ctrl+M 在不同模式间快速切换
  • 状态指示: 系统托盘图标颜色反映当前状态

对话控制与系统状态

智能打断功能

当AI正在语音回复时,用户可以随时中断对话:

  • 快捷键打断: Ctrl+Q - 立即停止当前AI回复
  • GUI操作: 点击界面上的"中断"按钮
  • 智能检测: 系统检测到新的语音输入时自动中断回复

系统状态管理

系统采用事件驱动的状态机架构,具有以下运行状态:

┌─────────────────────────────────────────────────────────┐
│                    系统状态流转图                          │
└─────────────────────────────────────────────────────────┘

     IDLE              CONNECTING           LISTENING
  ┌─────────┐    唤醒词/按钮   ┌─────────┐  连接成功  ┌─────────┐
  │  空闲   │  ─────────────> │  连接中  │ ────────> │  聆听中  │
  │  待命   │                │  服务器  │           │  录音中  │
  └─────────┘                └─────────┘           └─────────┘
       ↑                           │                     │
       │                         连接失败                 │ 语音识别
       │                           │                     │ 完成/超时
       │                           ↓                     │
       │                     ┌─────────┐                 │
       └──── 播放完成/中断 ──── │  回复中  │ <──────────────┘
                             │  AI说话  │
                             └─────────┘

状态指示说明

系统托盘图标颜色:

  • 绿色: 系统正常运行,处于待命状态
  • 黄色: 正在聆听用户语音输入
  • 蓝色: AI正在语音回复中
  • 红色: 系统错误或连接异常
  • 灰色: 未连接到服务器

快捷键系统

系统提供丰富的全局快捷键支持,详细说明请参考:快捷键说明

常用快捷键

快捷键功能描述备注
Ctrl+J按住说话模式按住期间录音,松开发送
Ctrl+K自动对话模式开启/关闭自动语音检测
Ctrl+Q中断对话立即停止AI回复
Ctrl+M切换交互模式在手动/自动模式间切换
Ctrl+W显示/隐藏窗口窗口最小化/还原

智能语音命令系统

基础交互命令

  • 问候语: "你好"、"你是谁"、"早上好"
  • 礼貌用语: "谢谢"、"再见"、"请帮助我"
  • 状态询问: "系统状态如何"、"连接正常吗"

视觉识别命令

集成GLM-4V多模态理解能力:

bash
# 视觉识别分析
"识别画面"             # 分析当前摄像头画面
"看看摄像头前有什么"    # 描述看到的内容
"这是什么东西"         # 物体识别

MCP工具调用命令

利用丰富的MCP工具生态:

bash
# 日历管理
"创建明天下午3点的会议提醒"
"查看今天的日程安排"

# 定时器功能  
"一分钟后播放菊花台"

# 系统操作
"查看系统信息"
"调节音量到80%"

# 网络搜索
"搜索今天的天气"
"查找最近热点"

# 地图导航
"查找附近的咖啡店"
"导航到北京天安门"

# 美食菜谱
"推荐今天晚餐菜谱"
"教我做宫保鸡丁"

# 八字命理(可选)
"分析我的生辰八字"
"今天运势如何"

运行模式与部署

GUI模式 (默认)

图形用户界面模式,提供直观的交互体验:

bash
# 标准启动
python main.py

# 使用MQTT协议
python main.py --protocol mqtt

GUI模式特性:

  • 可视化操作界面
  • 实时状态显示
  • 音频波形可视化
  • 系统托盘支持
  • 图形化设置界面

CLI模式

命令行界面模式,适合服务器部署:

bash
# CLI模式启动
python main.py --mode cli

# CLI + MQTT协议
python main.py --mode cli --protocol mqtt

CLI模式特性:

  • 低资源占用
  • 服务器友好
  • 详细日志输出
  • 键盘快捷键支持
  • 脚本化部署

构建特性:

  • 跨平台支持
  • 单文件模式
  • 依赖打包
  • 自动化配置

平台兼容性

Windows 平台

  • 完全兼容: 所有功能正常支持
  • 音频增强: 支持Windows音频API
  • 音量控制: 集成pycaw音量管理
  • 系统托盘: 完整托盘功能支持
  • 全局热键: 完整快捷键功能

macOS 平台

  • 完全兼容: 核心功能完整支持
  • 状态栏: 托盘图标显示在顶部状态栏
  • 权限管理: 可能需要授权麦克风/摄像头权限
  • 快捷键: 部分快捷键需要系统权限
  • 音频: 原生CoreAudio支持

Linux 平台

  • 兼容性: 支持主流发行版(Ubuntu/CentOS/Debian)
  • 桌面环境:
    • GNOME: 完整支持
    • KDE: 完整支持
    • Xfce: 需要额外托盘支持
  • 音频系统:
    • PulseAudio: 推荐(自动检测)
    • ALSA: 备用方案
  • 依赖: 可能需要安装系统托盘支持包
bash
# Ubuntu/Debian 托盘支持
sudo apt-get install libappindicator3-1

# CentOS/RHEL 托盘支持  
sudo yum install libappindicator-gtk3

故障排除指南

常见问题

1. 语音识别不工作

  • 使用小美、小明等简易识别的唤醒词

2. 摄像头无法使用

bash
# 测试摄像头
python scripts/camera_scanner.py

# 检查摄像头权限和设备索引

3. 快捷键不响应

  • 检查是否有其他程序占用相同快捷键
  • 尝试以管理员权限运行(Windows)
  • 检查系统安全软件拦截

4. 网络连接问题

  • 检查防火墙设置
  • 验证WebSocket/MQTT服务器地址
  • 测试网络连通性