2025-11-26
人生最大的错误是不断担心会犯错。——亨利·福特
Call Center AI:用 Azure + OpenAI GPT 打造“能打电话、能接电话、能落地业务数据”的 AI 呼叫中心
项目地址:https://github.com/microsoft/call-center-ai
项目描述:Send a phone call from AI agent, in an API call. Or, directly call the bot from the configured phone number!
许可证:Apache-2.0
技术栈关键词:Azure Communication Services、Azure Cognitive Services(STT/TTS/Translation)、Azure OpenAI(gpt-4.1 / gpt-4.1-nano / Embedding)、Azure Container Apps、Cosmos DB、AI Search、Event Grid、Redis、Application Insights
当“AI 助手”从网页走向现实电话线,才真正具备“服务”的温度。Call Center AI 是一个面向电话客服场景的开源 PoC(概念验证):它既支持“AI 主动外呼”,也支持“用户拨打电话接入”。语音实时转写、LLM 智能对话、多语言、多音色、RAG 检索增强、通话录音、工单/理赔(claim)数据落库、质量回放/报告……这些你能想到的功能,这个项目都把“怎么做”教给你了。
下面,我们从“能做什么—怎么运行—如何定制—如何优化—成本与上线”五个角度,带你快速吃透这个仓库。
能做什么:业务功能与工程特性一图速览
- 入呼与出呼一体:开放 API 触发外呼;或直接拨打配置的电话号码与机器人对话
- 多语言/多音色:自动理解用户语言,支持配置多语 TTS 声音;可接入自定义神经音色(CNV)
- 两套 LLM 组合:gpt-4.1 与 gpt-4.1-nano;按场景平衡质量/成本/时延
- 对话与数据双落地:
- 结构化“claim/工单”字段(时间、设备、地点、联系方式等)写入数据库
- 对话消息流、下一步动作(next)、提醒(reminders)、长短摘要(synthesis)等全量记录
- 可观测与安全:
- 特性开关(Feature Flags)热更新、人工兜底转接、通话录音(可选)
- Application Insights 端到端遥测与 OpenLLMetry LLM 指标
- 云原生部署:
- Azure 上容器化、Serverless 弹性扩缩;事件驱动与消息中间件清晰解耦
- RAG 能力基于 AI Search + Embedding(ADA,1536 维)
项目 README 明确:这是一个 PoC。它演示了 Azure Communication Services、Azure Cognitive Services、Azure OpenAI 的组合方式,并提供了“从零到线上/本地”的完整路径。
现场感:官方演示与数据存证
- Demo(法语):https://youtube.com/watch?v=i_qhNdUUxSI
演示了用户拨入、机器人应答、对话推进、数据写库(claim/todo/summary 等) - 呼叫结束“用户报告页”:
/report/[phone_number]
展示历史对话、提醒、理赔信息等,便于人工回看与复核
架构怎么搭:从“拨通”到“落库”的模块协作
高层视角(简化):
- User ↔ Communication Services ↔ App(Call Center AI)↔ Agent(人工)
- App 负责语音编解码/转写、LLM 推理、TTS 回传、数据落库、RAG 检索、事件编排
组件级视角(精要):
- 语音与通话:Azure Communication Services(通话/短信网关)
- 语音能力:Speech-to-Text、Text-to-Speech、Translation(认知服务)
- LLM:gpt-4.1 / gpt-4.1-nano(Azure OpenAI)
- 检索:AI Search + Embedding(ADA)
- 存储与缓存:Cosmos DB(会话与 claim 数据)、Redis(Cache)、Azure Storage(声音/队列)
- 事件流:Event Grid(Broker)+ Azure Queues(队列)
- 运维:Application Insights(Trace、LLM 指标、业务自定义指标)
这一组合基本覆盖了“实时语音—智能对话—结构化业务数据—可观测”的全链路要素。
三分钟上手:API 外呼与本地调试
1) 让机器人“打电话”给用户(外呼 API)
README 提供了一个直接易用的 POST /call 示例:你可以在后端系统中按需触发外呼,并传入本次任务的“公司名、机器人名、被叫号码、任务目标、claim 字段 schema”等参数。
1 | |
你可以按调用场景,动态改变 task(本次通话目标)与 claim(业务字段)。机器人在通话中将主动采集这些信息并写入数据库。
2) 本地快速验证(免电话流量)
项目提供了一个“本地测试脚本”,你无需拨打电话就能驱动对话逻辑:
1 | |
开发时:
1 | |
如果需要对接真实的入呼/外呼通道,本地也可以使用 Azure Dev Tunnels 暴露端口(独立终端常驻):
1 | |
上线也不难:Azure 快速部署
- 建议用 GitHub Codespaces 快速启动(README 提供一键入口)
- 基础工具:Azure CLI、yq、Make、bash/zsh 等;推荐 macOS 下
make brew一键装齐 - Azure 侧准备:
- 资源组(命名尽量简洁小写短横线)
- Azure Communication Services(开启系统身份)
- 电话号码(入/出呼、开启语音,短信可选)
部署(远程 Azure):
1 | |
说明:项目提供了已构建的容器镜像(ghcr),支持按分支/标签拉取,便于版本固定与回滚。
怎么“调性格”:语言、提示词、Schema、特性开关全可配
该项目把“场景定制”作为一等公民——全部集中在配置层,避免你直接去改 Prompt 源码。
1) 多语言 + 多音色(TTS)
支持多语言理解与音色选择;如接入 Azure Speech Custom Neural Voice(CNV),可为某语言指定自定义端点:
1 | |
自定义音色示例:
1 | |
2) 结构化“理赔/工单”字段(Claim Schema)
你可以为不同场景定义不同的数据字段,并强校验数据类型(datetime/email/phone_number/text):
1 | |
当然也可以在“单次外呼 API”中覆盖:
- 在
POST /call里传入claim字段数组(与上例结构一致)
3) LLM 背景与对话规则(Prompts)
所有提示词都模板化,变量 {bot_name}、{bot_company}、{phone_number} 等会在运行时自动替换。示例(节选):
1 | |
4) 特性开关(Feature Flags)
无需重启即可通过 App Configuration 动态生效(默认 60s 刷新),包括但不限于:
answer_hard_timeout_sec(默认 15)answer_soft_timeout_sec(默认 4)phone_silence_timeout_sec(默认 20)recognition_retry_max(默认 3)recording_enabled(默认 false)vad_*一系列语音端点检测阈值/时延
开启通话录音:创建存储容器(如 recordings)→ 将
recording_enabled=true
5) Twilio 短信(可选)
如需 SMS 通知/跟进,可切换至 Twilio:
1 | |
加一把“知识火”:RAG 数据与向量索引
- 索引字段(节选):question / answer / context / created_at / file_path / vectors(1536 维,OpenAI ADA)
- 配套“索引构建”工具仓库:Synthetic RAG Index(README 已给出链接)
- 使用场景:在通话过程中按需检索领域知识,为 LLM 对话提供“可溯源背景”
时延与稳定性:怎么“更快、更稳、更可观测”
时延优化(README 提示)
- 语音 in/out 已是流式;长延迟主要来自 LLM“首 token 等待”
- 可选用更快模型(如 gpt-4.1-nano;项目新版本默认倾向较快模型),或做 PTU/推理优化
- 用 Application Insights 观测端到端瓶颈
监控可观测
- Application Insights:Trace、依赖调用、数据库查询、外部服务、LLM Metrics(延迟、token 用量、Prompt 内容、原始响应)
- 自定义指标示例:
call.aec.droped:回声消除完全丢音次数call.aec.missed:回声消除未及时去除回声次数call.answer.latency:用户结束说话到机器人开始说话的时间
这要花多少钱:README 提供的“估算模型”
以“每月 1000 次通话,每次 10 分钟”为例(2024-12-10 的美元价格估算,可能变化):
- 基本项合计约 $720.07/月($0.12/小时),覆盖 Communication Services、OpenAI(gpt-4.1/4.1-nano/Embedding)、Container Apps(Serverless vCPU/内存)、AI Search、AI Speech、Cosmos DB
- 可选项(录音、监控等)约 $343.02/月
- 生产建议:私网/专线、vNET、合规安全,会额外提升成本
建议将“通话频率、对话轮数、平均发声时间、RAG 片段长度、日志采样率”等变量纳入自己的成本模型持续观测。
生产可用性:Checklist(README 节选)
- 质量:单测/集测覆盖、可复现实验
- 可靠性:可复现构建、Trace/Telemetry、运行手册
- 可维护性:静态检查、服务解耦(Assistant 与 Insights)、多人评审
- 韧性:IaC、多区域部署、性能测试
- 安全:构建签名、CodeQL、GitOps、私网、红队演练
- 负责任 AI:有害内容检测、Grounding 检测、社会影响评估
PoC 的意义是“把路打穿”,真正上生产要把上述项逐一补齐。
从“看得到”到“做得到”:一份可复用的小清单
- 快速打样:Codespaces →
make install→make dev→python3 -m tests.local - 对接业务:用
POST /call按场景传入 task/claim 定制一次通话的目的与字段 - 多语言:在
config.yaml中配置多语言短码、音色,必要时接入 CNV - 数据侧:使用默认 claim schema 起步,稳定后按领域扩展;引入 AI Search 做 RAG
- 可观测:先接 Application Insights 与自定义指标,再做优化
- 成本:先按 README 的估算模型做“粗预算—上线后再校准”的闭环
结语
Call Center AI 把“打电话这件事”做成了工程化的“能力组合”:通话通道、语音识别/合成、多语言、多轮智能、RAG 背景、结构化落库、质量回放、可观测与成本意识。它不是一个“开箱即商用”的产品,而是一份“能跑起来、可快速定制、可被生产化”的路线图。
如果你要做:
- 客服热线/理赔报案/IT 帮助台/预约回访/售后关怀
- 多语言、跨时区、弹性峰谷的语音服务
- “能沉淀数据、能形成洞察、能持续优化”的 AI 呼叫体验
那么,这个仓库会是你极具价值的起点。
祝你调好“语音线”和“成本线”,让业务和体验一起跑起来 🎧📞🚀