AVA-AI-Voice-Agent-for-Asterisk
开源 AI 语音代理,为 Asterisk/FreePBX 电话系统提供 STT→LLM→TTS 流
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
开源 AI 语音代理,为 Asterisk/FreePBX 电话系统提供 STT→LLM→TTS 流
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:深夜时分,一位客户拨打酒店前台热线,电话那头接听的不是真人,而是一个能够实时理解口语、精准回答问题并完成订房操作的 AI 语音代理——这就是 AVA(AI Voice Agent for Asterisk) 正在做的事情。AVA 是一个开源的模块化 AI 语音代理,专为 Asterisk/FreePBX 电话系统设计,通过标准的 AudioSocket/RTP 技术将 AI 能力嵌入任意电话网络,让企业无需更换现有电话基础设施,就能拥有 24 小时在线的智能接线员。
AVA 项目 Banner
Asterisk 是全球最广泛使用的开源 PBX(电话交换)软件,支撑着从初创公司到大型企业的无数电话系统。然而,传统 Asterisk 的自动化能力极其有限,呼入路由依赖预先录制的 IVR 语音菜单("请按1查询账单,请按2联系客服"),用户必须通过 DTMF 按键来导航,交互体验僵硬,也无法处理开放性口语问题。
传统解决方案有两类:一是采购厂商整套打包方案(动辄数万至数十万元),绑定特定云服务,缺乏灵活性;二是利用 Asterisk 的 AGI(Asterisk Gateway Interface)脚本自行对接第三方 AI,门槛极高,需要同时精通电话交换和 AI 接口开发。
AVA 的诞生填补了这一空白——作者 Hamza Khan Jarral 开发了一个开源框架,将 Asterisk 的 AudioSocket 通道与现代 AI 模型(STT/LLM/TTS)无缝连接,让任何熟悉 Docker 的运维人员都能在 10-30 分钟内搭建起一个可投入生产的 AI 语音接线员。
图1:AVA Admin UI 界面,支持图形化配置
AVA 的核心技术架构基于 STT → LLM → TTS 三段式流水线,用户可以在配置文件中自由组合不同厂商的组件:
| 组件 | 说明 |
|---|---|
| STT(语音识别) | 支持 Deepgram、Whisper.cpp、Faster-Whisper、Vosk、Sherpa 等 |
| LLM(大语言模型) | 支持 OpenAI GPT-4o、Claude、Google Gemini、Ollama(本地)、Groq 等 |
| TTS(语音合成) | 支持 ElevenLabs、Piper、Kokoro、MelotTS、Silero 等 |
| Tool Calling | MCP 协议,支持日历查询、邮件发送、电话转接等业务操作 |
| 传输协议 | AudioSocket(默认)和 ExternalMedia RTP 双协议支持 |
项目提供了 6 套经过生产验证的 Golden Baseline 配置,开箱即用:
此外还支持 完全本地化部署:CPU 模式(延迟 5-15s/轮)适合测试,GPU 模式(RTX 4090 实测 ~1s 端到端延迟)用于生产环境,甚至可以通过 Ollama 完全摆脱云端 API。
从源码结构来看,AVA 采用高度模块化的设计:
| 目录 | 职责 |
|---|---|
src/core/ | 核心引擎:会话管理、播放控制、VAD 语音活动检测、对话协调 |
src/pipelines/ | 各 AI 厂商适配器(OpenAI/Deepgram/Google 等),通过 PipelineOrchestrator 统一编排 |
src/providers/ | 各厂商的 WebSocket/实时 API 客户端实现 |
src/mcp/ | MCP(Model Context Protocol)工具调用系统 |
src/audio/ | 音频编解码、重采样、WebRTC VAD 等底层音频处理 |
admin_ui/ | React/Node.js 前端的 Admin 管理界面 |
local_ai_server/ | 本地 AI 服务(Whisper.cpp/Piper/Kokoro 等),独立容器运行 |
config/ | YAML 配置文件 + 6 套 Golden Baseline 预设 |
engine.py 是整个系统的入口文件,协调 ARI(Asterisk Rest Interface)客户端、WebSocket 连接、各个 Pipeline 组件,以及会话状态管理。src/core/SessionStore 负责维护呼叫生命周期内的状态,ConversationCoordinator 协调对话流程,PlaybackManager 处理流式音频播放(支持降级到文件模式)。
PipelineOrchestrator 采用工厂模式设计,通过配置文件动态解析 STT/LLM/TTS 三组件的组合,支持热插拔切换不同厂商。代码质量方面,项目使用 Pydantic 进行配置验证(pydantic>=2.13.3),有完整的类型注解,测试覆盖率通过 .coveragerc 管理,还提供了 Prometheus 格式的 /metrics 端点用于监控。
AVA 的部署体验在开源项目中属于上乘水准。核心 docker-compose.yml 采用 host 网络模式(network_mode: host),直接绑定宿主机网络栈,这对于 Asterisk 音频传输的低延迟要求至关重要。
Dockerfile 采用 多阶段构建(Stage 1: builder 编译依赖,Stage 2: slim 运行镜像),最终镜像基于 python:3.11-slim-bookworm,非 root 用户运行,安全性较好。preflight.sh 脚本自动化处理环境变量生成和目录权限设置,降低了初始配置的门槛。
Admin UI(Next.js)是一个完全独立的 Docker 容器,通过 Setup Wizard 引导用户配置 AI 提供商、测试通话。系统还提供 docker-compose.gpu.yml(CUDA 加速本地推理)和 docker-compose.local-core.yml(本地核心服务)等多个 overlay 文件,适配不同部署场景。
图2:AVA 项目吉祥物
尽管设计精良,AVA 的实际落地仍存在一些挑战:
• 平台限制:仅支持 x86_64 Linux 架构,不支持 ARM64(Apple Silicon、树莓派用户无法原生运行) • Asterisk 强依赖:必须有一个运行中的 Asterisk 18+ 实例,对于仅想体验 AI 通话的用户来说门槛较高 • 全本地部署门槛:完全本地模式需要 4+ 核 CPU + 8-16GB RAM + 5GB 磁盘,GPU 模式还需要 NVIDIA GPU • 延迟敏感性:语音通话对延迟极为敏感(<2s 为佳),纯 CPU 模式下 5-15s 的延迟基本无法用于实际通话场景 • 14 个 open issues:项目活跃度高,但也意味着维护压力较大,部分 issue 可能涉及边缘场景的兼容性问题
AVA 代表了开源 AI 语音代理领域的一个重要趋势——模块化 + 配置优先。传统的商业语音 AI 系统通常是紧耦合的专有方案,换一个 AI 厂商几乎等于重建整个系统。AVA 通过标准化的 Pipeline 抽象,让 STT/LLM/TTS 三者可以独立升级替换,大幅降低了技术迭代成本。
从数据来看,1064 Stars、224 Forks、14 个 open issues、MIT 许可证、Product Hunt 精选——这是一个健康活跃的开源项目。6 套 Golden Baseline 配置的存在说明项目已经过了大量真实生产环境的验证,不是纸上谈兵。对于有 Asterisk 基础设施的企业(呼叫中心、酒店、医疗预约等场景),AVA 无疑是一个值得认真评估的开源替代方案。