基於AIML的PHP聊天機器人

2021-03-06 php中文網最新課程

chatbot:基於AIML的PHP聊天天機器人

本文章中講介紹用PHP實現的一個小聊天機器人程序,用到了php操作dom相關的知識和mysql資料庫,可以用來學習。

0. 提醒

該聊天機器人是參考AIML 2.5和Program-P而寫成的,這聊天機器人實現的aiml標籤和標準的aiml標籤由一定的差距,所以你從網上下載的aiml語料庫可能沒法正常工作。

適用於UTF-8編碼的,單詞後綴根據不同的時態而改變的那些語言。

感興趣的朋友可以自己研究學習一下。

1. 介紹

這是一個用PHP寫的aiml解析器,目前在PHP5.4環境上能正常運行。

2. 資料庫配置

本程序用了MySQL資料庫,你需要把chatbot.sql 文件倒入到你的資料庫,然後在chatbot/Config.php文件裡修改相關資料庫配置變量.

4. aiml語料庫資源

你可以直接編輯 aiml/chatbot.aiml 文件或者創建一個新的aiml文件然後在aiml/chatbot.aiml文件用include標籤引入它。

5. 關於aiml文件

aiml 必須要放在 aiml 目錄內.

chatbot.aiml 是入口文件 ,它裡面的 aiml 標籤可以包含多個 category 標籤 , 一個 default標籤和多個 include標籤。

被你添加的其它 aiml 文件在根aiml標籤裡必須要包含一個 topic 標籤 , 這個topic標籤可以包含多個 category 標籤和一個default標籤 (這裡的其他aiml文件不能寫include標籤,include標籤只能出現在chatbot.aiml文件裡)。

6. 測試聊天機器人

你可以打開index.php進行和機器人聊天做測試。

7. 調用聊天機器人

如果希望在自己的應用裡面調用聊天機器人我們可以這樣調用它的api api.php?requestType=talk&input=你好

8. 關於匹配規則

修改之後的匹配規則 :

* ---> (\S+)
# ---> \S+
_ ---> .*
= ---> \S*

9. 關於AIML標籤

本聊天機器人的aiml標籤和標準aiml標籤有所不同,我根據需求對標籤做了一些個性化,我們可以在AIML.MD文件裡面查到更多本聊天機器人所支持的標籤。

10. 關於api.php的返回數據

{
"status": "success",
"type": "talk",
"message": "haha ...",
"data": {
"arr1": {
"name11": "value11",
"name12": "value12"
},
"arr2": {
"name21": "value21",
"name22": "value22"
}
}
}

當你訪問 api.php?requestType=talk&userInput=haha 的時候能得到以上json數據 .
<category>
<pattern>haha</pattern>
<template>
<data name="arr1">
<attr name="name11">value11</attr>
<attr name="name12">value12</attr>
</data>
<data name="arr2">
<attr name="name21">value21</attr>
<attr name="name22">value22</attr>
</data>
haha ...
</template>
</category>

11. 關於userId

當你給api.php以GET方式發送請求的時候帶了userId參數, 這個參數會當作用戶的唯一標識。若你沒給這個參數,程序會用用戶的ip當作唯一標示。

$userId = isset($_REQUEST['userId']) ? $_REQUEST['userId'] : $_SERVER['REMOTE_ADDR'];

12. 關於多個chatbot

如果你把'chatbot/Config.php'文件裡面的multiChatbot設置成false,所有的用戶會分享一個default的chatbot。

當你設置成true的時候每個用戶都會擁有獨立的chatbot,這些chatbot會吧userId作為唯一標示,每個用戶給自己的chatbot設置相關名字,性別,年齡之類的屬性。

當你在寫一個語音助手之類的時候多個chatbot功能會特別好用,因為用戶可以給自己的語音助手設置名字了。

$user = $this->getUser($this->_unique);
if ($this->_config->multiChatbot){
$bot = $this->getBot($this->_unique);
} else {
$bot = $this->getBot("default");
}

13. 關於userInfo和botInfo

userInfo和botInfo是指用戶和聊天機器人的一些屬性,例如姓名,年齡,性別等等。

用戶可以改變這些屬性,當然這是我們當寫aiml語料庫的時候通過一些標籤來實現的,我們可以從AIML.MD 學習set, get, del, user, bot等有關標籤。

<category>
<pattern>my name is *</pattern>
<template>
ok , your name is
<star/>
<set type="user" name="name">
<star/>
</set>
</template>
</category>
<category>
<pattern>what is my name</pattern>
<template>
oh , your name is
<get type="user" name="name"/>
, i remembered it last time ...
</template>
</category>

14. 關於資料庫

log 存儲日誌的表 .

property 是存儲user和bot的有關屬性的表 , 相當於我們聊天機器人的腦袋,幫我們記住一些屬性。 set ,get, del, user, bot 等標籤是用來操作這個表的 .

