关注【索引目录】服务号,更多精彩内容等你来探索!
一个基于语音的聊天机器人,它使用经过领域训练的 RAG 代理来回答社会学问题。它叫做 Sociopal。
它由 LangGraph 提供支持,可以进行 RAG 校正,并且在找不到答案时还可以搜索网络。AssemblyAI 负责语音转文本,ElevenLabs 负责语音输出。
你用语音提出一个与社会学相关的问题。该应用会将你的语音转录为文本,并查询经过社会学文档训练的后端代理,然后给出答案。如果在向量数据库中找不到答案,它会返回到网页搜索并重试。
最终答案将通过 ElevenLabs 显示和大声朗读。
演示
尚未部署,但这里有一个简短的演示视频:
尚未部署,但这里有一个简短的演示视频:
安装步骤包含在 README 中。
技术实现
AssemblyAI 集成
我正在使用 AssemblyAI 的Universal-Streaming API来处理实时语音输入。大致流程如下:
1. 获取临时令牌
有一个 API 路由(/api/token)可以获取临时令牌:
const url = `https://streaming.assemblyai.com/v3/token?expires_in_seconds=60`
2. 通过 WebSocket 连接
一旦令牌准备就绪,就会打开 WebSocket 连接来传输音频:
wss://streaming.assemblyai.com/v3/ws?sample_rate=16000&formatted_finals=true&token=${token}
在前端,我使用它getUserMedia()来访问麦克风,然后将音频转换为 16 位 PCM 并通过套接字发送。AssemblyAI 会实时返回文字记录,我会在用户说话时将其显示出来。
它运行流畅,延迟低,即使是随意的讲话,记录也出奇的准确。
后端代理
后端运行一个带有/query路由的 FastAPI 应用。它接受用户查询,将其传递给 LangGraph 代理,并返回响应。
该代理使用纠正性 RAG,因此如果第一个答案不完整或不相关,它将使用改进的查询重试。它还会连接到网络搜索工具,以防答案不在向量数据库中。
最后的想法
构建这个应用是一个探索语音如何增强 AI 代理的有趣方式。AssemblyAI的实时转录和ElevenLabs的自然语音合成,让语音界面的实现变得顺畅无阻。
虽然这个模型是基于社会学数据进行训练的,但其设置实际上与领域无关。你可以将向量数据库替换成任何其他特定领域的内容,代理仍然能够正常工作。
如果您对语音用户界面或构建更智能的助手感兴趣,那么绝对值得尝试。
关注【索引目录】服务号,更多精彩内容等你来探索!

