📋 本页是版本定位与发布说明(这个版本是什么、稳不稳、有哪些已知局限)。
想看逐版本的新增 / 优化 / 修复清单,请看独立的 更新日志。
1.1.0(当前版本)
发布日期:2026-06-27
| 项 | 值 |
|---|---|
| 版本 | 1.1.0 |
| 源码版本(最后一次提交) | 7b1d56c09ddb1d469607ddc0e0ccf59ff62a1e91(短 7b1d56c) |
| 上一版本 | 1.0.0(a5cd832,2026-06-21) |
| 累计提交数 | 147 |
1.1.0 是在 1.0.0 之上的功能增强版,完全向后兼容(业务编码 / 配置结构 / 端口约定均无
破坏性变更,1.0.0 的业务与配置可直接沿用)。本版主要新增 Azure Speech 兼容语音网关、
callflow-esl 优雅关停与独立可执行文件构建、**callHear 挂机后尾部识别收集**、
验证码识别上报业务,并修复了阿里云 / Azure 语音网关的 ASR 会话收尾问题;平台内置业务
增至 19 个。
打断(barge-in):为什么把停播从 uuid_break 改用 uuid_fileman
打断时如何停掉当前播放,是最容易被问到的一点,单独说明。该切换在 1.0 期间的「打断逻辑优化」
(提交312574a)中完成,本版沿用未改。
打断时停止当前 TTS 播放,原先使用 uuid_break,已改为首选 api uuid_fileman <uuid> stop
(uuid_break 降级为兜底回退)。原因:
uuid_break <uuid>会打断整个通道读流:它在停掉 TTS 播放的同时,会把通道上正在采集的
尾音(mod_audio_fork的 ASR 流、uuid_record录音)一并截断。而 barge-in 恰恰是“用户开口、
要立刻停播并继续听用户说”的时刻,此时必须保住 ASR 采集流,否则刚打断就丢掉用户开头那句话。- 改用
uuid_fileman <uuid> stop后,只结束当前 playback 的文件句柄、不动通道读流——停的是
“嘴”(TTS 播放),留的是“耳朵”(ASR 采集 / 录音),正是 barge-in 想要的语义。 uuid_break仍作为兜底回退保留:当uuid_fileman被 FreeSWITCH 以非幂等错误拒绝时,
才回退一次api uuid_break <uuid>,保证即便首选命令失败也能恢复打断。
本版完整的「新增功能 / 优化点 / 修复问题 / 升级提示」见 更新日志 · 1.1.0。
下面 1.0.0 的「版本定位 / 已稳定可用 / 已知局限 / 不在范围内」仍是平台整体说明基线,
1.1.0 在此基线之上叠加变更。
1.0.0(正式发布版)
发布日期:2026-06-21
| 项 | 值 |
|---|---|
| 版本 | 1.0.0 |
| 源码版本(最后一次提交) | a5cd8323eaadb96b4af73ffa229e1db27be2d082(短 a5cd832) |
| 最后一次提交说明 | 调整 ASR 服务 VAD 模型路径解析 |
| 首次提交 | 1aa0eaa(2026-05-02) |
| 累计提交数 | 129 |
仓库当前未打 git tag,1.0.0 以本页记录的提交
a5cd832为基准。本页同时作为后续编写
更新日志(CHANGELOG)的依据。
版本定位
AI Voice Platform 1.0 是一套本地化、可商用、组件化的 FreeSWITCH × AI 语音方案:ASR 走mod_audio_fork 把 16kHz 单声道 PCM16 流式推到 WebSocket ASR 服务;TTS 由本地 HTTP TTS 服务
生成 wav 或 MP3 流,再交给 FreeSWITCH playback 播放。**已彻底移除 mod_unimrcp**,识别链路
只走 mod_audio_fork + sherpa-asr-online-server。
已稳定可用
- FreeSWITCH ×
mod_audio_fork× sherpa-onnx 全链路打通 - 流式 ASR(默认中文 int8 zipformer,可切中英双语预设)+ silero-vad
- 离线 TTS(默认 vits-zh-ll,可切 Kokoro 中英双语多音色 / Matcha / VITS),支持普通合成 +
POST /tts-stream边合成边播的流式链路(依赖ffmpeg+mod_shout) - 业务编排(callflow-esl)覆盖呼入 / 呼出 / 桥接 / 会议 / 录音 / DTMF,内置 18 个业务
(17 个 demo + 1 个接本地 Ollama 大模型的真实语音对话业务ollama-chat-business) - 智能外呼子系统:活动 / 名单 / 批次调度 / 并发与工作时段 / 自动重试 / 回铃音 + 嘟声检测 /
外呼策略中心 / DNC 免打扰 / 角色鉴权 / 坐席工作台 / 转人工会议(盲转 · 协商转 · 主管监听插话)/
线路号码池 / 实时作战大屏 - 通话后情绪分析(文本 BERT + 音频 wav2vec2 融合)
- 管理控制台(FreeSWITCH 数据看板、号码 → 业务路由配置、运行时 TTS/录音配置热重载、TTS 音色试听、
ASR 上传/录音测试) - 单机部署 → 单节点 → 多节点水平扩展
已知局限
| 局限 | 影响 |
|---|---|
| ASR / TTS(C++ 服务)无 graceful shutdown | Ctrl+C / SIGTERM 直接终止 accept 与 worker,会中断在途请求与连接(callflow-esl 已在 1.1.0 支持优雅关停) |
无鉴权、无限流(除 maxSessions / maxQueuedRequests / maxActiveStreams) |
仅适合内网部署;外网入口必须加反代鉴权 / 限流 |
| TTS 服务无 LRU / TTL | wav 文件持续累积,需外部定时清理 |
| ASR 仅支持 16kHz / mono / PCM16 | 上游必须重采样 / 调声道;不支持 WebSocket 帧分片 |
流式 TTS 依赖外部 ffmpeg |
需 mp3.encoderPath 对应的可执行可用,且 FS 端启用 mod_shout |
| 业务侧无全局 KV | 跨通话状态共享只能靠 DB / channel variable |
ctx.conference.hear 必须绑定当前通道 |
无法实现「AI 不入会、只听」 |
| PostgreSQL 强依赖 | 业务路由表与运行时配置当前依赖 PostgreSQL;暂未抽象多数据库 |
不在范围内
- 通话级实时翻译
- 声纹识别 / 说话人分割
- 实时(通话中)情绪分析(通话后离线情绪分析已支持)
- 多模态(视频 / 屏幕共享)
- WebRTC 直接接入、浏览器端 SDK
显著变更(更新日志依据)
本节按子系统归纳 1.0 形成过程中的关键变更,供后续编写 CHANGELOG 时筛选条目。条目来源为
git log,时间区间 2026-05-02(首次提交)至 2026-06-21(a5cd832)。
1.1.0 起的逐版本「新增 / 优化 / 修复」清单见独立的 更新日志;本节仅作为
1.0 的形成历史保留。
ASR 服务
- 配置重构为按域分组:
server/concurrency/socket/logging/recording/asr/vad;模型选择改为asr.activeModel+asr.modelsprofile 表 - VAD 模型路径解析调整;VAD 强制启用、无开关;endpoint 检测字段移除,走 sherpa 默认
- 推送
speech_started事件,支持begin-speaking打断 - 修复仅支持单路通话的问题;性能调优
TTS 服务
- 配置重构为按域分组:
server/concurrency/timeouts/transport/mp3/tts;
模型选择改为tts.activeModel+tts.modelsprofile 表 - 新增
POST /tts-stream+GET /tts-stream/<id>.mp3流式播放链路,降低首字延迟 - 并行预热 worker 池;wav2mp3 响度增益(
mp3.volumeGainDb);流式稳定性兜底(ffmpeg 退出超时、
watchdog、maxActiveStreams、socket 超时);15 路通话稳定性验证无异常
callflow-esl(业务编排)
- 重构 ESL 运行时模块:控制器拆到
runtime/controllers/、会议会控拆到runtime/conference/、
originate/回铃检测拆到runtime/originate/,新增kernel//transport//tts/分层 CallContextfacade 扩展:api、stopCallHear、setVariables/getVariables,会议会控getState/onStateChange/kickMember/mute/unmute/deaf/undeaf/lock/unlock/end/inviteMembers/setMemberRole,会议录音recording.*- TTS 段重构为
tts.defaults+tts.use+tts.profiles三段结构,流式与否改由use.call/use.conference选wav/shoutprofile 决定 - 打断支持
vad/begin-speaking/final三种触发模式;会议级play/injectSpeak支持配置
barge-in 触发模式;callHear长识别;会议状态用 redis 同步;通话录音 - 新增实时 WebSocket 语音识别客户端、播放控制器、通话运行时测试套件
- 新增
ollama-chat-business:接本地 Ollama/api/chat流式接口的真实大模型语音对话业务
(ASR → 本地 LLM → TTS 闭环,每通电话独立多轮上下文),与原有「模拟 LLM」演示业务并存 - 移除 callflow / 阿里云 ASR endpoint 标记
callout(智能外呼)
- 任务 / 联系人 / 批次调度 / 两层并发 + Redis 锁 + PostgreSQL
FOR UPDATE SKIP LOCKED - 回铃音 + 嘟声检测(嘟声依赖
mod_spandsp);外呼策略中心 / DNC 免打扰 - 坐席工作台与转人工会议(盲转 / 协商转 / 主管监听强插);线路号码池;实时作战大屏
- 拆分外呼服务处理器与校验模块;
originateDialStringTemplate/dialStringTemplate可覆盖 - callout-webpage 从单体 store 拆分为「共享 reference store + 页面级 composable」
管理控制台
- FreeSWITCH 数据看板、号码 → 业务路由配置、运行时 TTS/录音配置热重载
- TTS 音色试听、ASR 上传/录音测试
底座与工程
- 彻底移除
mod_unimrcp,识别链路只走mod_audio_fork+sherpa-asr-online-server - 数据库改用 PostgreSQL(callflow / callout 两 schema,Drizzle ORM)
- 源码按项目授权;
scripts/package-release.ps1支持-Projects按项目独立 / 组合打包,按「项目数 × ¥500」计价
源码交付
源码按项目授权交付。scripts/package-release.ps1 支持 -Projects 按项目独立 / 组合打包
(默认 zip,可选 tar.gz),按「项目数 × ¥500」计价(前后端算一个项目)。
源码模块、实施服务、公开应售价与交付边界见 源码服务与售价。
后续更新日志编写说明
本页以提交 a5cd832 作为 1.0.0 的源码版本锚点。编写正式 CHANGELOG 时:
- 以
git log 1aa0eaa..a5cd832为素材池,按上面「显著变更」分类逐条筛选 - 保持「新增 / 变更 / 修复 / 移除」分类,遵循 Keep a Changelog 风格
- 用户可见的行为变更(配置结构、API、端口、业务编码)必须单独高亮,提示从旧版迁移的注意点
- 下一个版本(1.1.x)起,CHANGELOG 应在
a5cd832之上增量记录
历史版本
- 1.1.0(2026-06-27,
7b1d56c):功能增强版。新增 Azure Speech 兼容语音网关、callflow-esl
优雅关停与独立构建、callHear挂机后尾部识别、verification-code-business验证码识别上报业务;
修复阿里云 / Azure 语音网关 ASR 会话收尾。逐条变更见 更新日志。 - 1.0.0(2026-06-21,
a5cd832):首个正式发布版。详见上文。