摘要:前言用的包很容易就能寫一個人工智能聊天機器人。他開發了一個叫的機器人并且贏了幾個人工智能的獎項。這條在它收到一個以開始的消息時會隨機回復。那也有一個可以讓你玩點的機器人。機器人需要變活。這就要靠機器人大腦文件了。看下節寫命令給機器人。
前言
用python的AIML包很容易就能寫一個人工智能聊天機器人。 AIML是Artificial Intelligence Markup Language的簡寫, 但它只是一個簡單的XML。 下面的代碼例子會帶你寫一個你自己的Python人工智能聊天機器人。
什么是AIML?AIML是Richard Wallace開發的。 他開發了一個叫A.L.I.C.E(Artificial Linguistics Internet Computer Entity)的機器人并且贏了幾個人工智能的獎項。 有趣的是, 其中一個圖靈測試是讓一個人在文本界面跟一個機器人聊幾分鐘,看看人們是否認為它是個人類。 AIML是一種定義了匹配模式和決定響應的規則的一種XML。
要看完整的AIML入門,可以看一下 Alice Bot"s AIML Primer.你可以在AIML wiki頁學更多關于AIML的知識并知道它能做什么。 我們先寫一些AIML文件并用Python給它一點生命。
寫標準啟動文件標準是寫一個叫std-startup.xml的啟動文件作為載入AIML文件的主入口點。 這個例子里我們會寫一個可以匹配一個模式并做一個動作的基本文件。 我們想要匹配模式load aiml b, 然后讓它載入我們的aiml大腦。我們會花一分鐘寫一個basic_chat aiml文件。
寫AIML文件LOAD AIML B basic_chat.aiml
上面我們寫了一個只處理一種模式的AIML文件,load aiml b。當我們輸入那條命令給機器人,它會加載basic_chat.aiml。當我們沒寫這個文件的時候是不會工作的。這里是你可以放到basic_chat.aiml的內容。我們會匹配兩個基本模式和響應。
隨機回復HELLO Well, hello!WHAT ARE YOU I"m a bot, silly!
我們也可以加一些隨機回復。這條在它收到一個以“One time I"開始的消息時會隨機回復。 *是一個占位符代表能匹配任何字符。
用現成的AIML文件ONE TIME I * Go on. How old are you? Be more specific. I did not know that. Are you telling the truth? I don"t know what that means. Try to tell me that another way. Are you talking about an animal, vegetable or mineral? What is it?
寫自己的AIML文件很有意思,但會是個很大的工作量。我想它需要大約一萬的模式才能看起來真實一點。幸好,ALICE基金提供很多免費的AIML文件??梢栽贏lice Bot網站看看AIML文件。那有個叫std-65-percent.xml文件包括了常規65%的場景。那也有一個可以讓你玩21點(BlackJack)的機器人。
寫Python到目前為止,所有的東西都是AIML XML文件。這些是可以構造機器人大腦的重要部分,但這些只是一些信息。機器人需要變活。你需要用一些語言來實現AIML規范,但一些好心人已經用Python做了。
先用pip裝aiml包。
pip install aiml
記住aiml包只能在Python 2下用。 Python 3可以用GitHub上的Py3kAiml替代。
簡單Python程序這是我們能啟動的最簡單的程序。它建一個aiml對象,學習啟動文件,并加載剩下的aiml文件。這之后,就可以聊天了,然后我們進入一個無限循環并持續讓用戶輸入消息。你需要輸入一個機器人能識別的模式。模式識別依賴于你之前加載的AIML文件。
我們寫個多帶帶的啟動文件,這樣我們可以不用動程序源碼加載更多的aiml文件。我們可以在啟動xml文件加更多的文件來學習。
import aiml # Create the kernel and learn AIML files kernel = aiml.Kernel() kernel.learn("std-startup.xml") kernel.respond("load aiml b") # Press CTRL-C to break this loop while True: print kernel.respond(raw_input("Enter your message >> "))加速大腦啟動
當你有很多AIML文件,這需要學很長時間。這就要靠機器人大腦文件了。在機器人學習了所有的AIML文件后并可以直接把大腦存到一個文件里,這樣在下次啟動時就可以直接加速。
import aiml import os kernel = aiml.Kernel() if os.path.isfile("bot_brain.brn"): kernel.bootstrap(brainFile = "bot_brain.brn") else: kernel.bootstrap(learnFiles = "std-startup.xml", commands = "load aiml b") kernel.saveBrain("bot_brain.brn") # kernel now ready for use while True: print kernel.respond(raw_input("Enter your message >> "))運行中重載AIML
你可以在運行時發重載消息給機器人來重載AIML文件。記住如果你使用了之前寫的大腦方法,重載不會節省剛對大腦做的改動。你需要刪除大腦文件一遍下次啟動時可以重建,或者你需要改代碼讓機器人在下次重載后的一個時間點來保存大腦。看下節寫Python命令給機器人。
load aiml b加Python命令
如果你要給你的機器人加一些命令來運行Python函數,那你需要捕獲機器人的輸入信息并在發給kernel.respond()前處理它。上個例子我們從raw_input得到了用戶的輸入。我們可以從很多地方得到輸入。比如一個TCP socket,或一個語音轉文本的源。在它發給AIML前處理它。你需要在某些消息時跳過AIML。
while True: message = raw_input("Enter your message to the bot: ") if message == "quit": exit() elif message == "save": kernel.saveBrain("bot_brain.brn") else: bot_response = kernel.respond(message) # Do something with bot_response會話和斷言
通過一個會話,AIML可以區分不同人的不同的對話。例如,如果一個人告訴機器人她的名字是Alice,另一個人告訴機器人他的名字是Bob,機器人可以區分他們。為了指定你在用哪個會話你可以傳給respond()第二個參數。
sessionId = 12345 kernel.respond(raw_input(">>>"), sessionId)
這樣每個客戶都有個性化的聊天,很好。你可以生成你自己的session id(會話id)并跟蹤他們。記住保存大腦文件并不會保存所有會話值。
sessionId = 12345 # Get session info as dictionary. Contains the input # and output history as well as any predicates known sessionData = kernel.getSessionData(sessionId) # Each session ID needs to be a unique value # The predicate name is the name of something/someone # that the bot knows about in your session with the bot # The bot might know you as "Billy" and that your "dog" is named "Brandy" kernel.setPredicate("dog", "Brandy", sessionId) clients_dogs_name = kernel.getPredicate("dog", sessionId) kernel.setBotPredicate("hometown", "127.0.0.1") bot_hometown = kernel.getBotPredicate("hometown")
在AIML中我們可以在模板中設置response來設置斷言。
MY DOGS NAME IS * That is interesting that you have a dog namedWHAT IS MY DOGS NAME Your dog"s name is.
用上面的AIML你可以告訴機器人:
My dogs name is Max
然后機器人會回復:
That is interesting that you have a dog named Max
如果你問:
What is my dogs name?
機器人會回答:
Your dog"s name is Max.更多資料
AIML Tag Reference Table
原文:http://www.devdungeon.com/con...
本文來自微信平臺「麥芽面包」
微信公眾號「darkjune_think」轉載請注明。
微信掃一掃關注公眾號。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38306.html
摘要:夏天太熱,又不想出門,就讓我們用的來搭建屬于自己的可以對話的老婆吧本文擬使用的開發語言實現類似于的平臺的小娜,或者是下的的。 夏天太熱,又不想出門,就讓我們用的Python來搭建屬于自己的?可以對話的AI老婆吧? 本文擬使用Python的開發語言實現類似于的WIndows平臺的小娜,或者是IOS下的Siri的。最終達到人機對話的效果。 showImg(https://segment...
摘要:能不能省掉這些煩瑣的步驟,讓開發人員自己完成呢現在好了,你可以用和把聊天機器人接入微信工具資源掘金今晚看了個電影,回得有點遲。 小花貓-網頁聊天機器人 - 前端 - 掘金 基于圖靈機器人API的網頁聊天機器人,輸入二維碼+你要說的話有驚喜哦~~~(菜單中的功能尚未開發完成,玩玩聊天功能就好了~)代碼開源在https://github.com/ColorfulCa... 了~... (英...
摘要:聊天機器人從世紀年代起相繼出現愛情玩偶等,其中曾被認為是最聰明的機器人。顯然現有的聊天機器人沒有一個可以達到這個標準。 聊天機器人從20世紀80年代起相繼出現:TalkBot、Elbot、eLise、Alice、Laylahbot、愛情玩偶等,其中Alice曾被認為是最聰明的機器人。 1991年,美國科學家兼慈善家休·勒布納設立人工智能年度比賽——勒布納獎:金獎為在音視頻中都要讓人無法...
摘要:基于的聊天天機器人本文章中講介紹用實現的一個小聊天機器人程序,用到了操作相關的知識和數據庫,可以用來學習。關于數據庫存儲日志的表是存儲和的有關屬性的表相當于我們聊天機器人的腦袋,幫我們記住一些屬性。 基于AIML的PHP聊天天機器人 本文章中講介紹用PHP實現的一個小聊天機器人程序,用到了php操作dom相關的知識和mysql數據庫,可以用來學習。代碼可以從https://github...
閱讀 4723·2021-11-15 11:39
閱讀 2691·2021-11-11 16:55
閱讀 2200·2021-10-25 09:44
閱讀 3504·2021-09-22 16:02
閱讀 2433·2019-08-30 15:55
閱讀 3122·2019-08-30 13:46
閱讀 2656·2019-08-30 13:15
閱讀 1944·2019-08-30 11:12