[控场AI]
· 6 分钟阅读· 3,170 字

用Python打造实时语音助手Jarvis:MCP工具全接入

用Python打造实时语音助手Jarvis:MCP工具全接入

开发者用Python、Agora与MCP构建可操作日历、待办和邮件的开源实时语音助手。

文章介绍了开发者Mike构建的一个可复现的实时语音助手项目。该项目以Agora作为语音引擎,统一处理语音转文本、文本转语音与LLM调度,后端采用Python并通过MCP协议将Google日历、Google Sheets、Notion待办和IMAP邮箱接入LLM工具链。Mike先以内存待办工具跑通最小闭环,再逐步接入各外部服务,并演示了服务账号认证、页面共享等配置细节。模型、TTS语音和系统提示词均可自定义,前端则借助Claude Code在约20分钟内完成重设计。测试中助手基本可用,但暴露了表格格式错位和日历标题硬编码等问题。项目开源、扩展性强,任何提供API的服务都能以相同模式接入。

从演示到可复现:一个能管理日程、待办与邮件的语音助手

在YouTube上,开发者Mike展示了一个自己构建的实时语音助手——它不仅能流畅对话,还能直接操作Google日历、Google Sheets、Notion待办和IMAP邮箱。更关键的是,整个项目用Python后端和Agora语音引擎搭建,代码开源且可完全自定义。据Mike在视频中的演示,他通过语音指令成功添加了日历事件、记录了工作时间、勾选了Notion待办,甚至读取了收件箱邮件。这并非一个玩具Demo,而是一个可扩展的个人助理框架。

语音助手交互界面

技术栈拆解:语音引擎、LLM与MCP工具链

Agora作为实时语音引擎

项目的核心是Agora提供的语音能力,它统一处理语音转文本、文本转语音以及LLM推理调度。Agora的软件定义实时网络(SDRTN)通过全球600多个节点选择最优路径,而非走公共互联网,从而实现极低延迟的实时通信。Mike在视频中坦言Agora是赞助商,但强调其免费额度包含300分钟对话AI时长,足以完成原型验证。

SDRTN(Software-Defined Real-Time Network,软件定义实时网络)是Agora自建的全球分布式网络架构。与传统依赖公共互联网的RTC方案不同,SDRTN在全球部署了数百个边缘节点,通过实时探测网络质量动态选择最优传输路径,从而绕过公共互联网的拥塞点和抖动区域。这种架构对语音助手至关重要:语音交互对端到端延迟极为敏感,通常超过300毫秒就会明显破坏对话的自然感。SDRTN通过私有骨干网传输媒体流,在中美、欧亚等跨区域场景下可显著降低丢包率和抖动,是Agora宣称低延迟体验的底层技术支撑。

Python后端与MCP协议

后端采用Python,通过Agora CLI的Python模板初始化项目。所有工具集成均基于MCP(Model Context Protocol)——一个让LLM安全调用外部服务的标准协议。项目结构清晰:server目录下包含agent.py(模型配置)和server.py(FastAPI服务),新增的tools.py则负责定义MCP工具。

配置MCP端点

MCP(Model Context Protocol)是Anthropic于2024年底提出的开放协议,旨在标准化LLM与外部工具、数据源之间的连接方式。其核心思想类似“AI应用的USB-C接口”:LLM作为客户端,通过统一的JSON-RPC消息格式与MCP服务器通信,服务器则封装具体工具(如查询日历、发送邮件)的调用细节。MCP服务器可声明工具的名称、描述和输入参数模式(schema),LLM据此决定何时调用哪个工具以及如何构造参数。这种解耦设计使得同一套工具可以被不同模型和客户端复用,也大幅降低了为LLM集成新服务的开发成本,是当前Agent工具链生态的重要基础设施。

工具集成实战:从内存待办到Google服务

先跑通最小闭环

Mike建议先实现两个内存中的MCP工具:添加待办和列出待办。通过fastMCP类创建服务实例,并禁用传输安全设置中的重绑定保护,以便用ngrok暴露本地服务供Agora调用。他特别提醒:这仅用于演示,生产环境必须使用正规服务器和MCP工具。

MCP的传输安全设置中,重绑定保护(DNS rebinding protection)用于防范一类攻击:恶意网页通过DNS重绑定让浏览器访问本地服务(如localhost上的MCP服务器),从而绕过同源策略。在本地开发时,通过ngrok等工具将本地端口暴露到公网,请求的来源Host会变化,可能触发该校验而导致调用失败,因此演示中会临时禁用。生产环境中应保持该保护开启,并通过配置允许的Host白名单或部署在受控域名下来兼顾安全与可用性,而非简单关闭防护。

接入Google Sheets与Calendar

在GCP控制台启用Sheets API和Calendar API后,创建服务账号并下载JSON密钥。将表格和日历共享给该服务账号邮箱,即可通过google-api-python-client和google-auth库进行认证。代码中通过service_account.Credentials.from_service_account_file加载凭证,再构建calendar和sheets客户端。

Google服务账号(Service Account)是一种专为非人类用户设计的机器身份,常用于服务器间认证。它拥有独立的邮箱地址(形如 xxx@项目名.iam.gserviceaccount.com),通过下载的JSON密钥文件进行签名认证,无需OAuth的用户授权跳转流程。使用服务账号访问Google Sheets或Calendar时,关键一步是将目标表格或日历的权限显式共享给该服务账号邮箱,否则API会返回403权限错误。这种方式适合后端自动化场景,但无法代表终端用户身份操作,因此若需访问用户私人数据,仍需结合OAuth 2.0授权流程。

Notion与IMAP的对接

Notion通过官方客户端连接,需在Notion页面中添加连接并获取API token。邮箱则使用标准IMAP协议,通过imaplib连接收件箱并读取邮件。Mike在视频中演示了因未共享Notion页面而导致工具调用失败,随后修正权限的过程——这恰恰说明了MCP工具调试的典型路径。

安装依赖包

模型与语音的自定义:让助手拥有个性

默认配置使用GPT-4o mini作为LLM,MiniMax TTS作为语音合成。Mike认为默认模型不够聪明,将其切换为GPT-4.5.1 mini,并更换了TTS模型和语音ID,使助手从女声“Ada”变为男声“Mike”。系统提示词也可修改,例如要求“极度简洁,尽量用几个词回答”以抑制冗长回复。

前端重设计:用AI Agent快速改头换面

Mike没有手动编写前端代码,而是启动Claude Code会话,要求其“重新设计整个应用,保持功能不变,改为橙黑配色,品牌名为Neural Nine Personal Assistant,风格极简、科技感、像素风”。约20分钟后,界面焕然一新。这展示了结合编码Agent时,个性化定制的边际成本极低。

与助手对话测试

测试与排错:真实场景下的表现

在最终测试中,助手能准确回答日历事件、添加新会议、在Sheets中记录时间段、勾选Notion待办并读取邮件。但也暴露了两个问题:一是Sheets条目格式错位,需在提示词中明确列顺序;二是日历事件标题因代码中硬编码字符串而显示为“the title”。Mike承认这是自己的编码失误而非架构缺陷。

扩展性:任何有API的服务都能接入

整个项目的价值在于其可扩展性。只要目标服务提供API或MCP服务器,就能以同样的模式接入——Slack、Linear、Evernote等均可。Mike强调,理解MCP工具的定义方式后,剩下的工作完全可以交给编码Agent批量完成。对于想构建个人AI助理的开发者,这是一个成本极低、路径清晰的起点。

#实时语音助手#Python Jarvis#MCP协议#Agora语音引擎#AI助理开发#Google日历集成#Notion MCP
分享:

相关推荐