当前版本边界

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

✅ 已经稳定可用

  • FreeSWITCH × mod_audio_fork × sherpa-onnx 全链路打通
  • 流式 ASR(默认中文 int8 zipformer,可切中英双语预设)+ silero-vad
  • 离线 TTS(默认 Kokoro 中英双语多音色,可切回 Matcha / VITS),支持普通合成 + POST /tts-stream 边合成边播的流式链路(依赖 ffmpeg + mod_shout
  • 业务编排(callflow-esl)覆盖呼入 / 呼出 / 桥接 / 会议 / 录音 / DTMF
  • 17 类典型场景全部有可参考实现
  • 智能外呼子系统(callout-server/webpage):活动 / 名单 / 批次调度 / 并发与工作时段 / 自动重试 / 可选回铃音 + 嘟声检测 / 外呼策略中心 / DNC 免打扰 / 角色鉴权 / 坐席工作台 / 转人工会议(盲转 · 协商转 · 主管监听/插话)/ 线路号码池 / 实时作战大屏
  • 通话后情绪分析(emotion-analysis-server):文本 BERT + 音频 wav2vec2 融合,外呼可按客户情绪筛选线索
  • 管理控制台(callflow-server/webpage):FreeSWITCH 数据看板、号码 → 业务路由配置、运行时 TTS/录音 配置热重载、TTS 音色试听
  • 单机部署 → 单节点 application host → 多节点水平扩展

⚠️ 已知局限

局限 影响
ASR / TTS / callflow-esl 均无 graceful shutdown Ctrl+C / SIGTERM 直接终止 accept 与 worker,会中断在途请求与连接
无鉴权、无限流 仅适合内网部署;外网入口必须加反代鉴权 / 限流
TTS 服务无 LRU / TTL wav 文件持续累积,需外部定时清理
ASR 仅支持 16kHz / mono / PCM16 上游必须重采样 / 调声道;不支持 WebSocket 帧分片
流式 TTS 依赖外部 ffmpeg mp3EncoderPath 对应的可执行可用,且 FS 端启用 mod_shout
业务侧无全局 KV 跨通话状态共享只能靠 DB / channel variable
ctx.conference.hear 必须绑定当前通道 无法实现”AI 不入会、只听”
当前默认 ASR 为中文 int8 流式模型 需中英混说可切 bilingual 预设;其他语种需换模型
内置 TTS 覆盖中英双语(Kokoro) 更多语种 TTS 需换模型
PostgreSQL 强依赖 业务路由表与运行时配置当前依赖 PostgreSQL;暂未抽象多数据库

❌ 当前不在范围内

  • 通话级实时翻译
  • 声纹识别 / 说话人分割
  • 实时(通话中)情绪分析 —— 通话的离线情绪分析已支持,见 情绪分析服务
  • 多模态(视频 / 屏幕共享)
  • 第三方云 ASR/TTS 适配层(Azure、阿里云、火山引擎等)
  • WebRTC 直接接入
  • 浏览器端 SDK

演进方向

按优先级分三档。优先级根据”用户呼声 × 实现成本 × 价值密度”评估,仅供参考,可以随业务需要调整。

P0 — 工程鲁棒性

让现有功能在生产环境更稳。

描述
Graceful shutdown 各常驻服务都需要:收到 SIGTERM 后停止接受新连接,等存量请求完成再退出
限流与鉴权 ASR/TTS 增加 API key / mTLS;按 IP 限速
健康检查 + readiness callflow-esl 增加 /health /ready;TTS 增加 /health
结构化指标 Prometheus 端点:连接数、合成 RTF、识别延迟、队列长度
全链路 trace ID 一通通话从 SIP 到 ASR/TTS 全程可追踪
TTS wav LRU 内置按时间 / 容量回收,去掉外部清理脚本依赖
数据库可替换 业务路由层抽象,支持内置 SQLite 或其它数据库

P1 — 能力扩展

让平台覆盖更多业务场景。

描述
多语种 ASR 内置 SenseVoice 离线多语种 / Whisper 流式
多语种 TTS 在 Kokoro 中英双语多音色基础上,扩展更多语种(日 / 韩等)
声纹识别 用 sherpa-onnx 声纹模型识别说话人,会议场景下区分发言人
关键词唤醒 整通 ASR 之外,加一个轻量关键词检测器
AI 主持人模式 ctx.conference.hear 支持不入会、纯监听 + 注入 TTS
显式 stopRecording runtime 内显式控制录音生命周期
跨通话 KV runtime 内置可订阅的 KV,业务间共享状态
业务热加载 不重启服务的情况下加载 / 替换业务函数
流式 TTS 替代编码器 当前依赖 ffmpeg,未来可探索内嵌 lame / vorbis,去掉外部依赖

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,无需让业务层碰协议细节

模型升级路线

模型与代码完全解耦,下面是当前在评估中的替代方案:

当前 候选 收益 代价
当前 候选 收益 代价
—— —— —— ——
zh-int8 streaming zipformer bilingual zh-en 预设 中英混说更稳 模型更大、非 int8
zh-int8 streaming zipformer sense-voice 整段 多语种 / 准确率高 失去流式,不适合实时交互
kokoro-multi-lang-v1_1 matcha-icefall-zh-en 单说话人下更轻量 音色单一
kokoro-multi-lang-v1_1 vits-zh-aishell3 纯中文多说话人 自然度与流式体验需对比
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-int8 streaming zipformer + silero_vad + kokoro-multi-lang-v1_1
  • 已包含智能外呼(callout)、管理控制台(callflow-server/webpage)与通话后情绪分析(emotion-analysis-server)子系统
  • 当前不再依赖 mod_unimrcp(早期版本曾依赖,已完全替换为 mod_audio_fork

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