当前有很多语音助手:iOS 有 Siri,Windows 有小娜,Android 有 Google Assistant,亚马逊的 Alexa,国内安卓有灵犀。各大厂还推出了小度、小雅、小爱、天猫精灵等智能音箱产品,深受大家喜爱。这些语音助手或语音 AI 产品有一个基本上都是基于移动设备的。除了少有几个在线搜索、在线翻译 App 使用语音助手,很少看到使用了语音功能的 Web App。主要还是因为移动场景下语音设备一般是标配,语音功能能解放双手,使用起来很方便。而电脑没有声卡没有麦克风一样跑得很溜,加上 Web 语音技术不是原生的,自行研发成本很高。随着 Serverless(无服务器环境)和云计算云服务大行其道,我相信语音 Web App 会流行起来的。下面就会为大家推荐一个高级语音 AI 平台 Alan。如果您已经迫不及待,先 体验一下 最终效果吧,英语单词要读准哟 ?。
一、Alan 概述
Alan 提供了一个完整的无服务器环境来构建强大且可靠的应用内语音助手和聊天机器人。无需创建口语模型、训练语音识别软件、部署和托管语音组件 —— Alan AI 后端完成了大部分工作。您的应用程序的语音体验可以由单个开发人员构建和开发,而不是由机器学习和 DevOps 专家团队构建和开发,因此您无需额外开销即可向应用添加语音界面。
使用 Alan,您可以超越触摸和键入界面的功能,并且语音可以在您的应用程序中启用任何复杂的工作流程或功能。Alan 语音脚本是用 JavaScript 编写的,这使得它们具有高度的可定制性和灵活性。使用 Alan 创建的语音界面构建一次即可部署在任何地方——您无需为特定平台重建它们。
二、Alan 起步
想为您的应用创建语音助手吗?请按照以下步骤开始使用 Alan。
1. 注册 Alan Studio
注册 Alan Studio 或 登录(如果您已经注册)。
2. 创建语音脚本
进入 Alan Studio,可以看到已有的项目统计、Create Voice Assistant
按钮、可用的免费交互次数。如下图:
免费用户可以默认交互50
次,如果绑定 github 并给 Alan 点赞,可以送交互(最多9
次)。免费次数用完后,用户需要更改成付费方式并在线充值才能继续使用 Alan 语音云服务。
2.1 新建工程
单击Create Voice Assistant会显示如下选择对话框:
此处选择一个空白模板新建工程,也可以复制一个 语音脚本示例 模板来编辑工程。Alan Studio 在线编辑器的界面如下:
2.2 编写语音脚本
要让用户与您的语音助手交互,您需要添加用户可以提供的语音脚本命令。语音脚本描述了与用户对话的结构,或预期的对话场景。
在 Alan Studio 中,在脚本编辑区输入以下代码:
// Use this sample to create your own voice commands
intent('(going| ) right', p => {
p.play('Right');
p.play({command:'go-right'});
});
intent('(going| ) left', p => {
p.play('Left');
p.play({command:'go-left'});
});
intent('(going| ) up', p => {
p.play('Up');
p.play({command:'go-up'});
});
intent('(going| )down', p => {
p.play('Down');
p.play({command:'go-down'});
});
也可以通过点击 Add script
按钮来新增多个语音脚本。目前 Alan 提供的语音脚本示例有:Bitcoin(比特币语音助手)、Calculator
(计算器机器人)、News
(新闻头条播报)、CRM
(客户关系管理语音助手)、Small Talk
(简单聊天机器人)、Weather
(天气播报机器人)、Jeopardy
(极限游戏机器人)、Translation(翻译机器人)。
2.3 测试语音脚本
在 Alan Studio 中,在 Edit
选项卡下方,键入聊天或按麦克风按钮说话,可以测试语音脚本。
免费用户有功能限制:不能使用 Alan Studio 的测试视图
通过 Alan Studio 底部的日志面板可以查看:
- 系统日志:Alan Studio 系统消息
- 语法日志:语音脚本错误信息
- 短语日志:对话中对话消息的信息
3. 集成到应用程序中
在 Alan Studio 工具栏中点击 Integrations
,首先要选择整合一样,开发阶段一般选择 Development
。最重要需要 Copy SDK Key
,如下图:
免费用户有功能限制:不能选择整合环境。
这个在客户端调用云服务时会用到。我们还可以在该面板中配置 Alan 按钮。
免费用户有功能限制:不能添加编辑个性化配置选项。能不能支持中文语音有待验证。
根据配置 Alan Studio 会生成相应的嵌入代码,如下图:
- 新建一个 html 文件,将脚本标记添加到页面:
<script src="https://studio.alan.app/web/lib/alan_lib.min.js"></script>
- 给 Alan 按钮添加一个容器:
<div class="alan-btn"></div>
- 在
script
标签中复制嵌入代码示例并做如下相应修改:
var btn = alanBtn({
right: 24,
top: 24,
size: 48,
key: "8fc5f867070d9b45dbfb01d46106baf62e956eca572e1d8b807a3e2338fdd0dc/stage",
onCommand: (commandData) => {
console.log(commandData);
let style = document.getElementById("circle").style;
const command = commandData.command;
if (command === "go-right") {
style.transform += "translateX(50px)";
}
...
},
rootEl: document.getElementById("alan-btn")
});
btn.activate();
btn.playText("you are welcome");
btn.playCommand({ command: "go-down" });
点击此处查看 完整实例代码。当用户说:going left
或 left
,Alanw 会向用户播放文本 Left
并将小球向左移动 50px
,其它方向亦然。如果免费语音次数已经使用完,会听到一个语音提示让用户充值。
在本实例中,Alan 按钮实例初始化完成后,我们使用 activate()
方法以编程方式打开激活 Alan 按钮,调用 playText()
方法播放 you are welcome
,并使用 playCommand()
方法执行将小球向右移动 50px;
三、服务器端 API
1. 意图
您可以使用 intent()
函数在脚本中定义语音命令。该功能可用于完成用户要求的任务或回答用户的问题。
在 intent()
函数中,您必须指定一种或多种模式 — 调用命令的用户话语,以及调用命令时必须触发的一种或多种响应操作。命令和响应部分支持正则表达式、通配符。详细语法详见 模式。
编写命令时,您可以将预定义和用户定义的插槽添加到意图模式。插槽是用户话语中的 变量,允许 Alan 识别和检索有用的信息。
2. 响应
在 Alan 中,您可以通过以下功能触发语音命令的响应操作:
- play()
- reply()
2.1 Play
play()
是用于响应操作的预定义函数。您可以使用它来响应用户或向客户端应用程序发送命令。
- 响应用户
要向用户播放响应,您需要在 play()
函数中定义一个模式。Alan 将使用这句话作为回应。在上面示例中,当用户说:going right
或 right
会调用该命令。 作为响应操作,Alan 向用户播放文本 Right
。
- 向 App 发送命令
play()
函数可用于向与 Alan 集成的客户端应用程序发送命令。此类命令可让您在应用程序端执行特定活动,例如,导航到应用程序中的另一个页面、突出显示屏幕上的 UI 元素等。通过这种方式,您可以同步语音和视觉效果,并为您的应用创建多模式界面。
要发送命令,请将 JSON 传递给 play()
函数。在上面示例中,当用户说:going right
或 right
会调用该命令。 作为响应操作,Alan 向客户端 App 发送 go-right
命令。当然,更灵活的方式发送命令的同时
要在应用程序端处理命令,您必须为从 Alan 的语音脚本接收到的命令定义处理程序。有关详细信息,请参阅 onCommand处理程序。
2.2 答复
reply()
是一个预定义的函数,如果你只需要给用户一个响应,不需要做任何复杂的动作,就可以使用它。
intent('Say $(W hello|goodbye)',
reply('$(W)'));
其实就是 play(语音文本)
,在 reply()
函数中,您可以像在 play()
函数中一样使用模式和插槽。
3. 意图匹配
您的项目可以有许多语音命令。当用户发出命令时,Alan 会将命令与脚本中最合适的意图进行匹配。为此,Alan 分别评估每个意图,并为意图分配不同的权重或匹配分数。
匹配分值范围从 1
(最准确的匹配)到 0
(不匹配)。得分最高的命令被选为最佳匹配。
在下面的示例中,如果用户询问:天气如何?第一个意图将被选为最佳匹配。 第二个意图将不会被匹配,因为它包含的单词比用户的话语多。 反之亦然,如果用户问:今天的天气如何?第二个意图将获得更高的分数,因为它是最准确的匹配。
intent('What is the weather?', p => {
p.play('The weather is a word');
});
intent('What is the weather today?', p => {
p.play('The weather today is great!')
});
详细语法 服务端 API。
四、Alan 客户端 SDK
1. 支持平台
使用 Alan 客户端 SDK,您可以将 Alan 与下列构建的应用集成在一起:
- JavaScript
- React
- Angular
- Vue
- Ember
- Electron
- Ionic
- iOS
- Android
- Apache Cordova
- Flutter
- React Native
- Microsoft PowerApps
2. 主要参数
下面将以 JavaScript 为例进行介绍。Alan 按钮最主要的参数有:
- key:Alan Studio 项目的密钥。
- rootEl:添加 Alan 按钮的元素。如果没有提供
rootEl
,则将 Alan 按钮添加到body
中。 - onCommand:用于处理来自 Alan 语音脚本的命令的回调。在此回调中,您可以设置 —— 有关应用程序对语音脚本接收到的命令做出反应的逻辑。
- onButtonState:接收 Alan 按钮连接状态的回调。
目前 Alan Web SDK 只支持现代浏览器,不支持 IE 浏览器。
五、展望
语音 AI 会成为未来最主流的交互方式。根据贝恩公司此前的一份调研数据显示,未来人机交互方式中,语音交互将会占到 30%左右。语音助手移动 App 以其先天优势仍然占据主导地位,而语音助手将作为 Web App 增强功能不断创新,让我们的生活更美好。
参考:
评论 (0)