使用 Recast.AI 创建具有人工智能的聊天机器人
![使用 Recast.AI 创建具有人工智能的聊天机器人](https://static001.geekbang.org/infoq/27/27f03c148bea9d3ad379ab1a522af024.png)
很多 SAP 顾问朋友们对于人工智能/机器学习这个话题非常感兴趣,也在不断思考如何将这种新技术和 SAP 传统产品相结合。
Jerry 之前的微信公众号文章C4C和微信集成系列教程曾经介绍了 Partner 如何利用 SAP Cloud for Customer 内置的社交媒体集成框架,做一些简单的开发将微信集成到 C4C 中去。该系列教程里其中一篇文章,介绍了如何将图灵机器人集成到某个微信公众号的消息服务器上去,让该微信公众号可以“智能地”同其关注粉丝聊天。
![](https://static001.geekbang.org/infoq/50/50d4e992ab4d183b45df3b5262afd964.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
这个图灵机器人的图灵服务通过 Restful API 的方式暴露出来,所有和机器学习相关的细节都被 www.tuling123.com 封装成黑盒子,应用开发人员只管消费。这是第三方的人工智能解决方案。
2018 年 1 月,SAP 收购了一家法国的人工智能提供商,Recast.AI, 从此 SAP 也有了自己的人工智能解决方案。
![](https://static001.geekbang.org/infoq/fc/fc2ffc28cb41a0ddaeb541fb36b20756.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
现在,访问https://recast.ai, 能看到一行醒目的提示:Recast.AI is now part of SAP。那么 Recast.AI 提供了怎样的功能呢?最好的入门办法,莫过于自己动手做一个 Hello World 例子出来。跟着 Jerry 一块做一个吧。
![](https://static001.geekbang.org/infoq/36/3697cd5b829f557bf2f6279b0f1a1e03.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
我们的目的同本文开头截图展示的一致:开发一个在微信里使用的聊天机器人,不同之处在于这次我们使用 SAP Recast.AI 作为人工智能解决方案。
绝大多数 SAP 顾问朋友们关注的是如何利用人工智能基于 SAP 传统产品做创新,给客户带来价值,而不是花大量时间精力去学习机器学习底层需要的那些艰深的数学知识。Recast.AI 也完美地将不需要应用开发人员了解的机器学习底层细节进行了封装,我们将要做的这个聊天机器人甚至不需要太多的编码。
我们在 Recast.AI 网站上在线创建聊天机器人。一般网站首次登陆都需要先创建用户,而 Recast.AI 除了常规用户注册方式外,还贴心地提供了使用 Github 账号直接登录的选择,对于每天混 Github 的程序员来说,这太方便了。
![](https://static001.geekbang.org/infoq/68/68e8af89570f1e9234cba1bc8c1adf0b.png)
点击按钮允许 Recast.AI 访问您 Github 账号的公有信息后,能看到这个欢迎界面:
![](https://static001.geekbang.org/infoq/db/db7b55a76bf7fb4c5ee8dab7ff29bec6.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
点"START WITH A TEMPLATE"基于现成的模板创建一个机器人:
![](https://static001.geekbang.org/infoq/1a/1a4a07101d92c5de7290a1deb2e42c05.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
和我们在 Fiori UI 里进行业务模型创建类似,首先维护机器人的 ID 和描述信息:
![](https://static001.geekbang.org/infoq/90/9025d53b4f0ac63a5167aa1ba12608c3.png)
创建成功后,来到如下的机器人明细页面,一共包含 5 个标签。本文只会用到 Train, Build 和 Connect 这三个标签。
Train 标签下没有任何内容,只有一个提示:You have no intents.
![](https://static001.geekbang.org/infoq/dc/dc54a5d4a318b6d78fbf23c93258be28.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
什么是 intent 呢?在 Android 开发里也有 intent 的概念,intent 是一个将要执行的动作的抽象描述。Android 框架根据此 intent 的描述,负责找到将要执行动作对应的组件,再把包含了附加参数的 intent 传递给决定出的负责组件。而在 Recast.AI 里的 intent 同样是一个抽象概念。通俗地解释,intent 是一系列句子的集合,这些句子虽然从文字上来说表达方式各异,然而传递的是同一个意思。
比如下列三句话其实是在同一个问题:
你是一个程序员么?
你每天的工作是编写代码么?
你每天使用集成开发环境或者命令行进行单步调试么?
我们可以把这三个句子归为同一个 intent,姑且命名为"程序员"。假设当用户又发送了一个新的文本到您的聊天机器人去:“你是靠编写代码维生么?” Recast.AI 封装好的算法会解析这个文本,将其和"程序员"intent 里的语句进行比较,如果判断出来这个新的文本和 intent 中的某一句表达的意思非常接近,那么我们就能说这个新文本的 intention(意图)是"程序员"。此时,就可以让机器人回复预先准备好的回答,比如“是的,我是程序员,我很喜欢写代码”。
上面的描述实际上已经涵盖了本文聊天机器人创建完毕后,需要执行哪些后续步骤。
回到我创建的聊天机器人,目前没有分配任何 intent。
![](https://static001.geekbang.org/infoq/6a/6a16aef5ad130b275a6bc2e302c255bb.png)
那么我就点 Create 按钮创建一个。当然也可以点 Search 按钮,从 Recast 社区上搜索一个别人创建好的 intent。
![](https://static001.geekbang.org/infoq/f2/f24931cba6f634eae7e7257d4d513bb9.png)
现在新建的这个 programmer intent 还没有任何语句,现在我们就来给它“喂”一些句子,这个动作称为"Train(训练)"。输入一个句子"Are you a programmer?",回车:
![](https://static001.geekbang.org/infoq/e9/e9e719ac0013e758c9a55e1d76f0f9c3.png)
Recast.AI 会自动将这个句子进行分词,并且识别出一个代词(Pronoun) - You, 一个数量词(Number) - a, 和一个工作描述(Job) - programmer。
![](https://static001.geekbang.org/infoq/6a/6a248c3e316e425efa13c73157bac3b7.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
我们再多喂几个句子给这个 intent:
Are you coding with Java or ABAP or JavaScript or C# or C++ or Python or Ruby?
Are you using Integrated Development Environment or Command Line to debug?
is Programming your daily work?
![](https://static001.geekbang.org/infoq/48/48cd5f380c8c2d2b8bf0cf194afbd8b0.png)
什么时候可以结束训练呢?首先给 intent 喂的句子越多,那么它分析新的语句的意图(intention)是否和程序员相关的准确度就越高。现在我们可以对这个 intent 进行测试。点击 Train 标签页右上角的 Test 链接,会看到下图的测试窗口。现在我给这个 intent 发送一条文本:
Are you working with Java every day?
![](https://static001.geekbang.org/infoq/c3/c351fbcbbf8123553aa55d3971ffddfc.png)
Recast.AI 将这个句子同我创建的"programmer" intent 里的句子进行比较,最后判断出,这句话有 99%的可能性属于该 intent(下图字段 confidence: 0.99)。
![](https://static001.geekbang.org/infoq/ac/ac4173a6f890742377b18b6dd9bc399f.png)
那么我们就结束训练,进入下一个"Build"步骤。这个步骤负责定义当您的聊天机器人成功识别到了您的输入是在讨论程序员后,应该执行何种动作。Recast.AI 把机器人这种成功识别出文本的 intention 后执行某种动作的能力,称为 skill。在 Build 标签页点击 Create skill:
![](https://static001.geekbang.org/infoq/20/20cdf490eda21294accb48104445eecb.png)
我给新建的 skill 取名:chat_with_programmer
![](https://static001.geekbang.org/infoq/de/de4e06243d0e597cbde83c0192199c46.png)
给这个 skill 定义 Triggers,意思是满足何种条件会触发这个 skill?在 Triggers 标签页下面使用 Recast.AI 预置的一些公式进行条件定义。
下图 if@programmer,意思就是:如果聊天机器人计算出用户发送的文本是属于"programmer"这个 intent:
![](https://static001.geekbang.org/infoq/08/08335c16b54fe2fc1defa4455e7ac87c.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
Actions 就是在这种条件下应该执行的具体动作。
![](https://static001.geekbang.org/infoq/e2/e20db577917182c60f664f2aaa921afc.png)
这里我定义的 Actions 就是简单地推送一些文本(SEND MESSAGE)给用户。
准备一些文本,机器人会从中间随机地选取一条推送给用户。
Yes, and I am learning Scala in my spare time.
Yes, I have been programming for 20 years.
Yes, I am a programmer, I love programming!
![](https://static001.geekbang.org/infoq/fe/fe4ee435bc35c0d55f57a635c2a96593.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
点击 Build 标签页的"CHAT WITH YOUR BOT"进行测试。随便输入一句和程序员相关的话,比如"Are you working with Java?" 在测试页面,看到了机器人自动给我推送了一个回复,同时显示了我之前创建的"chat_with_programmer" skill 已经被触发(triggered)了。这意味着 Build 标签页里的配置也已经完成。
![](https://static001.geekbang.org/infoq/94/94d9d3850a2e23073b8321923463b475.png)
最后,我们可以把这个创建好的聊天机器人进行发布,让它可以被其他平台消费。这里我选择的是 Webchat 渠道,意思是在一个网页内嵌入这个聊天机器人的对话窗口。
点击 Connect 标签页,选择 Webchat:
![](https://static001.geekbang.org/infoq/1a/1aa644298db91bcce12edf75bbab4c63.png)
可以对嵌入的聊天机器人的会话窗口的某些属性进行定制化,比如窗口标题,用户和机器人的图片定制等。
![](https://static001.geekbang.org/infoq/ef/ef92f2ee5b170aba484a403796249f34.png)
点击 SAVE CHANGES,会生成一段包含 Script 标签的 HTML 代码。直接拷贝到某个网页里,就能使用了。
![](https://static001.geekbang.org/infoq/15/15e86cb1fa7f12916c6cd07b8eaeefbe.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
比如您可以把这个网页作为 HTML5 应用部署到 SAP 云平台上,得到一个 URL,然后把这个 URL 绑定到微信公众号的某个自定义菜单上。当用户点击了这个微信菜单后,就会在微信里打开聊天机器人的会话窗口。
具体步骤在我的博客里有介绍:
![](https://static001.geekbang.org/infoq/01/01de0c255af67f7bb92f50997340ef0e.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
Wechat development series 5 – embedded your UI5 application to Wechat app
下图是我的聊天机器人在微信里工作的效果图。
![](https://static001.geekbang.org/infoq/34/34e23f99b136124630dbb1887dd94ee6.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)
本文这个例子的完整步骤在 SAP Recast.AI 的官网上也有记载,不过是全英文的。大家有兴趣可以动手做一做。感谢阅读。
https://recast.ai/blog/build-your-first-bot-with-recast-ai/
版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/4892b938876fdc888f4b82da2】。文章转载请联系作者。
评论