挑战
构建生产级语音 AI 助手带来了独特的实时工程挑战:
- 延迟 — 传统的 speech-to-text → LLM → text-to-speech 管道会增加 3-5 秒的延迟,打断对话流畅性
- 函数调用 — 助手需要在对话中执行领域逻辑(营养计算、膳食计划调整),而不仅仅是聊天
- 音频流 — 双向音频需要持续流动,不能有缓冲间隙或回声问题
- 上下文感知 — 助手需要在对话轮次中维护对话上下文,同时处理中断
- 多语言 — 用户使用不同语言对话,并期望获得相同语言的回复
- 会话隔离 — 每个语音会话都需要独立的会话状态管理,避免串扰
我们的解决方案
我们构建了一个实时语音 AI 助手,由 Google 的 Gemini Live API 提供支持,具备原生音频功能、用于领域特定计算的自定义函数调用,以及一个基于 WebSocket 音频流的 React 前端。
架构
- AI 模型: Gemini,具备原生音频输入/输出和函数调用功能
- 后端: Python/FastAPI,带有用于双向音频的 WebSocket 端点
- 音频管道: PyAudio,用于麦克风/扬声器 I/O 和实时流媒体
- 前端: React,结合 Vite 和 Tailwind CSS,用于会话控制 UI
- 通信: WebSocket,用于低延迟 JSON 消息传递和二进制音频传输
- 多模态: 可选的摄像头和屏幕捕获,用于视觉上下文
实时音频管道
双向流媒体
系统在两个方向上保持连续音频流:
- 输入: 以 16kHz 单声道捕获麦克风音频,分块成小帧,并实时流式传输到 AI 模型
- 输出: 接收 AI 生成的 24kHz 语音,并立即通过扬声器播放
- 无批处理: 音频块在捕获后即发送 — 无累积延迟
- 中断处理: 用户可以在助手回复过程中自然地中断
音频处理
- 输入和输出均采用 16 位 PCM 格式
- 针对语音优化的独立采样率(16kHz 捕获,24kHz 播放)
- 小缓冲区大小,以实现最小延迟
- 连续流式传输,轮次之间没有开始/停止的间隙
函数调用集成
工作原理
当需要领域特定计算时,AI 模型可以在对话中调用本地 Python 函数:
- 用户发出请求(例如,“我今天错过了午餐”)
- AI 模型转录并理解意图
- 模型确定需要函数调用并发送结构化请求
- 后端提取函数名称、参数和调用 ID
- 本地函数执行领域计算
- 结果以结构化响应的形式发送回模型
- 模型生成包含结果的自然语言语音回复
领域函数
系统支持针对以下场景的以营养为重点的函数调用:
- 漏餐 — 将漏掉的宏量营养素重新分配到剩余餐次中
- 计划外食物 — 调整即将到来的餐次以弥补意外摄入
- 膳食替换 — 在保持宏量目标的同时交换食材
- 活动追踪 — 估算卡路里消耗并调整营养缓冲
每个函数都使用一个包含每种食物营养概况的宏量数据库,并进行动态计算,略带随机变化,以产生更自然的响应。
执行安全
- 在函数执行期间暂停麦克风输入以防止重叠
- 丢弃待处理的音频帧以避免陈旧上下文
- 如果函数执行失败,则优雅地返回错误响应
- 函数完成后立即恢复正常流式传输
后端架构
FastAPI WebSocket 服务器
- 用于所有客户端通信的单一 WebSocket 端点
- 会话生命周期管理(启动、停止、ping/pong 健康检查)
- 一次一个活动会话,带有会话锁定
- 用于开发环境的 CORS 中间件
- 用于监控的健康检查端点
会话管理
- 客户端连接时创建会话,并选择模式(仅音频、摄像头或屏幕)
- 后台异步任务并发处理音频捕获、处理和播放
- 优雅断开连接并清理资源
- API 密钥验证和错误传播
多模态输入(可选)
除了语音,系统还支持可选的视觉上下文:
- 摄像头模式 — 流式传输网络摄像头帧(1fps),用于对话中的视觉上下文
- 屏幕模式 — 捕获屏幕内容,用于讨论屏幕信息
- 图像在传输前进行大小调整和压缩
- 视觉上下文增强了 AI 提供相关响应的能力
前端界面
- 会话控制 — 通过清晰的状态指示器启动/停止监听
- 状态显示 — 实时连接和会话状态(空闲、连接中、活动、错误)
- 主题支持 — 具有持久性的亮/暗模式
- 引导式演练 — 针对首次用户提供分步演示
- WebSocket 管理 — 自动重连逻辑
AI 模型配置
- 原生音频模态(无独立的 STT/TTS 管道)
- 可从多个预设声音中选择配置声音
- 定义助手个性、回复风格和语言处理的系统指令
- 所有可用函数的工具定义,带有参数 schema
- 自动语言检测并提供同语言回复
主要功能
- 亚秒级延迟 — 原生音频模型消除了 STT/TTS 管道开销
- 实时双向音频 — 连续流式传输,每块延迟 < 50ms
- 函数调用 — 在对话中执行领域特定计算
- 自然中断 — 用户无需特殊指令即可自然地中断助手
- 多语言 — 自动语言检测并提供同语言回复
- 多模态输入 — 可选的摄像头和屏幕上下文,用于视觉理解
- 会话管理 — 带有锁定和资源清理的会话生命周期控制
- 宏量计算 — 基于每种食物宏量概况的动态营养调整
- 错误恢复 — 优雅处理函数失败和网络中断
- 可扩展性 — 通过定义 schema 和处理程序添加新功能 — 无需更改架构
成果
技术栈
常见问题
MicrocosmWorks 设计了一个双向 WebSocket 音频管道,该管道将用户语音以实时分块的形式传输到 ASR 引擎,在用户说完之前,利用流式转录开始 LLM 推理,并在响应的第一个 token 上启动文本转语音合成。这种流水线方法实现了从语音结束到第一个音频输出低于 800 毫秒的响应延迟,用户认为这是一种自然的对话轮流。
MicrocosmWorks 集成了结构化函数调用,在此 LLM 可以基于对话上下文调用预定义的 APIs,例如预订约会、查询数据库或触发工作流,并将结果自然地语音反馈给来电者。该系统包含用于高风险操作(如支付或取消)的确认流程,助理会口头确认详细信息,并在执行前等待来电者的明确批准。
是的,MicrocosmWorks 实现了抢话检测(barge-in detection),允许呼叫者在助手响应中途打断,立即停止音频播放并处理新的话语。ASR 流水线包括噪音消除预处理,并支持在多种口音上进行微调的模型,在通常来自汽车、办公室或公共场所的电话通话所特有的嘈杂环境中,实现了超过 90% 的转录准确率。
MicrocosmWorks 构建了语音助手,具有 SIP 中继集成和 Twilio 连接功能,支持部署到现有企业电话号码、IVR 系统和联络中心平台,无需呼叫者安装任何应用程序或使用特殊界面。该平台处理呼叫路由、队列管理以及当 AI 判断对话需要人工专业知识时,向人工座席的暖线转接。
MicrocosmWorks 以每小时 $30-$50 的费率开发定制的语音 AI 助手,虽然前期构建成本超过托管平台的设置费用,但定制解决方案可以避免 Dialogflow CX 或 Amazon Lex 等平台收取的按分钟计费的使用费,这些费用在高呼叫量时会变得非常可观。定制构建还让您完全控制 LLM、语音角色和函数调用逻辑,而托管平台则受限于僵化的对话流范式。
