Patter Voice SDK
为 Python 和 TypeScript 电话 AI 代理提供可替换语音、模型与运营商的全栈 SDK。
这个 Agent 能做什么,适合哪些场景?
Patter 是一个开源 SDK,用于把应用中的 AI 代理连接到电话网络,并处理代理循环、语音识别、语音合成、实时语音、音频处理和运营商接入。它提供 Python 与 TypeScript 两套接口,README 声明二者具备相同的 API 表面、钩子和事件。开发者可按层选择 LLM、STT、TTS、实时引擎、电话运营商以及音频组件,并以 Realtime、Pipeline 或 Hybrid 模式组合。服务可通过 `phone.serve()` 启动;本地开发可启用 Cloudflare quick tunnel,生产环境则使用静态 `webhook_url`。
应用先以 Patter 创建电话接入,例如 Python 中的 Patter(carrier=Twilio(), phone_number="+15550001234"),再用 phone.agent() 配置 OpenAIRealtime、system_prompt 和 first_message。随后调用 await phone.serve(agent, tunnel=True),SDK 会启动代理服务,并在启用隧道时创建 Cloudflare quick tunnel、把号码指向该服务。Patter 将通话在电话运营商、语音组件和模型之间编排;可选运营商包括 Twilio、Telnyx 与 Plivo。它还记录供应商无关的 OpenTelemetry 调用追踪,并提供中途故障切换的 LLM fallback chain。
- 需要用 Python 或 TypeScript 为餐厅预订场景接听来电的团队,可基于 Inbound Agent 模板构建电话接待员。
- 需要拨打外呼电话、处理 AMD 并投递语音留言的业务团队,可采用 Outbound Calls 模板。
- 已有 Twilio 号码、但希望把实时语音引擎替换为 `OpenAIRealtime`、Gemini Live、Ultravox 或 ElevenLabs ConvAI 的开发者。
- 需要在通话中查询 CRM 或创建工单的集成开发者,可使用 webhook tools 对接自己的后端。
- 需要把 Deepgram STT 与 ElevenLabs TTS 等不同供应商组合进电话代理的团队,可使用 Pipeline 模式。
- 希望在本机验证完整通话流程、暂时不接入实体电话的开发者,可从终端模拟通话。
这个 Agent 有哪些优点和局限?
- 将 LLM、STT、TTS、实时引擎、电话运营商和音频处理明确拆层,可分别替换供应商。
- Python 与 TypeScript 都提供 SDK,README 声明二者的接口、钩子和事件保持一致。
- 支持 Twilio、Telnyx 和 Plivo,并将工具调用、转接和 guardrails 设计为跨运营商一致的行为。
- 提供 Realtime、Pipeline、Hybrid 三种组合方式,以及通话中的 LLM fallback chain。
- 内置本地隧道、终端通话模拟和供应商无关的 OpenTelemetry 追踪。
- 实际运行依赖外部模型、语音和电话运营商的账户及环境变量凭据。
- 本地 `tunnel: true` 使用 Cloudflare quick tunnel;生产部署需要配置静态 `webhook_url` 或使用 ngrok。
- README 未说明各供应商的价格、计费聚合方式或完整的生产容量限制。
- 遥测默认收集匿名 SDK、供应商/模型分桶及通话事实数据,虽然可通过配置、CLI 或环境变量关闭。
- 文档虽列出 27+ 集成,但所给材料未逐项描述每个集成的配置差异与功能覆盖度。
如何安装或部署这个 Agent?
选择一种 SDK:TypeScript 运行 npm install getpatter;Python 运行 pip install getpatter。Python 需要 3.11+,TypeScript 需要 5.0+。在环境变量中提供所选供应商和运营商的凭据,例如 Twilio 的 TWILIO_ACCOUNT_SID 与 OpenAI 的 OPENAI_API_KEY;完整变量目录由项目文档列出。
如何使用这个 Agent?
Python 最小调用:from getpatter import Patter, Twilio, OpenAIRealtime;创建 phone = Patter(carrier=Twilio(), phone_number="+15550001234");用 phone.agent(engine=OpenAIRealtime(), system_prompt="You are a friendly receptionist for Acme Corp.", first_message="Hello! How can I help?") 创建代理;最后执行 await phone.serve(agent, tunnel=True)。tunnel=True 适合本地开发;生产环境改用静态 webhook_url。
这个 Agent 与同类方案有什么区别?
项目将自身定位为 Vapi 和 Retell 的替代方案,面向希望自行掌控语音 AI 技术栈的构建者;所给材料未提供逐项功能或价格对比。