<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          我竟然被一個(gè)AI機(jī)器人坑了!

          共 3660字,需瀏覽 8分鐘

           ·

          2021-12-22 23:22

          大家好,我是魚皮,自從做了知識(shí)分享,我的微信就沒消停過,平均每天會(huì)收到幾百個(gè)消息,大部分都是學(xué)編程的朋友向我咨詢編程問題。

          但畢竟我只有一個(gè)人,沒法所有消息都一個(gè)個(gè)回復(fù),所以也是很愧疚和無力吧;另外我發(fā)現(xiàn),大家的很多問題是重復(fù)的,而且大多數(shù)我都專門寫文章來回答過。

          所以,我決定自制一個(gè) AI 問答機(jī)器人,幫我自動(dòng)回復(fù)大家的常見問題,減少重復(fù)工作。

          結(jié)果沒想到,制作過程中被 Bug 坑慘了,鬧了不少笑話,感興趣的朋友可以看看視頻哈哈:

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

          由于制作方法實(shí)在太簡單,所以給大家分享下完整的教程,讓大家也能輕松制作自己的 AI 機(jī)器人。

          自制 AI 機(jī)器人教程

          預(yù)計(jì)整個(gè)制作過程 10 分鐘

          先描述下需求:做一個(gè)能夠自動(dòng)回答微信消息的機(jī)器人。

          要實(shí)現(xiàn)這個(gè)需求,有兩個(gè)要點(diǎn):

          1. 如何讓程序接收到微信發(fā)來的消息?
          2. 如何根據(jù)消息來回復(fù)對(duì)應(yīng)的內(nèi)容?

          這兩個(gè)問題,如果沒有一定的專業(yè)知識(shí),是很難自行解決的。但如今是開源的時(shí)代,我們可以站在巨人的肩膀上,用現(xiàn)成的技術(shù)來解決這些問題。

          接受消息

          可以使用開源的 wechaty 庫來實(shí)現(xiàn)對(duì)微信的自動(dòng)化操作,比如收發(fā)消息、通過好友、拉群等。

          開源微信機(jī)器人庫

          使用方法很簡單,在 wechaty 倉庫的項(xiàng)目介紹文件中,有最簡單的入門示例代碼,只需要 6 行代碼 ,就能啟動(dòng)一個(gè)幫你接受消息的機(jī)器人!

          wechaty 支持幾乎所有主流的編程語言,其中 JavaScript 的入門代碼如下:

          import?{?WechatyBuilder?}?from?'wechaty'
          //?啟動(dòng)
          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()

          解釋一下上述代碼,你會(huì)發(fā)現(xiàn),wechaty 中定義了很多事件,比如掃碼、用戶登錄、接受消息、接受好友請(qǐng)求等。你不需要關(guān)心事件是如何被它觸發(fā)的,只需要針對(duì)不同事件來編寫處理方法就好,比如收到消息后自動(dòng)回復(fù)同樣的消息,示例代碼如下:

          //?初始化機(jī)器人
          const?bot?=?WechatyBuilder.build({
          ??name:?'yupi-wxrobot',
          ??//?用于兼容不同?IM?協(xié)議,不用關(guān)心
          ??puppet:?'wechaty-puppet-wechat',
          })
          //?處理消息
          bot.on('message',?async?function?(msg)?{
          ??//?獲取消息發(fā)送人
          ??const?contact?=?msg.talker()
          ??//?獲取消息內(nèi)容
          ??const?text?=?msg.text()
          ??//?獲取群聊信息
          ??const?room?=?msg.room()
          ??//?是私聊
          ??if?(contact?&&?text)?{
          ????//?回復(fù)相同內(nèi)容
          ????msg.say(text,?contact);
          ??}
          }

          但是,大家 千萬不要 直接運(yùn)行上述代碼!因?yàn)橐坏┠銌?dòng)了機(jī)器人、又沒有限制回復(fù)者昵稱的話,它會(huì)對(duì)所有給你發(fā)消息的人生效!

          我剛開始沒注意,就被坑了。。。

          所以,如果你只想自動(dòng)回復(fù)某人或某群聊的消息,記得在代碼中補(bǔ)充相應(yīng)的過濾邏輯,比如:

          //?處理消息
          bot.on('message',?async?function?(msg)?{
          ??//?獲取消息發(fā)送人
          ??const?contact?=?msg.talker()
          ??//?獲取消息內(nèi)容
          ??const?text?=?msg.text()
          ??//?獲取群聊信息
          ??const?room?=?msg.room()

          ??//?不處理自己的消息
          ??if?(msg.self())?{
          ????return
          ??}
          ??//?群聊還是私聊
          ??if?(room)?{
          ????if(room.topic()?===?'魚皮群')?{
          ??????//?回復(fù)
          ????}
          ??}?else?{
          ????if(contact.name()?===?'小號(hào)')?{
          ??????//?回復(fù)
          ????}
          ??}
          }

          OK,使用上述代碼,就能實(shí)現(xiàn)接受消息和自動(dòng)回復(fù)啦!

          那么你是否好奇,wechaty 是如何接受到微信消息的呢?其實(shí)原理很簡單,執(zhí)行 wechaty 程序時(shí),它會(huì)利用無頭瀏覽器技術(shù)悄悄打開一個(gè)網(wǎng)頁版微信,然后在你運(yùn)行程序的控制臺(tái)彈出微信網(wǎng)頁版的登錄二維碼,在你掃碼登錄后,程序只需要監(jiān)聽頁面元素的變化、或者自動(dòng)觸發(fā)點(diǎn)擊事件即可。

          網(wǎng)頁版微信

          其實(shí)道理很簡單,就是把我們能對(duì)網(wǎng)頁進(jìn)行的人工操作轉(zhuǎn)化為后臺(tái)自動(dòng)化執(zhí)行。

          智能回復(fù)

          第一個(gè)問題解決了,那么如何根據(jù)不同的問題給出不同的回復(fù)呢?

          很多同學(xué)肯定上來就說 AI,那都是被我用的 “智能” 一次帶偏了。其實(shí)如果只是簡單的自動(dòng)回復(fù),問題規(guī)則可收斂、可枚舉的情況下,直接用 if ... else ... 就能解決了!

          if(/你好/.test(text))?{
          ??msg.say('好的');
          }?else?if?(/謝謝/.test(text))?{
          ??msg.say('不客氣');
          }?else?if?(/加群/.test(text))?{
          ??msg.say('公眾號(hào)[程序員魚皮],回復(fù)[加群]');
          }?else?{
          ??msg.say('我不懂');
          }

          不是說人工智能的本質(zhì)就是 if else 么哈哈,只不過是讓機(jī)器來幫你去做 if else 而已。

          但現(xiàn)實(shí)是,我的讀者對(duì)于同一個(gè)問題也會(huì)有不同的表達(dá)方式,比如 “怎么學(xué) Java?”、“我想學(xué) Java,怎么學(xué)?” 等等。因此,還是需要人工智能登場(chǎng)了。

          到哪里去搞人工智能呢?

          我們可以直接利用 微信對(duì)話開放平臺(tái) 提供的強(qiáng)大能力,一行代碼都不用寫,就能免費(fèi)實(shí)現(xiàn)智能對(duì)話!

          地址:https://openai.weixin.qq.com/

          登錄后先創(chuàng)建一個(gè)機(jī)器人:

          創(chuàng)建機(jī)器人

          然后可以為機(jī)器人添加技能,你可以自定義技能,向機(jī)器人灌輸指定的問題和回答;也可以直接使用平臺(tái)提供的默認(rèn)技能,比如聽歌、聊天、百科等:

          配置技能

          我的需求是自動(dòng)回答讀者的編程相關(guān)問題,因此需要?jiǎng)?chuàng)建一個(gè)新技能。在這里,可以靈活地自定義題目、不同的問法以及回答,全部用界面操作即可,輕松打造你的專屬機(jī)器人:

          自定義技能

          配置好之后,就可以發(fā)布和使用機(jī)器人了。我們可以將機(jī)器人和公眾號(hào) / 小程序綁定,自動(dòng)回復(fù)讀者消息;可以直接在 H5 網(wǎng)頁中接入智能客服;還可以在程序中調(diào)用開放接口來使用智能對(duì)話能力:

          發(fā)布和使用

          此處我們希望在 wechaty 程序中自動(dòng)獲得回復(fù),所以要使用 開放接口 的方式,也很簡單,就是用個(gè)請(qǐng)求庫去調(diào)用接口,示例代碼如下:

          //?獲取?API?簽名,2小時(shí)過期
          //?token?需從平臺(tái)獲取
          const?url?=?`https://openai.weixin.qq.com/openapi/sign/${token}`;
          const?{signature}?=?(await?axios.post(url,?{
          ????userid:?'test'
          })).data;

          //?調(diào)用?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;
          }

          大概就是這樣,又簡單又實(shí)用,感興趣的同學(xué)可以用它來做出很多有趣的功能~



          我是魚皮,周末肝文不易,有幫助的話還希望能給個(gè) 點(diǎn)贊 + 在看 支持下,謝謝大家。

          往期推薦

          沒有服務(wù)器,也能做網(wǎng)站!?

          萬萬沒想到,這都能發(fā)現(xiàn) Bug?!

          一鍵生成幾千套代碼模板,這個(gè)神器有多刺激!

          Log4j,炸了!!!

          這一周過的,唉

          瀏覽 59
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美精品在线观看 | 欧美午夜精品爱爱 | 日本黄色a作片 | 黄网大全在线观看 | 做爱 高清无码 |