当前版本边界
把”项目现在能做什么”和”当前不能做什么”分开,避免误用。
✅ 已经稳定可用
- FreeSWITCH × mod_audio_fork × sherpa-onnx 全链路打通
- 流式中英双语 ASR(zipformer + silero-vad)
- 离线中文 TTS(VITS aishell3)
- 业务编排(callflow-esl)覆盖呼入 / 呼出 / 桥接 / 会议 / 录音 / DTMF
- 17 类典型场景全部有可参考实现
- 单机部署 → 单节点 application host → 多节点水平扩展
⚠️ 已知局限
| 局限 | 影响 |
|---|---|
| ASR / TTS / callflow-esl 均无 graceful shutdown | Ctrl+C / SIGTERM 直接终止 accept 与 worker,会中断在途请求与连接 |
| 无鉴权、无限流 | 仅适合内网部署;外网入口必须加反代鉴权 / 限流 |
| TTS 服务无 LRU / TTL | wav 文件持续累积,需外部定时清理 |
| ASR 仅支持 16kHz / mono / PCM16 | 上游必须重采样 / 调声道;不支持 WebSocket 帧分片 |
| TTS 不支持流式 | 必须等整段合成完成才能播放,长文本首字延迟高 |
| 业务侧无全局 KV | 跨通话状态共享只能靠 DB / channel variable |
ctx.conference.hear 必须绑定当前通道 |
无法实现”AI 不入会、只听” |
| 当前默认 ASR 模型仅 zh-en 双语 | 其他语种需换模型 |
| 当前默认 TTS 仅中文 | 多语种 TTS 需换模型 |
| MySQL 强依赖 | 业务路由表必须在 MySQL;不支持其他数据库 |
❌ 当前不在范围内
- 通话级实时翻译
- 声纹识别 / 说话人分割
- 实时情绪分析
- 多模态(视频 / 屏幕共享)
- 第三方云 ASR/TTS 适配层(Azure、阿里云、火山引擎等)
- WebRTC 直接接入
- 浏览器端 SDK
演进方向
按优先级分三档。优先级根据”用户呼声 × 实现成本 × 价值密度”评估,仅供参考,可以随业务需要调整。
P0 — 工程鲁棒性
让现有功能在生产环境更稳。
| 项 | 描述 |
|---|---|
| Graceful shutdown | 5 个组件都需要:收到 SIGTERM 后停止接受新连接,等存量请求完成再退出 |
| 限流与鉴权 | ASR/TTS 增加 API key / mTLS;按 IP 限速 |
| 健康检查 + readiness | callflow-esl 增加 /health /ready;TTS 增加 /health |
| 结构化指标 | Prometheus 端点:连接数、合成 RTF、识别延迟、队列长度 |
| 全链路 trace ID | 一通通话从 SIP 到 ASR/TTS 全程可追踪 |
| TTS wav LRU | 内置按时间 / 容量回收,去掉外部清理脚本依赖 |
| MySQL 可替换 | 业务路由层抽象,支持 PostgreSQL / 内置 SQLite |
P1 — 能力扩展
让平台覆盖更多业务场景。
| 项 | 描述 |
|---|---|
| 流式 TTS | 边合成边播,长文本首字 < 500ms |
| 多语种 ASR | 内置 SenseVoice 离线多语种 / Whisper 流式 |
| 多语种 TTS | 内置 Matcha / Kokoro 多语种 |
| 声纹识别 | 用 sherpa-onnx 声纹模型识别说话人,会议场景下区分发言人 |
| 关键词唤醒 | 整通 ASR 之外,加一个轻量关键词检测器 |
| AI 主持人模式 | ctx.conference.hear 支持不入会、纯监听 + 注入 TTS |
显式 stopRecording |
runtime 内显式控制录音生命周期 |
| 跨通话 KV | runtime 内置可订阅的 KV,业务间共享状态 |
| 业务热加载 | 不重启服务的情况下加载 / 替换业务函数 |
P2 — 生态对接
让平台融入更大的生态。
| 项 | 描述 |
|---|---|
| 浏览器 SDK | 网页端直接通过 WebRTC 接入业务编排 |
| Slack / 钉钉 / 飞书机器人 | 把通话事件 / 文本推到 IM |
| OpenAI Realtime / Gemini Live 适配 | 把 ASR + LLM + TTS 替换为云上一体化 voice agent |
| 第三方云 ASR/TTS | Azure / 阿里云 / 火山引擎适配层,混合部署 |
| 长期会话存储 | 通话 + 转写 + 录音 + 标签的长期检索(OpenSearch / pg) |
| 业务可视化编辑 | 不写代码,拖拽配置 IVR 流程 → 生成业务函数 |
| 实时质检 | 通话过程中按规则触发告警(敏感词、情绪、超时) |
已确认不做
避免重复造轮子或越过项目定位:
| 项 | 为什么不做 |
|---|---|
| 实现自己的软交换 | FreeSWITCH 已经是事实标准;本项目专注 AI 接入层 |
| 实现 SIP 协议栈 | FreeSWITCH 内置 sofia-sip,足够稳定 |
| 训练自家 ASR/TTS 模型 | sherpa-onnx 生态模型足够丰富;可拿来直接用 |
| 重写 ESL 协议 | 已实现,且面向业务暴露 CallContext,无需让业务层碰协议细节 |
| GUI 管理后台 | 优先把核心稳定下来;后续按需做 |
模型升级路线
模型与代码完全解耦,下面是当前在评估中的替代方案:
| 当前 | 候选 | 收益 | 代价 |
|---|---|---|---|
| streaming-zipformer-bilingual-zh-en | streaming-paraformer | 中文短语场景更准 | 仅中文 |
| streaming-zipformer-bilingual-zh-en | sense-voice 整段 | 多语种 / 准确率高 | 失去流式,不适合实时交互 |
| vits-zh-aishell3 | matcha-icefall-zh-baker | 自然度更高 | 模型更大 |
| vits-zh-aishell3 | kokoro-multi | 多语种 / 多音色 | 需重新评估 RTF |
| silero_vad | webrtcvad / ten-vad | 不同场景下更鲁棒 | 协议适配 |
参与方式
如果你想:
- 试用 / 反馈使用问题 → 提 issue(在 mod_audio_fork 或 ai-voice-platform 仓库)
- 贡献业务模式 → 直接 PR 一个新业务文件 + 在
business-registry.ts注册 - 贡献新模型适配 → 在
sherpa-asr-online-server/sherpa-tts-server加配置项 / 加适配代码 - 贡献部署模式 → 写一份你环境的 docker-compose / k8s manifest,加到
deployment/子目录
版本注记
本文档随项目同步更新。关键状态:
- 当前版本:与仓库
ai-voice-platformmaster 分支对齐 - 模型默认:
zh-en bilingual zipformer+silero_vad+vits-zh-aishell3 - 当前不再依赖
mod_unimrcp(早期版本曾依赖,已完全替换为mod_audio_fork)
如发现文档与代码不一致,以代码为准;并欢迎反馈帮助文档对齐。