零触摸、自然语音对话的无感交互应用方案

职场   2024-11-07 18:24   北京  

背景

目前,许多语音应用的工作方式是用户点击录制、说话,然后停止录制。虽然这样做已经不错了,但最自然的语音交互模式需要应用动态检测用户何时说话,这样就可以来回交谈,而不必不断点击录制按钮。
创建语音和文本的自然交互需要动态和低延迟响应。因此,我们既需要自动语音检测,也需要快速推理。有了 @ricky0123/vad-web 为语音检测提供支持,有了 Groq 为 LLM 提供支持,这两个要求都得到了满足。Groq 提供了闪电般的快速响应,而 Gradio 则允许轻松创建功能强大的应用程序。
本文中将介绍如何构建一个卡路里跟踪应用程序,您可以与人工智能对话,它会自动检测您何时开始和停止响应,并提供自己的文本响应来指导您提出问题,以便它估算出您上一餐的卡路里含量。
介绍
现代语音应用程序应该感觉自然且反应灵敏,超越传统的“点击录制”模式。通过将 Groq 的快速推理功能与自动语音检测相结合,我们可以创建一个更直观的交互模型,用户只需在想要与 AI 互动时开始说话即可。
关键组件
  • Gradio:提供网络界面和音频处理功能
  • @ricky0123/vad-web:处理语音活动检测
  • Groq:为自然对话提供快速的 LLM 推理能力
  • Whisper:将语音转录为文本
设置环境
首先,让我们导入必要的库并设置一个使用 Groq API 的客户端。操作方法如下:

在这里,我们引入了关键库来与 Groq API 交互、使用 Gradio 构建流畅的 UI 以及处理音频数据。我们使用存储在环境变量中的密钥安全地访问 Groq API 密钥,这是避免泄露 API 密钥的最佳安全做法。
无缝对话的状态管理
我们需要一种方法来跟踪我们的对话历史记录,以便聊天机器人记住过去的互动,并管理其他状态,例如录音是否处于活动状态。为此,让我们创建一个AppState类:


我们的AppState类是一个方便的工具,用于管理对话历史记录并跟踪是否开启录音。每个实例都有自己的新对话列表,确保聊天历史记录与每个会话隔离。
使用 Groq 上的 Whisper 转录音频
接下来,我们将创建一个函数,使用 Whisper(托管在 Groq 上的一个强大的转录模型)将用户的音频输入转录为文本。此转录还将帮助我们确定输入中是否有有意义的语音。操作方法如下:


此函数打开音频文件并将其发送到 Groq 的 Whisper 模型进行转录,请求详细的 JSON 输出。需要 verbose_json 来获取信息以确定音频中是否包含语音。我们还会处理任何潜在错误,以便我们的应用程序不会在 API 请求出现问题时完全崩溃。


我们还需要解释音频数据响应。process_whisper_response 函数获取 Whisper 的结果完成,并检查音频是背景噪音还是有实际的说话被转录。它使用阈值 0.7 来解释 no_speech_prob,如果没有语音,则返回 None。否则,它将返回人类对话响应的文本记录。
通过 LLM 集成添加对话智能
我们的聊天机器人需要提供自然流畅的智能、友好响应。为此,我们将使用 Groq 托管的 Llama-3.2:


我们正在定义一个系统提示来指导聊天机器人的行为,确保它每次只问一个问题,并保持对话的连续性。此设置还包括错误处理,以确保应用能够妥善处理任何问题。
语音活动检测,实现免提交互
为了让我们的聊天机器人免提,我们将添加语音活动检测 (VAD) 来自动检测某人何时开始或停止说话。以下是使用 JavaScript 中的 ONNX 实现它的方法:


此脚本加载我们的 VAD 模型并设置自动开始和停止录音的功能。当用户开始说话时,它会触发录音,而当用户停止说话时,它会结束录音。
使用 Gradio 构建用户界面
现在,让我们使用 Gradio 创建一个直观且外观美观的用户界面。该界面将包括用于捕获语音的音频输入、用于显示响应的聊天窗口以及用于保持同步的状态管理。


在此代码块中,我们使用 Gradio 的BlocksAPI 创建一个带有音频输入、聊天显示和应用程序状态管理器的界面。波形的颜色自定义增添了美观的视觉效果。
处理记录和响应
最后,让我们链接记录和响应组件,以确保应用程序能够顺利地对用户输入做出反应并实时提供响应。


这些代码设置了事件监听器,用于启动和停止录制、处理音频输入以及生成响应。通过链接这些事件,我们创建了一种非常棒的体验,用户只需交谈,其余部分由聊天机器人处理。
技术亮点
  • - 无缝集成: 成功整合了语音检测、转写和 AI 对话等多个复杂组件 
  • - 用户体验: 实现了类似人类对话的自然交互模式
  • - 实用性: 将先进技术应用于实际的健康管理场景 
  • - 错误处理: 包含完善的错误处理机制, 提高了应用的稳定性

总结


  • 当你打开应用程序时,VAD 系统会自动初始化并开始聆听语音
  • 只要你开始说话,它就会自动触发录音
  • 当您停止讲话时,录音结束并且:使用 Whisper 转录音频
  • 转录后的文本将发送到 LLM
  • LLM 生成有关卡路里追踪的回复
  • 响应显示在聊天界面
这创造了一种自然的来回对话,你可以简单地谈论你的膳食并立即获得有关营养成分的反馈。
此应用演示了如何创建反应灵敏且直观的自然语音界面。通过将 Groq 的快速推理与自动语音检测相结合,我们消除了手动录音控制的需要,同时保持了高质量的交互。结果是一个实用的卡路里跟踪助手,用户可以像与人类营养师交谈一样自然地与之交谈。

源码地址:

https://github.com/bklieger-groq/gradio-groq-basics/tree/main/calorie-tracker


有相同兴趣爱好的可通过加星球的方式添加作者微信。加入后查看置顶评论可加微信交流。
关于作者

做一只爬的最久的乌龟,保持学习保持好奇,即使慢一点,遇到一点困难,只要最后能到达终点,又有什么关系呢。
毕竟人生没有白走的路,每一步都算数。



前端程序设计
专注前端最前沿技术,数据可视化,web3d。偶尔插播生活和艺术。
 最新文章