动手做个ai机器人,帮我回消息(代码片段)

程序员鱼皮 程序员鱼皮     2023-03-02     736

关键词:

大家好,我是鱼皮,自从做了知识分享,我的微信就没消停过,平均每天会收到几百个消息,大部分都是学编程的朋友向我咨询编程问题。

但毕竟我只有一个人,没法所有消息都一个个回复,所以也是很愧疚和无力吧;另外我发现,大家的很多问题是重复的,而且大多数我都专门写文章来回答过。

所以,我决定自制一个 AI 问答机器人,帮我自动回复大家的常见问题,减少重复工作。

结果没想到,制作过程中被 Bug 坑惨了,闹了不少笑话,感兴趣的朋友可以看看视频哈哈:

地址:https://www.bilibili.com/video/BV1Vq4y1B7zu/

由于制作方法实在太简单,所以给大家分享下完整的教程,让大家也能轻松制作自己的 AI 机器人。

自制 AI 机器人教程

预计整个制作过程 10 分钟

先描述下需求:做一个能够自动回答微信消息的机器人。

要实现这个需求,有两个要点:

  1. 如何让程序接收到微信发来的消息?
  2. 如何根据消息来回复对应的内容?

这两个问题,如果没有一定的专业知识,是很难自行解决的。但如今是开源的时代,我们可以站在巨人的肩膀上,用现成的技术来解决这些问题。

接受消息

可以使用开源的 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.js.org/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() === '小号') 
      // 回复
    
  

OK,使用上述代码,就能实现接受消息和自动回复啦!

那么你是否好奇,wechaty 是如何接受到微信消息的呢?其实原理很简单,执行 wechaty 程序时,它会利用无头浏览器技术悄悄打开一个网页版微信,然后在你运行程序的控制台弹出微信网页版的登录二维码,在你扫码登录后,程序只需要监听页面元素的变化、或者自动触发点击事件即可。

其实道理很简单,就是把我们能对网页进行的人工操作转化为后台自动化执行。

智能回复

第一个问题解决了,那么如何根据不同的问题给出不同的回复呢?

很多同学肯定上来就说 AI,那都是被我用的 “智能” 一次带偏了。其实如果只是简单的自动回复,问题规则可收敛、可枚举的情况下,直接用 if ... else ... 就能解决了!

if(/你好/.test(text)) 
  msg.say('好的');
 else if (/谢谢/.test(text)) 
  msg.say('不客气');
 else if (/加群/.test(text)) 
  msg.say('公众号[程序员鱼皮],回复[加群]');
 else 
  msg.say('我不懂');

不是说人工智能的本质就是 if else 么哈哈,只不过是让机器来帮你去做 if else 而已。

但现实是,我的读者对于同一个问题也会有不同的表达方式,比如 “怎么学 Java?”、“我想学 Java,怎么学?” 等等。因此,还是需要人工智能登场了。

到哪里去搞人工智能呢?

我们可以直接利用 微信对话开放平台 提供的强大能力,一行代码都不用写,就能免费实现智能对话!

地址: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问答机器人,帮我自动回复大家的常见问题,减少重复工作。结果没想到,制作过程中被Bug坑惨了,闹了不少笑话,感兴趣的朋友可以看看视频哈哈:地... 查看详情

动手做个ai机器人,帮我回消息(代码片段)

...专门写文章来回答过。所以,我决定自制一个AI问答机器人,帮我自动回复大家的常见问题,减少重复工作。结果没想到,制作过程中被Bug坑惨了,闹了不少笑话,感兴趣的朋友可以看看视频哈哈:地... 查看详情

10分钟用python告诉你两个机器人聊天能聊出什么火花(代码片段)

...起聊天会是什么样子的。为了让实验效果更好,我们两个机器人选取了不同网站的机器人(图灵和茉莉)。01准备1)pip下载安装python的requests模块,这个调用接口发送消息 查看详情

自己动手做个微信聊天机器人

长夜慢慢无人聊天,自己动手做个微信聊天机器人陪自己。 智力太低,还是让他调戏别人吧。 看了上面的动画图片是不是有人好奇程序是怎么实现的?解决方案其实很简单:1.通过微信的web接口可以实现自动回复、登录... 查看详情

用java做个qq机器人,帮我提醒女神按时喝水和陪她聊天~(带源码)(代码片段)

...充水分在3000毫升左右,才能满足人体需要。如果有个机器人能按时提醒我们喝水,那该多好啊~~2、创建一个springboot项目(这个步骤是为小白提供,大佬们直接跳到第三步)2.1.新建项目2.2.选择springboot项目2.3.... 查看详情

自己动手做个分页插件(代码片段)

