概述
聊天界面主导了我们与 AI 的交互方式,但多模态 AI 的最新突破正在开辟令人兴奋的新可能性。高质量的生成模型和富有表现力的文本转语音(TTS)系统现在使构建感觉更像是对话伙伴而非工具的代理成为可能。 语音代理就是其中之一。您可以使用口语与代理交互,而不是依赖键盘和鼠标将输入输入代理。这可以是一种更自然、更吸引人的与 AI 交互的方式,在某些场景中特别有用。什么是语音代理?
语音代理是能够与用户进行自然口语对话的代理。这些代理结合了语音识别、自然语言处理、生成式 AI 和文本转语音技术,创造无缝、自然的对话。 它们适用于各种用例,包括:- 客户支持
- 个人助理
- 免提界面
- 辅导和培训
语音代理如何工作?
在高级别上,每个语音代理都需要处理三个任务:- 聆听 - 捕获音频并转录
- 思考 - 解释意图、推理、规划
- 说话 - 生成音频并流式传输回用户
1. STT > 代理 > TTS 架构(三明治架构)
三明治架构组合了三个不同的组件:语音转文本(STT)、基于文本的 LangChain 代理和文本转语音(TTS)。 优点:- 完全控制每个组件(根据需要交换 STT/TTS 提供商)
- 访问现代文本模态模型的最新功能
- 具有组件之间清晰边界的透明行为
- 需要编排多个服务
- 管理管道的额外复杂性
- 从语音到文本的转换会丢失信息(例如语气、情感)
2. 语音到语音架构(S2S)
语音到语音使用多模态模型,原生处理音频输入和生成音频输出。 优点:- 更简单的架构,移动部件更少
- 对于简单交互通常延迟更低
- 直接音频处理捕获语音的语调和其他细微差别
- 模型选项有限,提供商锁定风险更大
- 功能可能落后于文本模态模型
- 音频处理方式透明度较低
- 可控性和定制选项减少
演示应用程序概述
我们将逐步介绍使用三明治架构构建基于语音的代理。该代理将管理三明治店的订单。应用程序将演示三明治架构的所有三个组件,使用 AssemblyAI 进行 STT,使用 Cartesia 进行 TTS(尽管可以为大多数提供商构建适配器)。 端到端参考应用程序可在 voice-sandwich-demo 仓库中找到。我们将在此逐步介绍该应用程序。 该演示使用 WebSocket 在浏览器和服务器之间进行实时双向通信。相同的架构可以适应其他传输,如电话系统(Twilio、Vonage)或 WebRTC 连接。架构
该演示实现了一个流式管道,其中每个阶段异步处理数据: 客户端(浏览器)- 捕获麦克风音频并编码为 PCM
- 建立到后端服务器的 WebSocket 连接
- 实时将音频块流式传输到服务器
- 接收并播放合成的语音音频
- 接受来自客户端的 WebSocket 连接
-
编排三步管道:
- 语音转文本(STT):将音频转发到 STT 提供商(例如 AssemblyAI),接收转录事件
- 代理:使用 LangChain 代理处理转录本,流式传输响应令牌
- 文本转语音(TTS):将代理响应发送到 TTS 提供商(例如 Cartesia),接收音频块
- 返回合成的音频到客户端进行播放
设置
有关详细的安装说明和设置,请参阅仓库 README。1. 语音转文本
STT 阶段将传入的音频流转换为文本转录本。实现使用生产者-消费者模式来并发处理音频流和转录接收。关键概念
生产者-消费者模式:音频块在接收转录事件的同时发送到 STT 服务。这允许在所有音频到达之前开始转录。 事件类型:stt_chunk:当 STT 服务处理音频时提供的部分转录stt_output:触发代理处理的最终格式化转录
实现
AssemblyAI 客户端
AssemblyAI 客户端
2. LangChain 代理
代理阶段通过 LangChain 代理 处理文本转录本并流式传输响应令牌。在这种情况下,我们流式传输代理生成的 所有文本内容块。关键概念
流式响应:代理使用stream_mode="messages" 在生成响应令牌时发出它们,而不是等待完整响应。这使 TTS 阶段能够立即开始合成。
对话记忆:检查点 使用唯一线程 ID 在轮次之间维护对话状态。这允许代理引用对话中的先前交换。
实现
3. 文本转语音
TTS 阶段将文本转换为音频并流式传输回用户。实现使用流式音频生成来最小化感知延迟。关键概念
流式音频生成:TTS 提供商实时生成音频块,而不是等待完整文本。这允许在生成完整响应之前开始播放。 音频编码:音频块编码为适当格式(如 MP3 或 Opus)以进行网络传输。实现
完整管道
Cartesia TTS 客户端
应用程序实现了一个 Cartesia 客户端来管理 WebSocket 连接和音频合成。以下是实现;可以为其他 TTS 提供商构建类似的适配器:Cartesia 客户端
Cartesia 客户端
LangSmith
您使用 LangChain 构建的许多应用程序都包含多个步骤和多次 LLM 调用。随着这些应用程序变得越来越复杂,能够检查链或代理内部发生的事情变得至关重要。做到这一点的最佳方法是使用 LangSmith。 在上述链接注册后,确保设置您的环境变量以开始记录追踪:将所有内容整合在一起
完整的管道将三个阶段链接在一起:性能优化
最小化延迟
- 早期流式传输:每个阶段在前一阶段仍在处理时开始处理
- 并行处理:STT 和 TTS 可以并行运行
- 优化的 STT/TTS 提供商:选择低延迟提供商

