Hotdry.
ai-systems

使用 Azure/OpenAI 构建 API 驱动的外呼 AI 代理:语音合成、ASR 与无服务器电话路由

基于 Microsoft Call-Center-AI 开源项目,实现 API 触发的外呼 AI,支持实时 STT/TTS、RAG 增强与 serverless 部署的关键参数与监控要点。

在客服和 IT 支持场景中,构建 API 驱动的外呼 AI 代理是提升效率的关键。通过 Microsoft 的开源项目 Call-Center-AI,可以无缝集成 Azure Communication Services、Cognitive Services 和 OpenAI GPT,实现从单一 API 调用发起的智能外呼,支持语音合成(TTS)、自动语音识别(ASR)以及电话路由管理,尤其适用于 serverless 架构下的弹性扩展。

核心架构与集成要点

该方案采用全 serverless 设计,核心是 Azure Container Apps 作为应用主机,处理实时对话流。电话接入通过 Azure Communication Services 实现,支持 inbound/outbound calls 和 SMS,用户只需购买一个支持 voice 的电话号码,即可配置 bot 接听或主动外呼。语音处理链路为:ASR(Speech-to-Text)将用户语音转为文本 → OpenAI GPT(gpt-4o-nano 或 gpt-4o)生成响应并调用工具 → TTS(Text-to-Speech)合成语音输出。全链路支持流式传输,避免延迟累积。

关键集成参数:

  • Communication Services:创建资源组后,启用系统托管身份(System Managed Identity),购买号码时选择 inbound/outbound + voice(SMS 可选)。连接字符串存入 config.yaml 的 communication_services.connection_string
  • Cognitive Services:部署 Speech 服务,选择实时 STT($1 / 小时)和标准 TTS($15 / 百万字符)。配置 speech.regionspeech.key,支持多语言如 fr-FR-DeniseNeural 或自定义神经语音(Custom Neural Voice)。
  • OpenAI:使用 Azure OpenAI 部署 gpt-4o-nano(低成本、高速)和 gpt-4o(insights)。端点如 llm.fast.endpoint: https://xxx.openai.azure.com/openai/deployments/gpt-4o-nano/chat/completions?api-version=2024-10-21。启用 RAG 通过 AI Search 索引自定义知识库(schema: answer/context/vectors 等,1536 维 ADA embedding)。
  • 存储与缓存:Cosmos DB 存对话 /claim(多区域写 RU/s ~1k),Redis 缓存历史上下文,Azure Storage 存录音 / 声音文件。

部署使用 Bicep IaC:make deploy name=my-rg-name,自动创建 Event Grid、Queues 和 App Configuration。feature flags 如 recording_enabled: true 可动态控制录音、slow_llm_for_chat: false 优先快模型。

API 驱动外呼实现

外呼通过 POST /call API 触发,JSON payload 定义 bot 身份、目标号码、任务和 claim schema。示例:

{
  "bot_company": "Contoso",
  "bot_name": "Amélie",
  "phone_number": "+11234567890",
  "task": "Help the customer with their digital workplace...",
  "agent_phone_number": "+33612345678",
  "claim": [{"name": "hardware_info", "type": "text"}, {"name": "first_seen", "type": "datetime"}]
}

bot 会主动拨打 phone_number,收集 claim 数据(如文本 / 日期 / 邮箱),生成 to-do list 和 reminders,支持人类转接(transfer to agent_phone_number)。对话实时存储 Cosmos DB,报告访问 /report/{phone_number} 查看历史、claim 和合成总结。

如 repo 所述,“Conversations are streamed in real-time to avoid delays, can be resumed after disconnections”。这确保断线续传:Event Grid 捕获事件推入 Queues,重连时从 Redis 恢复上下文。

自定义 schema 支持 textdatetimeemailphone_number,验证 E164 格式。任务描述用英文,注入 LLM prompt,避免复述新闻。

可落地参数与监控清单

为 serverless 优化,提供以下阈值参数(App Configuration,TTL 60s 刷新):

参数 默认值 建议调优 作用
answer_hard_timeout_sec 15 10-20 LLM 硬超时,避免卡死
answer_soft_timeout_sec 4 3 软超时,播报 “稍等”
phone_silence_timeout_sec 20 15-25 静默警告
vad_silence_timeout_ms 500 400 语音活动检测(VAD)静默阈值
vad_threshold 0.5 0.4-0.6 VAD 敏感度
recognition_retry_max 3 2-4 STT 重试
callback_timeout_hour 3 1-4 回调超时

监控集成 Application Insights:追踪 call.answer.latency(用户说完到 bot 回应时延)、call.aec.droped(回声消除失败)、LLM tokens/latency(OpenLLMetry)。自定义指标如 RU/s 使用率、STT/TTS 字符数。阈值告警:latency > 2s、RU > 80% 触发缩放。

成本控制:1000 通 10min 通话~$720 / 月,主因 Cosmos ($233)、Speech ($152)、Container Apps ($160)。优化:PTU 预热 OpenAI(减半 TTFT)、采样日志(Monitor $0.645/GB)、Basic AI Search($74)。

回滚策略:feature flags 灰度(如 vad_threshold A/B 测试)、镜像 tag 指定(如 image_version: 0.1.0)、多区域 Cosmos。安全:Content Safety 过滤(0-7 阈值)、PII 匿名、RAG grounding。

工程化实践与扩展

本地开发:make install + make tunnel 用 Dev Tunnels 暴露端口,local.py 无电话模拟测试。生产前补测试覆盖、vNET、私有端点、Red team。

扩展:fine-tuning 用历史通话(匿名后),A/B App Configuration;IVR 回调、Twilio SMS fallback。该方案小时级定制 bot,适用于保险 / IT / 客服,平衡成本与智能。

资料来源:Microsoft Call-Center-AI GitHub repo(https://github.com/microsoft/call-center-ai),包含完整 README、config 示例与 Bicep 模板。成本基于 2024-12 估算,实际依区域 / 负载调整。

查看归档