rasonyang/ai-native-callcenter
运维与部署自托管 AI 呼叫中心:由语音大模型接听每一通来电,需要人工时转入真人队列且不中断通话。
项目介绍
这是一个自托管的呼叫中心,默认由语音 AI 接听来电,而不是先播放 IVR 菜单。电话进入 FreeSWITCH 后,被桥接到应用内部的 SIP 端点,该端点与实时语音模型建立 speech-to-speech 会话。流程引擎控制对话所处阶段、模型可调用的工具,并在需要时把来电转入 mod_callcenter 队列;坐席在浏览器中接管,SIP 通话腿由配套的 Chrome 扩展保持,机器人阶段和人工阶段最终合并为一条通话记录、一份转写和一份录音。
整个系统是一个 Go 二进制,内含 REST API、事件流和 Web 界面,另有 PostgreSQL 和 FreeSWITCH。适合希望在自有 SIP 中继和自有基础设施上做 AI 一线接听的团队,而不是使用托管 SaaS。
快速使用
官方提供的一键安装方式适用于 Linux 和 macOS:
# Linux
curl -fsSL https://github.com/rasonyang/ai-native-callcenter/releases/latest/download/install.sh | sudo sh
# macOS
curl -fsSL https://github.com/rasonyang/ai-native-callcenter/releases/latest/download/install.sh | sh
安装脚本的行为和前置条件见部署文档和一键安装说明。如果从源码构建,README 给出的顺序是:
make dev-up # 用 Docker 启动 PostgreSQL
cd web && npm install && npm run build && cd ..
make build # 生成内嵌界面的 bin/aicc
./bin/aicc useradd -username admin -password '…' -role ADMIN
./bin/aicc
启动二进制之后,还需要准备接入了 SIP 中继的 FreeSWITCH,以及实时语音模型供应商,这两项属于运维侧配置,不会由构建过程自动完成。设计总览说明了 FreeSWITCH 如何通过 Lua 从数据库读取目录和队列配置。
使用约束
- 部署在启动时选定一个模型供应商,并用于该部署中的全部通话:中国大陆使用
qwen或doubao,其他地区使用openai或grok,也可以用gateway指向自建 Realtime 网关(例如 cascade-realtime-gateway)。来电语言不会切换供应商。 qwen、openai、grok共用同一协议 profile;doubao使用不同协议,有独立客户端。- 坐席音频不由本应用处理,而是通过独立的 web-sip-phone Chrome 扩展完成,扩展使用本应用登录时下发的凭据注册;浏览器界面只负责在线状态、通话控制和回呼。
- 本项目有意不内置级联的 ASR + LLM + TTS 流水线,这类组合应放在遵循同一协议的独立服务中。
- HTTP API 采用 spec-first:
docs/openapi.json是唯一事实来源,Go 服务端和 TypeScript 客户端都由它生成,改动需要先改契约。 - 许可证为 Apache-2.0。
扩展方式
新增语音供应商是添加 profile 而非编写客户端(见供应商扩展指南);新增对话流程是加载时校验的 JSON 文档(见流程编写文档,双语示例在 internal/seed/flows);与其他产品的集成放在本仓库之外,作为流程 backend URL 背后的服务。
HotRepo 点评
在 HotRepo 记录的 2026-11-01 Go 语言月榜中,该项目为 515 Star、当月新增 342 Star,位列该语言榜第 17 名;没有记录到全语言日榜名次。这个新增量只对应那一个月的单期统计,只能说明该月的情况,不能据此判断当前增速。支撑这份关注的技术事实在于架构:AI 通话腿是单个 Go 二进制内的 SIP 端点,供应商支持时 G.711 音频原样透传,机器人阶段和人工阶段按设计共用一条通话记录。这使它更接近电话通信基础设施而非对话演示,README 明确把集成和 ASR/LLM/TTS 级联放到外部,也是评估时需要接受的一条边界。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。