虚拟助手(使用 Google Dialogflow)
目录

虚拟助手(使用 Google Dialogflow)#
此虚拟助手(使用 Google Dialogflow)示例应用程序演示了 Google Dialogflow 和 Riva 语音服务以天气聊天机器人 Web 应用程序形式的集成。
在此示例中,我们使用 Riva 进行 ASR 和 TTS,使用 Google Dialogflow 进行 NLP 和对话管理 (DM)。
实现#
从高层次来看,此集成利用了 Google Dialogflow 的原生 API 支持和 Riva 中的 gRPC 支持。 Weatherbot 客户端协调 Riva 服务和 Dialogflow 的工作流程,然后通过 Web UI 与最终用户交互。此解决方案主要包含三个部分:Riva AI 服务、Dialogflow Weatherbot 和 Weatherbot 客户端应用程序。
以下是高层次的实现
Riva AI 服务
通过 gRPC 端点公开语音服务 (ASR/NLP/TTS)。
需要 GPU。
Riva 和 Dialogflow 聊天机器人
Dialogflow Weatherbot
公开 API 端点以与聊天机器人通信。
接收用户文本作为输入并返回响应。
负责在需要时执行履行。
在 GCP 上运行。
Weatherbot 客户端应用程序
包含 Riva 客户端 Python 库。
分别通过 gRPC 和 REST API 端点与 Riva AI 服务和 Dialogflow Weatherbot 通信。
管道化 ASR、NLP、TTS 和对话管理器功能。
包含 Weatherbot 客户端应用程序(Web UI 和 Web 服务)。
不需要 GPU。
架构#
上图显示了 Riva 和 Dialogflow Weatherbot 的架构。用户的音频输入通过 Weatherbot 客户端应用程序的 Web UI 从麦克风收集。来自用户的输入音频由客户端应用程序发送到 Riva AI 服务以进行 ASR。 Riva AI 服务将转录的文本返回给客户端应用程序。然后将来自 Riva AI 服务的转录文本发送到 Dialogflow Weatherbot(在 GCP 上运行)。 Dialogflow Weatherbot 返回文本的适当响应。然后将响应文本发送到 Riva AI 服务以进行 TTS。语音响应被返回到客户端应用程序,然后通过 Web UI 在用户的扬声器上播放。
代码结构#
本节显示了 Weatherbot 客户端应用程序(在 Riva 和 Dialogflow 聊天机器人中)的高级代码结构。
asr.py
此文件包含使用 Riva Python 客户端库对 Riva ASR 进行 gRPC 调用的功能,使用音频片段并返回文本转录。
ASR 以流模式使用
dialogflow.py
此文件包含向 Dialogflow 发出 API 调用的功能,使用用户输入和发送者 ID,并返回 Dialogflow 获取的文本响应。
tts.py
和tts_stream.py
这些文件包含使用 Riva Python 客户端库对 Riva TTS 进行 gRPC 调用的功能,使用文本片段并返回相应的语音。
TTS 可以以批量或流模式使用,具体取决于是否使用
tts.py
或tts_stream.py
。 这可以通过更改virtual-assistant-dialogflow/dialogflow-riva-weatherbot-webapp/riva/chatbot/chatbot.py
脚本中第 12 行和第 13 行的导入语句来设置。
chatbot.py
此文件包含 Chatbot 类,该类负责管道化所有 ASR、TTS 和 Dialogflow 操作。
为每个对话创建 Chatbot 类的一个实例。
要求和设置#
要求:#
在尝试运行 Riva 客户端之前,请确保您满足以下要求
您已访问并登录 NVIDIA NGC。有关分步说明,请参阅 NGC 入门指南。
Python 3.8(对其他 Python 版本的支持将在未来的版本中添加)。
设置:#
git clone https://github.com/nvidia-riva/sample-apps.git
进入 Riva 和 Dialogflow 虚拟助手目录
cd sample-apps/virtual-assistant-dialogflow
为此示例将要使用的 Python 虚拟环境创建父目录
mkdir pythonenvs
为此示例创建并激活 Python 虚拟环境。我们将把此虚拟环境用于所有依赖库,包括 Riva 客户端库、weatherbot Web 应用程序库和 Google Dialogflow 客户端库
python3 -m venv pythonenvs/dialogflow
. pythonenvs/dialogflow/bin/activate
安装虚拟助手所需的库,包括 Riva 客户端库
升级
pip
pip3 install -U pip
安装 Riva 客户端库
下载 Riva 快速入门脚本(如果尚未完成)。
x.y.z
是 Riva Speech Skills 版本号 - 最新的 Riva 版本号可以在 Riva 快速入门指南的 使用快速入门脚本进行本地部署部分中找到
ngc registry resource download-version "nvidia/riva/riva_quickstart:x.y.z"
安装 Riva 客户端库。
cd riva_quickstart_v<x.y.z> pip install riva_api-<x.y.z>-py3-none-any.whl
安装 weatherbot Web 应用程序依赖项。
requirements.txt
捕获 weatherbot Web 应用程序所需的所有 Python 依赖项
pip3 install -r requirements.txt # For Python 3.8
设置 Google Dialogflow。 Dialogflow 的整个设置过程包含多个步骤,可能需要一些时间才能完成。
在此步骤结束时,您将设置一个 Google 项目,安装并初始化 gcloud CLI,并在我们在上一步中创建的dialogflow
虚拟环境中安装 Google Dialogflow 客户端库。在
virtual-assistant-dialogflow
的config.py
中,使用您的项目 ID 更新PROJECT_ID
参数。要查找您的项目 ID,请执行以下步骤在 Google Cloud Platform (GCP) 仪表板中,从 GCP 横幅右侧的左上角下拉列表中选择您的项目。
在仪表板选项卡下,可以在项目信息部分找到项目 ID。
停用 Weatherbot Web 应用程序的
dialogflow
Python 虚拟环境
deactivate
运行演示#
启动 Riva Speech Server(如果尚未完成)。 按照 Riva 快速入门指南中的步骤操作。
导航到您在设置部分的步骤 1 中克隆的 Riva 示例应用程序 github 存储库中的 Riva 和 Dialogflow 虚拟助手目录。
cd sample-apps/virtual-assistant-dialogflow
修改代码库中用于服务间通信的 API 端点设置 - 更新
config.py
脚本以进行服务间通信。
riva_config = {
...
"RIVA_SPEECH_API_URL": "[riva speech service host IP]:50051",
...
}
例如
# uncomment and populate the section below
riva_config = {
...
"RIVA_SPEECH_API_URL": "10.20.30.40:50051",
...
}
初始化并启动 Dialogflow Weatherbot。
按照此处的步骤创建代理。
单击 Dialogflow 控制台中代理名称旁边的设置按钮。在导出和导入选项卡下,选择从 ZIP 恢复并从主机上的
sample-apps/virtual-assistant-dialogflow/dialogflow-weatherbot/dialogflow-weatherbot.zip
上传压缩文件夹。添加履行。
打开 Fulfillment 部分,并在 Dialogflow 控制台中启用内联编辑器。
将
sample-apps/virtual-assistant-dialogflow/dialogflow-weatherbot/fulfillment/index.js
的内容复制并粘贴到内联编辑器下的index.js
中。将
sample-apps/virtual-assistant-dialogflow/dialogflow-weatherbot/fulfillment/package.json
的内容复制并粘贴到内联编辑器下的package.json
中。在
index.js
的第 4 行,使用您的 Weatherstack API 密钥更新weatherstack_APIkey
。 可以从此处获取新的 Weatherstack API 密钥。
启动 Riva 和 Dialogflow 虚拟助手 Web 应用程序。
如果尚未完成,请使用 Dialogflow weatherbot 的项目 ID 更新
config.py
,如设置部分的步骤 7 中所述。激活
dialogflow
Python 环境。
. /pythonenvs/dialogflow/bin/activate
导航到聊天机器人 Web 应用程序文件夹。
cd dialogflow-riva-weatherbot-webapp
启动聊天机器人 Web 服务器。
python3 main.py
在 Web 浏览器
https://<riva chatbot server host IP>:6006/rivaWeather
中打开界面,例如 https://0.0.0.0:6006/rivaWeather。
示例对话#
示例 1#
虚拟助手: 您好,欢迎使用 RIVA 天气服务。有什么可以帮您?
用户: 天气怎么样?
虚拟助手: 您要查询哪个地点?
用户: 西雅图。
虚拟助手: 目前西雅图多云。温度为 16 度,湿度为 97%,风速为 0 英里/小时。
局限性#
提供的示例不是完整的虚拟助手;而是旨在作为如何使用 Riva 构建基本的面向任务的聊天机器人的简单示例。 因此,意图分类器和槽位填充模型是使用少量数据训练的,预计不会非常准确。
Dialogflow Weatherbot 示例支持多云、湿度、降雨、降雪、晴朗、温度、天气和刮风检查的意图。 它不支持一般的对话查询或其他领域。
Dialogflow Weatherbot 仅支持 1 个
city
的槽位。 它在提供响应时没有考虑与查询关联的日期。此示例最多支持四个并发用户。 此限制不是因为 Riva,而是因为客户端 Web 应用程序正在使用的 Web 框架(Flask 和 Flask-ScoketIO)。 用于将音频流式传输到用户 (TTS) 和从用户 (ASR) 流式传输音频的套接字连接无法维持超过四个并发套接字连接。
许可证#
NVIDIA Riva 许可协议包含在产品中。 许可证也随模型应用程序 zip 文件一起提供。 通过拉取和使用 Riva SDK 容器、下载模型或使用此处的示例应用程序,您接受这些许可证的条款和条件。
以下是我们在本示例中使用的库的许可证信息
google-cloud-dialogflow - 此库的许可证可以在此处找到。
actions-on-google - 此库的许可证可以在此处找到。
firebase-admin - 此库的许可证可以在此处找到。
firebase-functions - 此库的许可证可以在此处找到。
dialogflow - 此库的许可证可以在此处找到。
dialogflow-fulfillment - 此库的许可证可以在此处找到。