关键词:
借助 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(http://www.alicebot.org/documentation/aiml-primer.html)。你同样可以在 AIML Wikipedia page(https://en.wikipedia.org/wiki/AIML)了解更多 AIML 的内容以及它能够做什么。我们首先将创建 AIML 文件,并用 Python 赋予它生命。
创建标准的启动文件
创建一个启动文件 std-startup.xml 作为读取AIML文件的主入口点是标准做法。在这里,将创建了一个初始文件用来匹配一种模式和进行一个动作。我们想匹配模式 load aiml b ,并且使它载入我们的 aiml 大脑作为响应。我们将即时创建 basic_chat.aiml 文件。
<aiml version="1.0.1" encoding="UTF-8">
<!-- www1.qixoo.com std-startup.xml -->
<!-- <category> 作为AIML的原子级单元 -->
<category>
<!-- 匹配用户输入的模式 -->
<!-- 如果用户输入 "LOAD AIML B" -->
<pattern>LOAD AIML B</pattern>
<!-- <Template> 用来响应模式 -->
<!-- <learn>是一个aiml文件 -->
<template>
<learn>basic_chat.aiml</learn>
<!-- 在这下面你能添加更多的aiml文件 -->
<!--<learn>more_aiml.aiml</learn>-->
</template>
</category>
</aiml>
创建 AIML 文件
上面我们已经创建了只有一种模式句柄的 AIML 文件,load aiml b。当我们通过命令行运行这个机器人,它会尝试读取 basic_chat.aiml。除非我们已经完成创建,否则载入失败。下面的示例代码将告诉你 basic_chat.aiml 文件可以加入什么。我们将匹配两种基础的模式和响应。
<aiml version="1.0.1" encoding="UTF-8">
<!-- www1.qixoo.com basic_chat.aiml -->
<category>
<pattern>HELLO</pattern>
<template>
Well, hello!
</template>
</category>
<category>
<pattern>WHAT ARE YOU</pattern>
<template>
I‘m a bot, silly!
</template>
</category>
</aiml>
随机响应
你同样可以像下面的示例代码一样添加随机响应。当接收到“One time I”开头的信息(message),通配符“*”可以进行模糊匹配。
<category>
<pattern>ONE TIME I *</pattern>
<template>
<random>
<li>Go on.</li>
<li>How old are you?</li>
<li>Be more specific.</li>
<li>I did not know that.</li>
<li>Are you telling the truth?</li>
<li>I don‘t know what that means.</li>
<li>Try to tell me that another way.</li>
<li>Are you talking about an animal, vegetable or mineral?</li>
<li>What is it?</li>
</random>
</template>
</category>
借助已有的 AIML 文件
编写属于自己的 AIML 文件当然充满乐趣,但工作量也不小。我认为在它(机器人)能感知现实之前至少需要 10,000 中模式。所幸,ALICE基金会已经免费提供了部分 AIML 文件。Alice Bot website 可浏览这些文件。有一种说法是 std-65-percent.xml 包含了 65% 最常用的短语。还有一种说法是它可以让你和机器人玩二十一点。
运用 Python
目前为止,所有 XML 格式的 AIML 文件都准备好了。作为机器人大脑的组成部分,它们都很重要,不过目前它们只是信息(information)而已。机器人需要活过来。你可以借助任何语言定制 AIML,但某些好心人已经用 Python 这么做了。
首先用 pip 安装 aiml 包。
pip install aiml
注意,aiml 包只能在 Python2 环境下运行。也可以选择 Py3kAiml on GitHub (https://github.com/huntersan9/Py3kAiml)
最简单的 Python 程序
我们可以用如下最简单程序入门。它创建了 aiml 类,学习启动文件,然后读取其余 aiml 文件。接下来,它已经准备好聊天了,我们也进入了一个不断提示用户输入信息的死循环。你需要输入一个机器人能识别的模式。模式的识别取决于你载入的 AIML 文件。
因为我们建立启动文件作为独立实体,所以我们稍后可以对机器人添加更多 aiml 文件而不需要调试任何程序的源代码。只有在 xml 格式的 starup 下,我们才能添加更多文件。
import aiml
# 创建Kernel()和 AIML 学习文件
kernel = aiml.Kernel()
kernel.learn("std-startup.xml")
kernel.respond("load aiml b")
# 按组合键 CTRL-C 停止循环
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()已经等待使用了
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)
# bot_response() 回复某些信息
会话和谓词(Predicates)
通过指定会话,AIML 能根据不同对话者随机应变。举个例子,如果某人告诉机器人他们叫 Alice,另一个人则告诉机器人它叫 Bob,机器人可以分清他们。指定你需要的会话,将它作为第二个参数传递给 respond()。
sessionId = 12345
kernel.respond(raw_input(">>>"), sessionId)
和每个客户都能有个性化的对话——这棒极了。你不得不生成你特有的会话ID并追踪。记住保存大脑文件不要保存所有的会话值。
sessionId = 12345
# 将会话信息作为字典
# 包含输入输出的历史像已知谓词那样
sessionData = kernel.getSessionData(sessionId)
# 每个会话ID需要一个唯一的值
# 用会话中机器人已知的人或事给谓词命名
# 机器人已经知道你叫"Billy"而你的狗叫"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中,我们可以在 <template> 项中设置谓词。
<aiml version="1.0.1" encoding="UTF-8">
<category>
<pattern>MY DOGS NAME IS *</pattern>
<template>
That is interesting that you have a dog named <set name="dog"><star/></set>
</template>
</category>
<category>
<pattern>WHAT IS MY DOGS NAME</pattern>
<template>
Your dog‘s name is <get name="dog"/>.
</template>
</category>
</aiml>
通过以上 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
artificialintelligence(ai)
http://blog.jobbole.com/96676/#artificial-intelligence人工智能(ArtificialIntelligence)AIMLBot(Program#):使用C#编写的一个小型、快速、兼容标准、易于定制的聊天机器人,基于AIML(人工智能标记语言ArtificialIntelligenceMarkupLanguage)。SIML :... 查看详情
python快速搭建自动回复微信公众号(代码片段)
...信公众号在之前的一篇文章Python利用AIML和Tornado搭建聊天机器人微信订阅号中用aiml实现了一个简单的英文聊天机器人订阅号。但是只能处理英文消息,现在用图灵机器人来实现一个中文的聊天机器人订阅号。这里主要介绍如... 查看详情
自己动手开发智能聊天机器人完全指南(附完整源码)
...器人完全指南(附完整源码)》的第二篇,也是21天实战人工智能系列《知识图谱完全项目案例剖析》里面的知识图谱应用的案例。前文中实现了一个最基本的人工智能聊天机器人,其能力完全等同于刚出生的婴儿,还谈不上智... 查看详情
Chaquopy 不支持 AIML
...在尝试使用应该使用Python核心的AndroidStudio制作一个AI聊天机器人。我学习了如何使用Chaquopy在AndroidStudio中运行Python脚本,但是当我运行导入aiml库的.py文件时,总是出现“找不到输入匹配”错误。这是我使用Chaquopy在An 查看详情
markdown智能聊天机器人二次开发选型(代码片段)
聊天机器人中的人工智能 [关闭]
】聊天机器人中的人工智能[关闭]【英文标题】:ArtificialintelligenceinChatbots[closed]【发布时间】:2016-11-2108:13:01【问题描述】:我正在开发一个聊天机器人,该机器人将与客户互动。我想构建一个智能的、类似AI的机器人。我已经... 查看详情
nlp开发python实现聊天机器人(alice)(代码片段)
...提高个性化水平。当前聊天机器人用到的技术:大家常说人工智能的三大要素,包括数据、算法和算力。而在聊天机器人的技术体系下,最关 查看详情
有开发聊天机器人的教程吗? [关闭]
】有开发聊天机器人的教程吗?[关闭]【英文标题】:Anytutorialsfordevelopingchatbots?[closed]【发布时间】:2012-03-3104:42:10【问题描述】:作为一名工科学生,我想使用python制作一个聊天机器人。因此,我进行了很多搜索,但无法真正... 查看详情
人工智能作恶谁之过?
...族主义的内容,在Facebook上进行了病毒式传播。这有赖于人工智能协助下的“精准定位”:谁最容易相信阴谋论,谁对现实最不满?相应的政治广告和假新闻能精准地投放到这群人中,使人对自己的看法更加深信不疑。因为设计... 查看详情
chatgpt多个可用的聊天机器人
当今,聊天机器人已成为人工智能技术的热门应用之一。许多公司和开发者都在尝试使用聊天机器人来改善用户体验和提高效率。在这篇文章中,我们将分享一些常用的聊天机器人链接,让您可以更快地找到适合自己... 查看详情
chatgpt多个可用的聊天机器人
当今,聊天机器人已成为人工智能技术的热门应用之一。许多公司和开发者都在尝试使用聊天机器人来改善用户体验和提高效率。在这篇文章中,我们将分享一些常用的聊天机器人链接,让您可以更快地找到适合自己... 查看详情
当程序员的一个人无聊时,甚至用python开发出机器人看他们聊天
...员的一个人独孤的时候,甚至可以用Python开发出两个机器人看他们聊天当你无聊的时候,可能会刷一下手机看一下新闻,看看电视剧,发发呆。但是当程序员无聊起来的时候,甚至可以用Python开发两个机器人... 查看详情
智能聊天机器人技术研究与应用
文章大纲1.聊天机器人简介聊天机器人进化历史聊天机器人核心技术2.预训练模型与聊天机器人研究进展transfomer架构回顾预训练对话模型case1:个性化对话生成case2:半监督学习对话策略3.知识图谱与智能问答4.智能聊天机器人应... 查看详情
智能聊天机器人技术研究与应用
文章大纲1.聊天机器人简介聊天机器人进化历史聊天机器人核心技术2.预训练模型与聊天机器人研究进展transfomer架构回顾预训练对话模型case1:个性化对话生成case2:半监督学习对话策略3.知识图谱与智能问答4.智能聊天机器人应... 查看详情
10分钟用python告诉你两个机器人聊天能聊出什么火花(代码片段)
...的公众号哦!查看历史消息即可!现在不是讲各种各样的人工智能嘛,AI下棋,AI客服,AI玩家……其实我一直很好奇,两个AI碰上会怎样,比如一起下棋,一起打游戏……今天做个简单的小实验,看看两个AI一起聊天会是什么样... 查看详情
跟人聊天vs跟机器聊天,你更爱哪个?
...和交流的需求是根深蒂固的。现在大部分的交流都是通过人工智能和机器学习工具完成的。但是,随着人工智能和机器学习的兴起,人类互动的重要性是否会降低?人工智能和机器学习正在取代大多数人类交互。目前... 查看详情
chatgpt-聊天机器人
...机器人3.1聊天机器人的定义与发展聊天机器人是一种基于人工智能技术的智能对话系统,旨在模仿人类的对话方式与用户进行交互。聊天机器人可以通过自然语言处理技术和机器学习算法分析用户的输入,理解用户的意图和需求... 查看详情
有哪些api接口可以用来做聊天机器人?
有哪些API接口可以用来做聊天机器人?1.海知智能:1.海知智能第三方技能插件开放平台概述·ruyi.ai开发者文档·看云docs.ruyi.ai不光能聊天,还可以在网站里内置技能,实现(翻译,成语接龙等)数十项功能2.天行机器人:白嫖用户... 查看详情