发布于 2026-01-06 5 阅读
0

我开发了一个语音AI代理来清理我的电子邮件、会议记录和Slack私信(使用Composio、Vapi和OpenAI TTS)🪄

我开发了一个语音AI代理来清理我的电子邮件、会议记录和Slack私信(使用Composio、Vapi和OpenAI TTS)🪄

我是来自外世界的声音!我将引领你走向天堂。

保罗·阿特雷德斯将声音作为控制和支配的工具。想象一下,用这种声音来操控人工智能代理。我们使用ComposioVapiOpenAI 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 的可视化差异比较功能,从而更好地控制和查看所做的更改。


香料的流向

语音代理架构

  1. 用户 → Vapi 小部件:用户点击“与助手对话”开始语音会话。
  2. 小部件 → LLM:该小部件发起呼叫,从 vapiToolsConfig 发送系统提示、模型、语音和工具目录以及具体的服务器 URL。
  3. LLM → 小部件:LLM 将语音和最终转录文本流式传输回来;小部件更新说话/听力指示器和转录用户界面。
  4. LLM → API 路由:当需要执行操作(例如,发送电子邮件)时,LLM 会触发工具调用:向匹配的 /api/tools/... 路由发送 HTTP POST 请求。
  5. API 自工作(路由助手):该路由提取 toolCallId 和参数,与 30 秒超时时间竞争执行,并将错误/成功规范化为 Vapi 的预期响应形状。
  6. API → Composio:该路由调用 lib/composio.ts 中的相关包装器,该包装器调用composio.tools.execute (...)。
  7. Composio → Provider:Composio 与 Gmail/Calendar/Slack API 通信并返回 ComposioToolResult。
  8. API → LLM:API 返回 { results: [{ toolCallId, result }] }。LLM 接收此结果,并使用更新后的上下文继续对话。
  9. 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