PC分页,完美支持ie8+,2KB下面就是见证奇迹的时刻dome地址https://github.com/cleartime/pageSize/blob/master/dome/index.html配置详情varconfig=el:document.getElementById("page"),//绑定到你的dompageCount:10,//总页数ps:如果后两项填写了则本字段失效,两者只需其 查看详情

[android]自己动手做个拼图游戏(代码片段)

目标在做这个游戏之前,我们先定一些小目标列出来,一个一个的解决,这样,一个小游戏就不知不觉的完成啦。我们的目标如下:游戏全屏,将图片拉伸成屏幕大小,并将其切成若干块。将拼图块随机打乱,并保证其能有解。... 查看详情

android自己动手做个扫雷游戏(代码片段)

1.游戏规则扫雷是玩法极其简单的小游戏,点击玩家认为不存在雷的区域,标记出全部地雷所在的区域,即可获得胜利。当点击不包含雷的块的时候,可能它底下存在一个数,也可能是一个空白块。当点击中有数字的块时,游戏... 查看详情

动手做个智能水族箱(代码片段)

下图是本案例除硬件连线外的3步导学,每个步骤中实现的功能请参考图中的说明。1、简介1.1、背景  伴随着人们生活水平的提高,养鱼已经成为了一种新的时尚,各种桌面鱼缸层出不穷,但是市面上的鱼缸系... 查看详情

动手做个智能水族箱(代码片段)

下图是本案例除硬件连线外的3步导学,每个步骤中实现的功能请参考图中的说明。1、简介1.1、背景  伴随着人们生活水平的提高,养鱼已经成为了一种新的时尚,各种桌面鱼缸层出不穷,但是市面上的鱼缸系... 查看详情

(d2l-ai/d2l-zh)《动手学深度学习》pytorch笔记前言(介绍各种机器学习问题)以及数据操作预备知识ⅰ(代码片段)

开源项目地址:d2l-ai/d2l-zh教材官网:https://zh.d2l.ai/书介绍:https://zh-v2.d2l.ai/笔记基于2021年7月26日发布的版本,书及代码下载地址在github网页的最下面交流者论坛额外:https://distill.pub/(d2l-ai/d2l-zh) 查看详情

(d2l-ai/d2l-zh)《动手学深度学习》pytorch笔记前言(介绍各种机器学习问题)以及数据操作预备知识ⅲ(概率)(代码片段)

开源项目地址:d2l-ai/d2l-zh教材官网:https://zh.d2l.ai/书介绍:https://zh-v2.d2l.ai/笔记基于2021年7月26日发布的版本,书及代码下载地址在github网页的最下面交流者论坛额外:https://distill.pub/pytorch中文文档(哪个... 查看详情

chatgpt来了,让我们快速做个ai应用(代码片段)

...且这一讲里,我们还会快速搭建出一个有界面的聊天机器人来给你用。在这个过程里,你也会第一次使用HuggingFace这个平台。HuggingFace是现在最流行的深度模型的社区,你可以在里面下载到最新开源的模型,以及看... 查看详情

与其想当然的overdesign,不如自己动手做个试验(代码片段)

ConmajiaJan.29th,2019早在2012年,我曾经针对C#System.Random不同的初始化方案专门做过一次试验,得出了单次默认初始化即可获得质量很好的随机数的结论。可是这么多年过去,C#从2.0升到了4.7,还能在网上看到很多新手(甚至是老鸟)... 查看详情

(d2l-ai/d2l-zh)《动手学深度学习》pytorch笔记前言(介绍各种机器学习问题)以及数据操作预备知识ⅱ(线性代数微分自动求导)(代码片段)

开源项目地址:d2l-ai/d2l-zh教材官网:https://zh.d2l.ai/书介绍:https://zh-v2.d2l.ai/笔记基于2021年7月26日发布的版本,书及代码下载地址在github网页的最下面交流者论坛额外:https://distill.pub/pytorch中文文档(哪个... 查看详情

用tensorflow做个聊天机器人

上一次提到了不错的学习聊天机器人的资源,不知道小伙伴们有没有去学习呢。自己动手做聊天机器人教程我最近每天都会学一点,拿出解读来和大家分享一下。本文结构:聊天机器人的架构简图用TensorFlow实现Chatbot的模型如何... 查看详情

有没有办法检测消息中的链接? (或者有人可以帮我写代码)

...56【问题描述】:嘿,我目前正在开发一个NSFW检测不和谐机器人。但是现在我被困住了,我知道如何扫描附件,但是我的链接检测有问题我希望如果消息没有以image_types中的参数结尾,机器人不会 查看详情

我用深度学习做个视觉ai微型处理器!(代码片段)

...络用在汽车上了。现如今,工程师们将其用在安防、机器人、自动驾驶等领域。因此,懂得如何设计、训练算法,又能将其部署到边缘硬件产品上,能帮我们实现许多产品的想法。但是&#x 查看详情