閒談噗浪機器人 III

沒想到閒談系列還可以寫到 III 。

我在二月左右因為無聊所以寫了一隻噗浪機器人叫做 rogabot (使用說明) ,因為不想讓人家覺得我在靠機器人賺 Karma ,所以另外註冊了一個帳號,和原本的帳號 roga 分開。

後來有一段時間我都丟著機器人不管。有長達大概三個月的時間,這隻程式每天自動去抓美女(新聞、氣象),然後每個小時都會定時派送訊息(發送政策可以看這邊)。

最近噗浪上面機器人變多了,會熱門主要是因為羊羊、無名挖挖挖這兩隻機器人的關係。因為它們會回應使用者的特性也讓機器人的應用更上了一層樓。而它們的好友也一夕之間爆增許多,好奇的人紛紛想知道這是怎麼回事。

不過吊詭的是,一陣子之後,開始有不同的聲音出來了,像是有人覺得機器人很無聊,有人覺得羊羊沒用,找不到答案時老是回答那幾句話,也有人覺得河道上機器人氾濫。

基本上我認為使用者和開發者都有責任讓訊息不要氾濫。畢竟每個人都會希望得到的是有用的資訊,舉例而言:世界最大的 Google 搜尋引擎會這麼有價值,原因來自於使用者可以透過搜尋得到他想要得答案。。而 MS 更是用「決策引擎」來稱呼他們新推出的 Bing 搜尋引擎,因為他們認為 Bing 可以幫使用者找出最佳的解答(結果大家都用來找影片)。

在噗浪上面,我都認為機器人應該要留給使用者更多空間,讓使用者自己決定要不要讓機器人參與、答覆。

舉例來說:當使用者想頻繁玩弄機器人的時候,應該要發私人訊息給機器人,而非讓測試訊息佔滿河道,這樣一來機器人訊息就不會影響到其他使用者。對開發者來說,可以做的事情更多了,但第一件應該要做的事情永遠都是「動詞過濾」。也就是針對使用者發出的訊息進行偵測,只回應使用者希望機器人回應的噗,而不是隨便亂入,隨便回應。

基本上,到這邊技術門檻都很低,也是每個機器人應該具備的功能,我不是很欣賞某些到處亂入的機器人,因為亂發送垃圾訊息和發送垃圾信有什麼兩樣呢?再者就是回應的內容是否有價值,我認為把問題交給搜尋引擎去回答並不是很負責任的作法。畢竟要知道搜尋的結果可以自己去查就可以了,機器人應該要提供更貼心的服務,而且因為即時交談畫面的特性,回覆內容必須是過濾過的,而且精簡,不會影響版面閱讀(例如不要回覆一長串文字都是連結),在同一則噗裡面也不應該重複回應。

當然,開發者所寫的機器人不見得都有語意分析的能力,所以常常會答非所問。事實上要實做一個語意引擎非常困難。但只要蒐集到夠多的資料,加上夠快的 CPU (以及彆腳的判斷),針要回答一般性的問題應該就會容易許多。(例如:今天有什麼電影、下班後想看電影、晚上有什麼電影..等等)。但是如果是過於複雜的語法結構,就不是那麼容易可以分析的了。(例如:我明天想和喜歡的人去吃日本料理、我應該要穿什麼衣服呢?萬一下雨會不會很掃興?她會討厭我嗎?)

在語意分析的技術瓶頸下,我採用一個簡單的方法暫時解決這個問題,就是根據不同的關鍵字來回應不同的內容。有了關鍵字,機器人的回應看起來就會比較有內容些,由於使用者可以自行決定是否要機器人回答,所以機器人也不會那麼快就讓使用者感到厭倦。

所以,當使用者想問氣象則會針對氣象回答,使用者想要圖片(型男、正妹),則回傳圖片和相簿連結給使用者(甚至因為網友要求實做了一個簡易評分機制)。若是需要看看名言佳句勉勵自己,也可以得到開示。這類型的應用甚至可以用到早安、晚安…等特定關鍵字出現的時候,機器人就自動回訊說早安、晚安…等等。(簡易範例)

當然,這只是初步的 workaround ,要真正實做的話,永遠有多到做不完的東西可以寫 🙂