data 表用來存儲用戶的輸入,機器人的回覆,input , that, topic 等標籤會操作Parser::$_data數組,每次程序開始運行的時候程序會從這個表加載數據到這個數組裡,然後程序要結束的時候再會存儲到這個表裡面。表的唯一標示還是userId。

源碼

https://github.com/kompasim/chatbot

-END-

▼請點擊下方:「閱讀原文」,在線查看全部文章內容!

相關焦點

  • 用AIML寫一個聊天機器人
    </template></category>       <category><pattern>WOULD ALICE *</pattern><template><srai>WOULD YOU <star/> </srai> </template></category
  • 人工智慧標記語言AIML聊天機器人:產生、業界、種類、應用、實例、知識、公司和AIML概述(20k字經典收藏版)
    [2]  3、中文聊天機器人技術的發展基於中文聊天的機器人技術也日趨成熟,國內已經出現了不少智能聊天機器人,比如贏思軟體的小i,愛博的小A、小強和愛情玩偶等等。這些機器人也已經日益成為網民上網的好夥伴。
  • 基於規則和檢索的聊天機器人引擎 | 雷鋒網
    第一篇傳送門:《聊天機器人的發展狀況與分類》。在上一篇文章中,介紹了聊天機器人目前的發展。本篇主要介紹基於規則的,檢索的聊天機器人引擎 - Bot Engine.今天本文所要討論的是logic,而且是基於規則引擎的logic, 基於機器學習的部分將在以後的文章中討論。Conversation Model在兩個人之間的對話,可以用下面這個模型表示,雙方頭腦中所要向對方表達的目標,需要通過語言來交換意見,為了達成共識,二者需要在一個語境下。
  • 基於chatterbot-corpus的中文聊天機器人快速構建
    背景基於公眾號接入百度unit,定製你的智能聊天小機器人的描述,使用百度unit對於已經預置的技能,效果比較好
  • 聊天機器人的發展狀況與分類
    通過這三個服務, 就可以構建聊天機器人並且發布上線。不管是像微軟這樣的大公司,還是像Operator在垂直領域提供服務的創業公司,都將聊天機器人看成是下一代人機互動的服務形態,聊天機器人不單純的提供了一個新的服務渠道,它還改變了服務本身,即通過歷史數據訓練Language Model,來部分取代人的作用,聊天機器人對信息的組織和處理能力,在搜尋引擎基礎上,又往前邁了一大步。
  • Chatopera 開源多個聊天機器人對話模板 | Chatopera 讓聊天機器人...
    隨著人工智慧以及自然語言處理等技術的發展,企業、政府以及其他一些社會組織對聊天機器人提升自動化和智能化越來越期待,但是要很方便的應用聊天機器人於業務當中還是有一定的門檻。為此Chatopera在結合市場反饋以及自身思考,不斷推出更加的簡單的易用的設計、開發、運維和優化Chatbot的方法論以及實戰經驗,並且將其開源。
  • 能理解聊天記錄的微信機器人 (一)
    最近看到了一些基於微信機器人的有意思的應用,比如用微信匯報模型的訓練狀態(TensorFlow,Keras)。這個是個很好的出發點。聊天機器人 (chatbot) 這個概念在 slack, telegram, skype 甚至最早的 google wave 上面流行已經有一段時間了。大家主要用它來:進行一些推送服務 。一個例子就是上面的模型訓練。
  • 基於檢索的聊天機器人的實現
    首先基於檢索的對話系統,將回復使用的數據預先存儲,那麼優點就是回復的內容不會有語法和語義的錯誤,但因為不會像基於生成的對話系統那樣創造出新的回答,因此也無法對未訓練的問題作出回答。本篇是聊天系統的第一篇文章,參考博客deep-learning-for-chatbots-part-1和deep-learning-for-chatbots-part-1,另外附上中文翻譯。
  • 最後一天,《聊天機器人,ChatBot》!
    《聊天機器人Chatbot》第一期 郭棟, 美國南加州大學 計算機系博士本科就讀於中國科技大學物理系;在TRB, ICASSP, TKDE 發表過數篇會議與期刊文章,並有一篇JMLR文章在審;曾在Google Machine Intelligence實習工作,實習期間從事對聊天機器人系統的實踐
  • 不會「聊天」的聊天機器人:為什麼Siri這麼「蠢」?
    Gartner的調查顯示,到2021年,超過50%的企業每年在聊天機器人上的花費比開發傳統手機應用還要多;到2022年,聊天機器人有望幫助企業節約800萬美元的成本;到2023年,藉助於聊天機器人,企業和客戶有望節約25億小時;到2024年,全世界聊天機器人的市場規模有望超過13億美元。
  • 如何通過聊天撩人才|不會聊天的機器人不是好HR
    隨著人工智慧技術的不斷發展,智能聊天機器人的出現和普及已經不再變得稀奇。根據Gartner預測, 2020年,人們與聊天機器人的對話頻率甚至會超過與配偶。智能聊天機器人的應用也潛移默化影響改變了人才招聘市場。良好的求職體驗是吸引候選人的重要因素。
  • 聊天機器人對知識圖譜有哪些特殊的需求?
    例如,機器人喜歡的明星需要和實體知識圖譜中的明星娛樂圖譜關聯;同樣,機器人的愛好需要與興趣圖譜關聯;機器人需要與用戶形成親人、好友、僱傭等社會關係。2.聊天機器人不僅需要靜態知識圖譜,還需要動態知識圖譜若一個聊天機器人想要更像人,就需要從早到晚做不同的事情,也就是需要有自己的生活規律,研發時又該如何刻畫這個聊天機器人的生活軌跡呢?
  • 社交軟體的伴侶:聊天機器人,你領了沒有?
    ——微軟CEO Satya Nadella人們在社交網絡的上熱情在慢慢衰退,引入聊天機器人可以讓Messenger的用戶更為活躍。——Facebook韓劇迷都會知道,有一款軟體在好多韓劇裡各種搶鏡,這就是基於日本本土而在韓國等亞太地區流行的聊天軟體LINE。而最近消息稱LINE將宣布開發機器人,與FACEBOOK、微信一決高下。
  • 大家說 | 淺談智能聊天機器人的設計及應用
    典型的聊天機器人應用有以下幾種:• 問題諮詢:基於業務知識庫進行業務問題解答• 數據檢索:縱跨各業務系統或資料庫,檢索數據或文檔• 業務處理:對接相關業務系統轉達指令,完成相應業務操作• 閒聊:回答用戶的一些問候
  • 構建屬於自己的「聊天機器人」——NLP系列
    圖源:Unsplash什麼是聊天機器人?聊天機器人,顧名思義,是一個可以同你聊天的機器。構建聊天機器人的秘訣是使之越來越像人。從「美國運通客戶支持」到「Google Pixel呼叫篩選軟體」,我們生活中的聊天機器人形態各異,越來越豐富多彩。聊天機器人實際上是怎樣工作呢?
  • 聊天機器人應用趨勢跟蹤月報
    百度前任首席科學家吳恩達日前宣布以董事長的身份加入才成立一年的機器人聊天公司 Woebot。Woebot是一款醫療類 AI 聊天機器人,由美國心理學教授Alison Darcy發明,主要用於緩解使用者的抑鬱、焦慮症狀。用戶需要測試是否存在抑鬱、焦慮等症狀,之後聊天機器人就會針對用戶的狀況與之對話。
  • 五種最流行的聊天機器人介紹
    學習和非學習型聊天機器人聊天機器人可以大致分為學習型聊天機器人和非學習型聊天機器人。所有學習聊天機器人都使用機器學習和自然語言處理來理解請求並提供適當響應。這些聊天機器人存儲與客戶的先前對話,並從這些互動中學習,隨著時間推移,它們的回答會變得更好。另一方面,非學習聊天機器人只回答一組預先定義的問題。
  • 開源專題二:Top 5開源聊天機器人平臺分析
    在人工智慧時代,聊天機器人逐漸成為企業和用戶之間溝通的必備渠道之一。但是,隨著開源技術的發展,聊天機器人的技術門檻在逐漸降低,大有快速普及的趨勢。開源機器人很像當前流行的Web應用程式,在網際網路上,聊天機器人通過API發送和接收消息,讀取和寫入文件以及執行常規任務,與個大即時通信平臺通信,自動翻譯不同語言等,將逐漸形成一套標準的機器人與機器人通信接口。
  • 會說話的機器人上崗 但讓它們好好聊天仍是個技術活
    「剛剛還是一群在認真聊天的機器人,卻可能因某一個機器人的話鋒一轉,整個話題就被帶入尬聊場景。就像那個推薦手機的話題,明明是在聊手機,就因為一個機器人說了小米,整個話題就變成了美食和養生。」大賽組委會委員、哈爾濱工業大學副教授張偉男介紹說,通過這次比賽,我們看到機器人們的聊天能力有所增強,但是與真人聊天相比還存在幾個問題:多樣性程度比較低,語言比較貧乏,回復重複率高;一致性能力弱,同一個群聊下,機器人經常前後回復出現矛盾;主題漂移,就是我們常說的跑題,幾乎每個群聊到最後都跑題;質量不穩定,回復質量差的機器人嚴重影響群聊質量,機器人不能很好地篩選對話歷史進行回複決策。
  • 養老、問診、心理諮詢,和聊天機器人聊聊未來醫療
    在科技升級、遠程醫療成未來大趨勢的背景下,聊天機器人仍潛力可觀。聊天機器人步入醫療圈chatbot又可簡稱為bot,即聊天機器人。需要注意的是,這裡的chatbot並非實體的機器人,而是指以聊天界面為基礎(可以是文本聊天,也可以是語音聊天),通過聊天解決用戶需求的一種服務模式,類似於虛擬助理。