摘要:前言用的包很容易就能寫一個(gè)人工智能聊天機(jī)器人。他開(kāi)發(fā)了一個(gè)叫的機(jī)器人并且贏了幾個(gè)人工智能的獎(jiǎng)項(xiàng)。這條在它收到一個(gè)以開(kāi)始的消息時(shí)會(huì)隨機(jī)回復(fù)。那也有一個(gè)可以讓你玩點(diǎn)的機(jī)器人。機(jī)器人需要變活。這就要靠機(jī)器人大腦文件了??聪鹿?jié)寫命令給機(jī)器人。
前言
用python的AIML包很容易就能寫一個(gè)人工智能聊天機(jī)器人。 AIML是Artificial Intelligence Markup Language的簡(jiǎn)寫, 但它只是一個(gè)簡(jiǎn)單的XML。 下面的代碼例子會(huì)帶你寫一個(gè)你自己的Python人工智能聊天機(jī)器人。
什么是AIML?AIML是Richard Wallace開(kāi)發(fā)的。 他開(kāi)發(fā)了一個(gè)叫A.L.I.C.E(Artificial Linguistics Internet Computer Entity)的機(jī)器人并且贏了幾個(gè)人工智能的獎(jiǎng)項(xiàng)。 有趣的是, 其中一個(gè)圖靈測(cè)試是讓一個(gè)人在文本界面跟一個(gè)機(jī)器人聊幾分鐘,看看人們是否認(rèn)為它是個(gè)人類。 AIML是一種定義了匹配模式和決定響應(yīng)的規(guī)則的一種XML。
要看完整的AIML入門,可以看一下 Alice Bot"s AIML Primer.你可以在AIML wiki頁(yè)學(xué)更多關(guān)于AIML的知識(shí)并知道它能做什么。 我們先寫一些AIML文件并用Python給它一點(diǎn)生命。
寫標(biāo)準(zhǔn)啟動(dòng)文件標(biāo)準(zhǔn)是寫一個(gè)叫std-startup.xml的啟動(dòng)文件作為載入AIML文件的主入口點(diǎn)。 這個(gè)例子里我們會(huì)寫一個(gè)可以匹配一個(gè)模式并做一個(gè)動(dòng)作的基本文件。 我們想要匹配模式load aiml b, 然后讓它載入我們的aiml大腦。我們會(huì)花一分鐘寫一個(gè)basic_chat aiml文件。
寫AIML文件LOAD AIML B basic_chat.aiml
上面我們寫了一個(gè)只處理一種模式的AIML文件,load aiml b。當(dāng)我們輸入那條命令給機(jī)器人,它會(huì)加載basic_chat.aiml。當(dāng)我們沒(méi)寫這個(gè)文件的時(shí)候是不會(huì)工作的。這里是你可以放到basic_chat.aiml的內(nèi)容。我們會(huì)匹配兩個(gè)基本模式和響應(yīng)。
隨機(jī)回復(fù)HELLO Well, hello!WHAT ARE YOU I"m a bot, silly!
我們也可以加一些隨機(jī)回復(fù)。這條在它收到一個(gè)以“One time I"開(kāi)始的消息時(shí)會(huì)隨機(jī)回復(fù)。 *是一個(gè)占位符代表能匹配任何字符。
用現(xiàn)成的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文件很有意思,但會(huì)是個(gè)很大的工作量。我想它需要大約一萬(wàn)的模式才能看起來(lái)真實(shí)一點(diǎn)。幸好,ALICE基金提供很多免費(fèi)的AIML文件??梢栽贏lice Bot網(wǎng)站看看AIML文件。那有個(gè)叫std-65-percent.xml文件包括了常規(guī)65%的場(chǎng)景。那也有一個(gè)可以讓你玩21點(diǎn)(BlackJack)的機(jī)器人。
寫Python到目前為止,所有的東西都是AIML XML文件。這些是可以構(gòu)造機(jī)器人大腦的重要部分,但這些只是一些信息。機(jī)器人需要變活。你需要用一些語(yǔ)言來(lái)實(shí)現(xiàn)AIML規(guī)范,但一些好心人已經(jīng)用Python做了。
先用pip裝aiml包。
pip install aiml
記住aiml包只能在Python 2下用。 Python 3可以用GitHub上的Py3kAiml替代。
簡(jiǎn)單Python程序這是我們能啟動(dòng)的最簡(jiǎn)單的程序。它建一個(gè)aiml對(duì)象,學(xué)習(xí)啟動(dòng)文件,并加載剩下的aiml文件。這之后,就可以聊天了,然后我們進(jìn)入一個(gè)無(wú)限循環(huán)并持續(xù)讓用戶輸入消息。你需要輸入一個(gè)機(jī)器人能識(shí)別的模式。模式識(shí)別依賴于你之前加載的AIML文件。
我們寫個(gè)多帶帶的啟動(dòng)文件,這樣我們可以不用動(dòng)程序源碼加載更多的aiml文件。我們可以在啟動(dòng)xml文件加更多的文件來(lái)學(xué)習(xí)。
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 >> "))加速大腦啟動(dòng)
當(dāng)你有很多AIML文件,這需要學(xué)很長(zhǎng)時(shí)間。這就要靠機(jī)器人大腦文件了。在機(jī)器人學(xué)習(xí)了所有的AIML文件后并可以直接把大腦存到一個(gè)文件里,這樣在下次啟動(dòng)時(shí)就可以直接加速。
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 >> "))運(yùn)行中重載AIML
你可以在運(yùn)行時(shí)發(fā)重載消息給機(jī)器人來(lái)重載AIML文件。記住如果你使用了之前寫的大腦方法,重載不會(huì)節(jié)省剛對(duì)大腦做的改動(dòng)。你需要?jiǎng)h除大腦文件一遍下次啟動(dòng)時(shí)可以重建,或者你需要改代碼讓機(jī)器人在下次重載后的一個(gè)時(shí)間點(diǎn)來(lái)保存大腦??聪鹿?jié)寫Python命令給機(jī)器人。
load aiml b加Python命令
如果你要給你的機(jī)器人加一些命令來(lái)運(yùn)行Python函數(shù),那你需要捕獲機(jī)器人的輸入信息并在發(fā)給kernel.respond()前處理它。上個(gè)例子我們從raw_input得到了用戶的輸入。我們可以從很多地方得到輸入。比如一個(gè)TCP socket,或一個(gè)語(yǔ)音轉(zhuǎn)文本的源。在它發(fā)給AIML前處理它。你需要在某些消息時(shí)跳過(guò)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會(huì)話和斷言
通過(guò)一個(gè)會(huì)話,AIML可以區(qū)分不同人的不同的對(duì)話。例如,如果一個(gè)人告訴機(jī)器人她的名字是Alice,另一個(gè)人告訴機(jī)器人他的名字是Bob,機(jī)器人可以區(qū)分他們。為了指定你在用哪個(gè)會(huì)話你可以傳給respond()第二個(gè)參數(shù)。
sessionId = 12345 kernel.respond(raw_input(">>>"), sessionId)
這樣每個(gè)客戶都有個(gè)性化的聊天,很好。你可以生成你自己的session id(會(huì)話id)并跟蹤他們。記住保存大腦文件并不會(huì)保存所有會(huì)話值。
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中我們可以在模板中設(shè)置response來(lái)設(shè)置斷言。
MY DOGS NAME IS * That is interesting that you have a dog namedWHAT IS MY DOGS NAME Your dog"s name is.
用上面的AIML你可以告訴機(jī)器人:
My dogs name is Max
然后機(jī)器人會(huì)回復(fù):
That is interesting that you have a dog named Max
如果你問(wèn):
What is my dogs name?
機(jī)器人會(huì)回答:
Your dog"s name is Max.更多資料
AIML Tag Reference Table
原文:http://www.devdungeon.com/con...
本文來(lái)自微信平臺(tái)「麥芽面包」
微信公眾號(hào)「darkjune_think」轉(zhuǎn)載請(qǐng)注明。
微信掃一掃關(guān)注公眾號(hào)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/38306.html
摘要:夏天太熱,又不想出門,就讓我們用的來(lái)搭建屬于自己的可以對(duì)話的老婆吧本文擬使用的開(kāi)發(fā)語(yǔ)言實(shí)現(xiàn)類似于的平臺(tái)的小娜,或者是下的的。 夏天太熱,又不想出門,就讓我們用的Python來(lái)搭建屬于自己的?可以對(duì)話的AI老婆吧? 本文擬使用Python的開(kāi)發(fā)語(yǔ)言實(shí)現(xiàn)類似于的WIndows平臺(tái)的小娜,或者是IOS下的Siri的。最終達(dá)到人機(jī)對(duì)話的效果。 showImg(https://segment...
摘要:能不能省掉這些煩瑣的步驟,讓開(kāi)發(fā)人員自己完成呢現(xiàn)在好了,你可以用和把聊天機(jī)器人接入微信工具資源掘金今晚看了個(gè)電影,回得有點(diǎn)遲。 小花貓-網(wǎng)頁(yè)聊天機(jī)器人 - 前端 - 掘金 基于圖靈機(jī)器人API的網(wǎng)頁(yè)聊天機(jī)器人,輸入二維碼+你要說(shuō)的話有驚喜哦~~~(菜單中的功能尚未開(kāi)發(fā)完成,玩玩聊天功能就好了~)代碼開(kāi)源在https://github.com/ColorfulCa... 了~... (英...
摘要:聊天機(jī)器人從世紀(jì)年代起相繼出現(xiàn)愛(ài)情玩偶等,其中曾被認(rèn)為是最聰明的機(jī)器人。顯然現(xiàn)有的聊天機(jī)器人沒(méi)有一個(gè)可以達(dá)到這個(gè)標(biāo)準(zhǔn)。 聊天機(jī)器人從20世紀(jì)80年代起相繼出現(xiàn):TalkBot、Elbot、eLise、Alice、Laylahbot、愛(ài)情玩偶等,其中Alice曾被認(rèn)為是最聰明的機(jī)器人。 1991年,美國(guó)科學(xué)家兼慈善家休·勒布納設(shè)立人工智能年度比賽——勒布納獎(jiǎng):金獎(jiǎng)為在音視頻中都要讓人無(wú)法...
摘要:基于的聊天天機(jī)器人本文章中講介紹用實(shí)現(xiàn)的一個(gè)小聊天機(jī)器人程序,用到了操作相關(guān)的知識(shí)和數(shù)據(jù)庫(kù),可以用來(lái)學(xué)習(xí)。關(guān)于數(shù)據(jù)庫(kù)存儲(chǔ)日志的表是存儲(chǔ)和的有關(guān)屬性的表相當(dāng)于我們聊天機(jī)器人的腦袋,幫我們記住一些屬性。 基于AIML的PHP聊天天機(jī)器人 本文章中講介紹用PHP實(shí)現(xiàn)的一個(gè)小聊天機(jī)器人程序,用到了php操作dom相關(guān)的知識(shí)和mysql數(shù)據(jù)庫(kù),可以用來(lái)學(xué)習(xí)。代碼可以從https://github...
閱讀 4758·2021-11-15 11:39
閱讀 2700·2021-11-11 16:55
閱讀 2208·2021-10-25 09:44
閱讀 3512·2021-09-22 16:02
閱讀 2444·2019-08-30 15:55
閱讀 3132·2019-08-30 13:46
閱讀 2674·2019-08-30 13:15
閱讀 1959·2019-08-30 11:12