当前版本边界

把”项目现在能做什么”和”当前不能做什么”分开,避免误用。

✅ 已经稳定可用

  • 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-platform master 分支对齐
  • 模型默认:zh-en bilingual zipformer + silero_vad + vits-zh-aishell3
  • 当前不再依赖 mod_unimrcp(早期版本曾依赖,已完全替换为 mod_audio_fork

如发现文档与代码不一致,以代码为准;并欢迎反馈帮助文档对齐。