分享

自己动手,做个智能问答机器人

 奎林说 2022-07-27 发布于甘肃


来吹吹牛

在AI的应用中,自动问答机器人经常被人提起。在AI第三波热潮之前,自动问答机器人其实用得就很多了,常见于各种政务咨询、电商资讯、各个服务单位的咨询当中。淘宝、京东、学校、政府等等都是利用这个咨询机器人的最佳场景。
有两种场景,一是自动回复微信个人或群的信息,有点像QQ群那种机器人;另一个是聊天咨询机器人,直接打开聊天窗口进行问询,比如淘宝客服、图书馆问询机器人,这种常见于网页、APP、微信公众号、H5页面、小程序或者自建的一些应用内。
我以前写过一篇文章,实现过微信问答机器人,时间比较早了,那时候还没有很多平台提供类似的服务,所以做起来比较复杂。互联网的好处就是有一大堆公司或者个人或者开源社区会提供非常好的基础程序给你用,在巨人的肩膀上你发现路很好走。

前面说的第一个场景,对于接受消息,可以使用开源的wechaty 库来实现对微信的自动化操作,比如收发消息、通过好友、拉群等。

使用方法很简单,在wechaty仓库的项目介绍文件中,有最简单的入门示例代码,只需要 6 行代码,就能启动一个帮你接受消息的机器人。wechaty支持几乎所有主流的编程语言,其中JavaScript的入门代码如下:
import { WechatyBuilder } from 'wechaty'// 启动WechatyBuilder.build()  .on('scan', (qrcode, status) => console.log(`Scan QR Code to login: ${status}\nhttps://wechaty./qrcode/${encodeURIComponent(qrcode)}`))  .on('login',            user => console.log(`User ${user} logged in`))  .on('message',       message => console.log(`Message: ${message}`))  .start()
wechaty中定义了很多事件,比如扫码、用户登录、接受消息、接受好友请求等。你不需要关心事件是如何被它触发的,只需要针对不同事件来编写处理方法就好,比如收到消息后自动回复同样的消息,示例代码如下:
// 初始化机器人const bot = WechatyBuilder.build({  name: 'yupi-wxrobot',  // 用于兼容不同 IM 协议,不用关心  puppet: 'wechaty-puppet-wechat',})// 处理消息bot.on('message', async function (msg) {  // 获取消息发送人  const contact = msg.talker()  // 获取消息内容  const text = msg.text()  // 获取群聊信息  const room = msg.room()  // 是私聊  if (contact && text) {    // 回复相同内容    msg.say(text, contact);  }}
注意:这里一定不要直接运行上述代码,一旦你启动了机器人又没有限制回复者昵称的话,它会对所有给你发消息的人生效,会惹出乱子的。如果你只想自动回复某人或某群聊的消息,记得在代码中补充相应的过滤逻辑,比如:
// 处理消息bot.on('message', async function (msg) {  // 获取消息发送人  const contact = msg.talker()  // 获取消息内容  const text = msg.text()  // 获取群聊信息  const room = msg.room()
// 不处理自己的消息 if (msg.self()) { return } // 群聊还是私聊 if (room) { if(room.topic() === '相亲相爱一家人') {      // 回复(有没有被这个群戳中,还好我们没有) } } else { if(contact.name() === '小葵') { // 回复 } }}
使用上述代码,就能实现接受消息和自动回复。至于wechaty是如何接受到微信消息的,这里就不详解了。如何根据不同的问题给出不同的回复呢?
这里很多人就会想到AI,其实有不少此类聊天机器人用的是枚举的方法,if...else就解决问题,所以...AI欺骗,无处不在。
if(/你好/.test(text)) {  msg.say('好的');} else if (/谢谢/.test(text)) {  msg.say('不客气');} else if (/加群/.test(text)) {  msg.say('公众号[奎林说],回复[加群]');} else {  msg.say('知不道');}
有人调侃,AI的本质不就是if...else吗,只不过这个过程机器帮你做了。当然如果你真敢拿这个做产品忽悠钱,那你公司分分钟被骂倒闭。有什么好办法吗,自己写程序肯定是可以,但是有巨人的肩膀,你还是要去借借的。腾讯提供的“微信对话开放平台” ,一行代码都不用写,就能免费实现智能对话。
地址:https://openai.weixin.qq.com/
只要打开这个地址,登录进去,稍稍看下,你就会发现,简单易用,不用一行代码,真的就能搭建一个智能问答平台,只要你收集的问题够多,越多越“智能”。

登录后先创建一个机器人;然后可以为机器人添加技能,你可以自定义技能,向机器人灌输指定的问题和回答;也可以直接使用平台提供的默认技能,比如听歌、聊天、百科等;我的示例是自动回答读者的图书馆相关问题,因此需要创建一个新技能。在这里,可以灵活地自定义题目、不同的问法以及回答,全部用界面操作即可,轻松打造专属机器人;配置好之后,就可以发布和使用机器人了。可以将机器人和公众号/小程序绑定,自动回复读者消息;可以直接在H5网页中接入智能客服;还可以在程序中调用开放接口来使用智能对话能力。
第一个场景希望在wechaty程序中自动获得回复,所以要使用开放接口 的方式,也很简单,就是用个请求库去调用接口,示例代码如下:
// 获取 API 签名,2小时过期// token 需从平台获取const url = `https://openai.weixin.qq.com/openapi/sign/${token}`;const {signature} = (await axios.post(url, {    userid: 'test'})).data;
// 调用 AI 接口,获取答案async function getAnswer(userid, text) { const apiUrl = `https://openai.weixin.qq.com/openapi/aibot/${token}`; return (await axios.post(apiUrl, { "signature": signature, "userid": userid, "query": text, })).data?.answer;}
这样就可以了。
至于第二个场景,要搭建一个自动问答机器人,直接利用微信对话开放平台就可以了,这里不再赘述。腾讯做的东西能被称作平台而不只是一个系统,这就是一个典型的例子。
利用微信对话开放平台,任何图书馆都可以做一个很完善的咨询机器人了,还很好用。如果哪个公司给你卖自动问答机器人,你可能要留心一下,需不需要花那个钱。看到这里,你会明白,嗨,什么AI不AI的。
我昨天花了不少时间去体验各个单位的咨询机器人,电商的、学校的、政务的、图书馆的...目前我遇到的,都很傻,没有一个能称得上AI智能咨询机器人的,全都逃不脱微信对话开放平台的模式。什么机器学习、深度学习,我还没感觉出来,也有可能我的研究还不够,没发现这些咨询机器人的强处。
最后,贴一下我朋友圈发的一句话,和这文章无关:把不知何时才能实现的某种可能性包装成眼下马上要实现的样子,这可以叫做“AI诈骗”或者“元宇宙诈骗”。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多