这是一个基于 Step-Audio-2-mini 大模型与 TurnSense 话语完整性检测模块构建的全双工(Full-Duplex)实时语音对话演示系统。
本演示旨在展示如何以透明、简洁、无性能损失的方式,将 AI 语音交互从传统的“对讲机模式”升级为“即插即用”的自然对话模式。
- 全双工实时交互:支持在 AI 说话时随时打断,支持极其自然的快速翻转。
- 智能状态机管理:
- 快速打断:检测到用户语音持续超过 500ms 即刻停止 AI 输出。
- 话语完成度检测 (TurnSense):通过三分类模型判定用户意图。
Complete: 用户说完,AI 立即回复(200ms 静音触发)。Incomplete: 用户未说完(如:语气词、长停顿),系统额外等待 800ms。Invalid: 语义无效或纯噪音,系统自动丢弃,保持会话清洁。
- 流式合成与播放:采用
Step-Audio-2的流式 Token 输出,结合Token2Wav实现低延迟 PCM 流式音频播放。 - 可视化控制台:实时展示 VAD 概率曲线、TurnSense 判定结果及系统内部状态。
┌─────────────────────────────────────────────────────────────────────┐
│ Frontend (HTML/JS) - Port 12888 │
│ ┌─────────────┐ ┌──────────────┐ ┌─────────────┐ │
│ │ 麦克风采集 │ │ 状态可视化 │ │ 音频播放器 │ │
│ │ (WebAudio) │ │ VAD/TurnSense│ │ (PCM Stream) │ │
│ └──────┬──────┘ └──────────────┘ └──────┬──────┘ │
│ │ ▲ ▲ │
│ └──────────────┼─────────────────────┘ │
│ │ WebSocket │
└────────────────────────┼────────────────────────────────────────────┘
│
┌────────────────────────┼────────────────────────────────────────────┐
│ Backend (FastAPI + WebSocket) - Port 12889 │
│ │ │
│ ┌──────▼──────┐ │
│ │ 会话管理器 │ (Session Manager / State Machine) │
│ └──┬───┬───┬──┘ │
│ │ │ │ │
│ ┌──▼┐ ┌▼──┐ ┌▼─────────────────┐ │
│ │VAD│ │TS │ │ Step-Audio-2 客户端│ │
│ │ │ │ │ │ + Token2Wav │ │
│ └───┘ └───┘ └──────────┬───────┘ │
│ │ HTTP Stream │
└──────────────────────────┼──────────────────────────────────────────┘
│
┌──────────────────────────▼──────────────────────────────────────────┐
│ vLLM (Step-Audio-2-mini) - Port 12890 (推理后端) │
└─────────────────────────────────────────────────────────────────────┘
- 显存 >= 24GB 的 NVIDIA GPU (推荐使用 A10, A100, 或 3090/4090)。
# 克隆仓库并进入目录
git clone https://github.com/your-repo/step-audio-demo.git
cd step-audio-demo
# 创建虚拟环境
conda create -n step-audio python=3.10
conda activate step-audio
# 安装依赖
pip install -r server/requirements.txt
# 额外注意: 确保安装了 Step-Audio2 所需的 flash-attn 和其它推理依赖请按照以下结构准备模型文件:
- Step-Audio-2-mini: 放置于
Step-Audio2/pretrained_models/Step-Audio-2-mini - Silero VAD: 放置于
silero-vad/src/silero_vad/data/ - TurnSense: 放置于
TurnSense/pretrained_models/
使用 Docker 启动 step-audio-2-mini 模型:
docker run --rm -ti \
--gpus '"device=0"' \
-v /path/to/Step-Audio-2-mini:/Step-Audio-2-mini \
-p 12890:12890 \
stepfun2025/vllm:step-audio-2-v20250909 \
vllm serve /Step-Audio-2-mini \
--served-model-name step-audio-2-mini \
--port 12890 \
--gpu-memory-utilization 0.8 \
--max-model-len 16384 \
--trust-remote-codecd server
python main.py后端将运行在 12889 端口。
cd frontend
python serve.py前端将运行在 12888 端口。在浏览器中打开 http://localhost:12888 即可开始对话。
你可以在前端页面的右侧面板中实时调整以下参数:
- VAD Threshold: 判断语音的灵敏度,默认 0.5。
- Silence Duration: 判定用户说完话所需的静音时长,建议 200-400ms。
- Interrupt Duration: AI 说话时,用户需要持续说话多久才触发打断,建议 500ms。
- TurnSense Toggle: 是否开启话语完整性检测。开启后,即使静音超过阈值,若模型认为句子不完整,也会进入等待状态。