Patter Voice SDK
为 Python 和 TypeScript 电话 AI 代理提供可替换语音、模型与运营商的全栈 SDK。
按维度查看评分与理由
证据显示:README 明确说明遥测数据可选择性退出,且不收集敏感内容;依赖审计工作流存在但仅警告不阻塞;外部效果(如电话呼叫)需要用户提供凭证和配置。扣分:未提供最小权限原则的明确说明,用户确认机制未明确,敏感数据处理细节不足,回滚机制缺失,来源归属仅基于仓库元数据。
证据显示:README 和代码示例一致,依赖声明存在,但失败消息的具体内容未在提供的文件中展示。扣分:失败消息的详细性和可操作性不足。
证据显示:README 提供了多种使用场景(入站、出站、工具调用等),能力边界通过模式(Realtime/Pipeline/Hybrid)和提供商选择明确,触发条件(如 webhook)有示例,环境适配(本地隧道、生产 webhook)有说明。扣分:部分边界(如并发限制)未明确。
证据显示:README 结构清晰,安装说明明确,命名一致(getpatter),示例丰富,MIT 许可证明确。扣分:版本变更日志未提供,已知限制未明确列出,维护责任未明确。
证据显示:输出可用性高(提供 Python/TypeScript SDK 和模板),边际价值明显(替代 Vapi/Retell),成本效益合理(开源免费)。扣分:未提供性能基准或成本对比数据。
证据显示:README 中的声明(如 27+ 集成)未在提供的文件中得到验证,跨来源佐证不足,事实与推断未明确区分。扣分:缺乏可验证的细节。
- 遥测数据虽可退出,但默认开启,需注意隐私合规。
- 依赖审计仅警告不阻塞,可能存在未修复的已知漏洞。
- 未提供回滚机制,升级后出现问题难以恢复。
- 版本变更日志缺失,难以追踪破坏性变更。
这个 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 技术栈的构建者;所给材料未提供逐项功能或价格对比。
常见问题
Patter 是否绑定某一家模型或电话运营商?
运行前必须准备什么?
本地开发是否需要先部署公网服务?
tunnel=True 会创建 Cloudflare quick tunnel 并将号码指向本地服务;README 也说明可在终端模拟完整通话。模型供应商在通话中失败会怎样?
是否会发送通话内容作为遥测?
telemetry=False、getpatter telemetry disable、PATTER_TELEMETRY_DISABLED=1 或 DO_NOT_TRACK=1 关闭遥测。