我开发了一个语音AI代理来清理我的电子邮件、会议记录和Slack私信(使用Composio、Vapi和OpenAI TTS)🪄
我是来自外世界的声音!我将引领你走向天堂。
保罗·阿特雷德斯将声音作为控制和支配的工具。想象一下,用这种声音来操控人工智能代理。我们使用Composio、Vapi和OpenAI TTS构建了一个人工智能代理,并将其与 Gmail、Slack 和 Google 日历集成。它可以摘要邮件、安排会议并搜索 Slack 消息。从此,你的晨间例行工作将变得轻松无压力。
整个程序都是使用 Cursor IDE 中的 Claude Code 构建的。
阿拉基斯的问题
每天早上查看 Slack 和 Gmail 是我每天的例行公事,但要在半梦半醒间理解每条信息,简直比游泳还费劲。语音助手完美解决了这个问题——你可以一边泡咖啡,一边让它们总结要点、解释复杂的邮件往来,或者深入探讨具体细节。下面的截图也表明,我并非唯一面临这个问题的人。
香料的培育
我最初用 Next.js 开发了一个应用,但很快就遇到了延迟瓶颈,这几乎是所有语音项目都会遇到的问题。语音交互需要流畅的对话体验——与文本界面不同,用户在文本界面上可以容忍等待,但语音代理必须即时响应,否则用户体验就会大打折扣。我最初的想法非常幼稚:语音转文本 (STT) → 语言学习模型 (LLM) → 工具调用 → 文本转语音 (TTS)。这种顺序处理方式意味着每次命令执行后都会有 3-5 秒尴尬的沉默。
后来我发现了 Vapi,它能优雅地处理整个语音流程——并行处理、模型切换、自动中断处理。它把我的笨拙原型变成了真正像对话一样自然的东西。
对于集成而言,Composio 是显而易见的选择——它抽象化了 OAuth 的复杂性,并为您提供与 Gmail、日历和 Slack 的干净、可靠的连接,而无需为每个 API 编写样板代码。
在开发方面,我确信在 Cursor 中运行 Claude Code 是最佳方案。在终端中单独运行 Claude Code 缺乏完善的差异比较功能——你只能盲目地查看文件更改。单独使用 Cursor 的用户体验很好,但代码生成能力较弱。而将 Claude Code集成到Cursor 中呢?你既能享受到 Claude 强大的编码能力,又能体验到 Cursor 的可视化差异比较功能,从而更好地控制和查看所做的更改。
香料的流向
- 用户 → Vapi 小部件:用户点击“与助手对话”开始语音会话。
- 小部件 → LLM:该小部件发起呼叫,从 vapiToolsConfig 发送系统提示、模型、语音和工具目录以及具体的服务器 URL。
- LLM → 小部件:LLM 将语音和最终转录文本流式传输回来;小部件更新说话/听力指示器和转录用户界面。
- LLM → API 路由:当需要执行操作(例如,发送电子邮件)时,LLM 会触发工具调用:向匹配的 /api/tools/... 路由发送 HTTP POST 请求。
- API 自工作(路由助手):该路由提取 toolCallId 和参数,与 30 秒超时时间竞争执行,并将错误/成功规范化为 Vapi 的预期响应形状。
- API → Composio:该路由调用 lib/composio.ts 中的相关包装器,该包装器调用composio.tools.execute (...)。
- Composio → Provider:Composio 与 Gmail/Calendar/Slack API 通信并返回 ComposioToolResult。
- API → LLM:API 返回 { results: [{ toolCallId, result }] }。LLM 接收此结果,并使用更新后的上下文继续对话。
- LLM/小部件 → 用户:该小部件反映记录和 UI 状态中的新消息/结果。
跟随沙伊·胡鲁德
Claude Code 近期的表现令人沮丧,而且注意到其质量下降的并非只有我一人。尽管我提供了来自 Composio 和 Vapi 的详尽文档,它仍然不断回退到过时的 API 模式。我明确地向它演示如何使用 Vapi 特定的请求/响应模式来实现路由,它虽然表示理解,但随即又生成了使用已弃用方法的代码。它的调试过程简直滑稽可笑——修复一个错误,又制造三个新错误,然后坚持认为之前的修复完美无缺,却对新出现的问题视而不见。唯一值得庆幸的是,它对核心架构的理解非常到位,将 Composio 操作清晰地拆分到各个路由文件中,并用一个集中式的包装器进行封装。
UI 设计挑战揭示了 Claude Code 的另一个怪癖:如果没有明确的视觉指导,它每次都会默认使用相同的老套模板——醒目的主图、三个功能卡片,就此结束。语音界面的设计灵感出乎意料地难寻;大多数语音界面要么隐藏在唤醒词之后,要么将实际交互隐藏起来。幸运的是,Vapi 的文档中包含一个预置的语音组件,我可以将其直接导入 Claude Code 作为起点。
结果
该代理目前可在三个平台上处理九项核心操作:Gmail(获取、发送和草稿)、Slack(创建频道、列出对话和发送消息)以及 Google 日历(创建活动和查找冲突)。每项操作的执行延迟均低于 500 毫秒——速度之快,足以确保对话流畅进行。
Composio 的真正强大之处在于其可扩展性。添加新工具只需几行配置,无需费力处理 OAuth 流程和 API 的各种细节。想用 Notion 做会议记录?用 Linear 创建任务?每添加一项功能,助手的功能都会呈指数级增长。其愿景很简单:将知识工作的机械部分简化为语音命令。
Vapi 的仪表盘可观测性在调试语音代理行为时非常有用,因为与文本不同,你无法直接深入了解语音代理的底层细节。指标和通话日志可以让你清晰地了解代理的行为。
接下来的路线图包括:支持 MCP(模型上下文协议),以实现更智能的工具协调;改进响应处理,使对话更加自然流畅,而非命令式响应;以及一个能够真正展现底层运行机制的用户界面。目前的界面虽然功能齐全,但它应该带来更神奇的体验——例如,为激活的工具提供视觉反馈,为操作提供置信度评分,并在确认之前预览即将发生的情况。基础已经打好,现在是时候让它大放异彩了。
文章来源:https://dev.to/composiodev/i-built-a-voice-ai-agent-to-clean-my-emails-meetings-and-slack-dms-composio-vapi-openai-tts-472b

