Riva 虚拟助手示例#

概述#

虚拟助手示例演示了如何使用 Riva AI 服务,特别是 ASR、NLP 和 TTS,来构建一个简单但完整的对话式 AI 应用程序。它演示了如何接收用户语音输入,使用意图识别和槽位填充方法解释查询,计算响应,并以自然的声音向用户说回响应。

virtual-assistant architecture

此示例实现了一个对话系统,该系统采用基于状态机的对话状态管理方法,并使用意图/槽位范例来解释用户查询。提供的模型演示了通过地理位置和时间查询天气、温度和降雨量,使用免费的 Web 服务作为履行引擎来返回真实的天气数据。虽然范围狭窄,但它包含了构成更复杂和完整的对话系统的所有组件,例如那些部署在电话或家用虚拟助手中的系统。

对话管理器是执行状态机的环境,并与 Riva NLP、ASR 和 TTS 模块集成。可以修改此示例以实现更多模型和更复杂的对话状态管理。它还旨在演示如何将 Riva 集成到现有的虚拟助手和对话系统中,以提供针对 NVIDIA 加速计算平台优化的最先进的对话智能。

通过设计不同的对话状态图,可以创建不同类型的助手。作为一个示例,我们提供了一个 天气 机器人的实现。

Weather bot screengrab

视频演示#

这是一个视频,展示了天气机器人的运行情况,然后讨论了架构的高级描述,并进行了非常简短的代码演练。

要求和设置#

先决条件#

  1. 您已访问并登录到 NVIDIA NGC。有关分步说明,请参阅NGC 入门指南

  2. 设置 Riva 服务是先决条件,因为应用程序的各个组件都依赖于这些服务的可用性。天气机器人假定 Riva 端点提供以下模型 – ASR、TTS、NLP(天气领域意图和槽位模型)。在 Riva 服务启动并运行后,才能继续运行此应用程序。

  3. Python 3.8(未来版本将添加对其他 Python 版本的支持)。

  4. virtualenv 工具,用于创建 Python 环境。

pip install virtualenv

设置#

  1. 克隆 Riva 示例应用程序仓库

git clone https://github.com/nvidia-riva/sample-apps.git
  1. 进入 Riva 虚拟助手目录

cd sample-apps/virtual-assistant
  1. 创建并启用 Python 虚拟环境

virtualenv -p python3 apps-env
source apps-env/bin/activate
  1. 安装虚拟助手所需的库,包括 Riva 客户端库

    1. 升级 pip

    pip3 install -U pip
    
    1. 安装 Riva 客户端库

      1. 下载 Riva 快速入门脚本(如果尚未完成)。x.y.z 是 Riva Speech Skills 版本号 - 最新的 Riva 版本号可以在Riva 快速入门指南使用快速入门脚本进行本地部署部分中找到

      ngc registry resource download-version "nvidia/riva/riva_quickstart:x.y.z"
      
      1. 安装 Riva 客户端库。

      cd riva_quickstart_v<x.y.z>
      pip install riva_api-<x.y.z>-py3-none-any.whl
      
    2. 安装 weatherbot Web 应用程序依赖项。requirements.txt 捕获 weatherbot Web 应用程序所需的所有 Python 依赖项。

    pip3 install -r requirements.txt # For Python 3.8
    

运行演示#

  1. 启动 Riva Speech Server(如果尚未完成)。按照Riva 快速入门指南中的步骤操作。

  2. 编辑配置文件 config.py,并设置

    • Riva 语音服务器 URL。这是可以访问 Riva 服务的端点。

    • weatherstack API 访问密钥。VA 使用 weatherstack 进行天气履行,即当识别出天气意图时,将从 weatherstack 获取实时天气信息。注册 weatherstack 的免费套餐,并获取您的 API 访问密钥。

代码片段将如下例所示。

riva_config = {
  "RIVA_SPEECH_API_URL": "<IP>:<PORT>", # Replace the IP & port with your hosted Riva endpoint
   ...
  "WEATHERSTACK_ACCESS_KEY": "<API_ACCESS_KEY>",  # Get your access key at - https://weatherstack.com/
   ...
}
  1. 运行虚拟助手应用程序

python3 main.py
  1. 在浏览器中打开 https://IP:8009/rivaWeather,其中 IP 是应用程序运行的机器的 IP。例如,对于本地机器,请访问 https://127.0.0.1:8009/rivaWeather/

示例用例#

可以向机器人询问以下类型的问题

  • 柏林的天气怎么样?

  • 天气怎么样?

    • 哪个地点?

  • 明天旧金山的天气怎么样?

    • 加利福尼亚城呢?

  • 星期五巴黎的温度是多少?

  • 现在旧金山冷吗?

  • 明天底特律会下雨吗?

  • 西雅图的降雨量是多少?

  • 下周圣克拉拉会是晴天吗?

  • 今天多云吗?

  • 明天密尔沃基会下雪吗?

  • 目前多伦多有多少雪?

  • 现在湿度有多大?

  • 迈阿密的湿度是多少?

局限性#

  • 提供的示例不是完整的聊天机器人,而是旨在作为如何使用 Riva 构建基本的面向任务的聊天机器人的简单示例。因此,意图分类器和槽位填充模型是用少量数据训练的,预计不会非常准确。

  • Riva NLP 示例支持天气、温度、降雨、湿度、晴天、多云和降雪检查的意图。它不支持一般的对话式查询或其他领域。

  • Riva NLP 示例仅支持 1 个城市槽位。它也没有考虑与查询相关的日期。

  • 该示例最多支持四个并发用户。此限制不是因为 Riva,而是因为正在使用的 Web 框架(Flask 和 Flask-ScoketIO)。套接字连接用于将音频流式传输到 (TTS) 和从 (ASR) 流式传输;您无法维持超过四个并发套接字连接。

  • 聊天机器人应用程序未针对多个并发用户的低延迟进行优化。

  • 在 Firefox 浏览器上的聊天机器人示例中观察到一些不稳定的问题。最常见的问题是 TTS 输出被某些麦克风增益值的 ASR 视为输入。

许可证#

NVIDIA Riva 许可协议包含在产品中。许可证也随模型应用程序 zip 文件一起提供。通过拉取和使用 Riva SDK 容器、下载模型或使用此处的示例应用程序,您接受这些许可的条款和条件。