Posted in 碎碎念
22 comments on “閒談噗浪機器人 III
  1. Maxwell says:

    有時候看機器人的回覆雖然答非所問, 卻很搞笑, 倒也是一種樂趣啦…
    例如這噗: http://www.plurk.com/p/13seol

  2. jialing88 says:

    請問能否分享你的噗浪機器人給我? 發噗我會用, 但是回應關鍵字的噗, 想弄一個針對賽斯書資料庫搜尋後的結果來回噗的機器人. RLPlurkAPI-0.5.0-0 會抓到一些資料, 但還沒有研究到回噗.

    • roga says:


      $plurk = new RLPlurkAPI();
      $plurk->login($nick_name, $password);
      print_r($plurk->getPlurks($plurk->uid));

      這樣應該可以看到列表,接下來要處理就很簡單了:

      $plurk->respondToPlurk(RLPlurkAPI::permalinkToPlurkID($url), 'en', 'says', 'test from the plurk robot');

      記得建一個 table 把回應過的 permalink 存起來以免重複回應。

  3. sai says:

    請問一下!噗浪機器人該怎麼做呢?有參考的網址嗎?不好意思啦!我看了三篇都沒寫到機器人如何做??

  4. jialing88 says:

    謝謝 roga 大大. 這樣就很清楚了. 🙂

    sai 的問題, http://code.google.com/p/rlplurkapi/ 有 api, 可是其中有個地方要改一下才能用. 看這裡: http://code.google.com/p/rlplurkapi/issues/detail?id=7&can=1

    另一個用 PHP cURL 可自動發噗: http://www.jaceju.net/blog/?p=591

  5. Ken says:

    請問一下~
    星座的當日速配指數是指什麼?
    另外,為何會有同一天 星座速配不一樣
    ex. 今日雙魚跟金牛速配 但金牛的速配寫著水瓶
    謝謝!

  6. AssPiPi says:

    你好,請問一下機器人設定好那些要噗的訊息之後

    如果要讓它在某個時間發送訊息,是不是要另外處理呢

    不是很了解開發的流程…可以麻煩你告訴我嗎

    謝謝!

  7. Floye says:

    您好,請問要如何在mysql建立table來儲存回應過的噗呢?
    小弟對這邊不是很清楚
    可以麻煩教我嗎
    打擾了

  8. Floye says:

    您好
    我根據您上面對其他人的回覆
    但我不太清楚要如何把getPlurks的值
    跟之後的respondToPlurk連接在一起
    我只能改respondToPlurk中的連接去po
    沒辦法抓到getplurk後 自動連接到對應的噗
    可以請教一下嗎
    打擾了

  9. roga says:

    應該是觀察一下 RLPlurkAPI::getPlurks() 這個方法回傳的是什麼,然後:

    $plurks = $plurk->getPlurks($plurk->uid);
    
    foreach($plurks as $row)
    {
         print_r($row);
         $msg = $plurk->respondToPlurk($row['plurk_id'],
                                       'tr_ch',
                                       'says',
                                       'your content');
         print_r($msg);
    }
    
  10. willy says:

    可以請問一下roga大嗎?
    今天(11/30)我用裡面的print_r($plurk->getPlurks($plurk->uid,’T’,’T’));
    為什麼出來的都不是我要的結果??
    也找過很多資料,但好像沒有有相關問題
    謝謝

  11. willy says:

    @@上面的程式碼日期不見了……print_r($plurk->getPlurks($plurk->uid,’ T ‘,’ T ‘));

    • roga says:

      請問您要的結果是?
      上面程式碼的解釋是:在登入後,

      $plurks = $plurk->getPlurks($plurk->uid);
      

      的作用是把 $plurk->uid 的河道上面的噗指定給 $plurks 。

  12. willy says:

    恩…我是想要說取得我指定的日期plurks
    只是我照著他function裡面註解的方式打
    結果都跟原本沒有指定日期一樣
    謝謝

  13. Ming Tsay says:

    $rtn = $plurk->get_unread_plurks(time(), 0);
    請問傳回來的值順序是?

Leave a Reply

Your email address will not be published.