• 目录

    • 前言:
    • 1、简介
    • 2、详细说明
    • 总结:

目录

前言:

智能客服客户咨询功能的实现主要依靠的就是Python的AIML库,这里就先介绍下AIML。
详细的使用教程可参考:https://github.com/andelf/PyAIML
目前大部分AIML只支持Py2.7版本并且不支持中文,即使有支持Py3且支持中文的版本,AIML的一些功能也有一些缺陷,但是黄天不负有心人,经过博主不断的搜寻,最终找到了一款算是比较稳定的支持Py3版本的AIML。
地址:https://github.com/Shuang0420/aiml
后期博主会将自己的项目发布出来,到时候大家有兴趣的也可以参考下。

1、简介

AIML是Artificial Intelligence Markup Language的缩写, 用于描述一类称为AIML的对象,同时部分描述了计算机程序处理这些对象时的表现。AIML是XML语言(可扩展标记语言)的衍生。

AIML对象是由topic和category单元组成的,格式化或未格式化的数据均可。格式化的数据是由字符组成的,其中有的组成符号数据,有的构成AIML元素。AIML元素将应答数据封装在文档中。包含这些元素的字符数据有可能被AIML解释器格式化,也有可能在之后的响应中处理。

aiml中的元素不区分大小写

2、详细说明

1、think元素

型如: <think><set name="topic">Me</set></think>

放置在template元素里面,表示一旦用户的输入匹配到该category时,再回复应答的同时,给一个变量赋值,这里也就是把Me记在脑子里,以后就可以用<get name=”topic”/>来取出先前记住的内容。

2、<star/>表示*
比如有一个匹配模式是<pattern>* 你 好 *<pattern>;这里pattern元素里的匹配模式是用*号表示任意匹配的,但在其他元素里面不能用*号,而用<star/>这个元素来表示。

3、<srai>元素
表示<srai>里面的话会被当作是用户输入,从新查找匹配模式,直到找到非<srai>定义的回复。例如:
<srai>我 是 <star/></srai>,那么机器人会把“我 是 *”当作是用户输入来从新查找匹配模式。(PS:srai不能很好的匹配中文)

4、<condition>元素(condition元素即为做选择操作时使用的元素,类似于if-else语句。)
放在template元素里面,可以有多个condition元素,但不能嵌套(目前还不支持),有3种形式:

 <condition name="name" value="value">你好 </condition>
<condition name="name" contains="value"> 你好</condition>
<condition name="name" exists="value">你好 </condition>

Name是预先定义的变量,第一种表示name变量的值如果和value相等,回复内容就包括”你好”;第二种表示name变量的值如果里面包含value这个字符串,回复内容就包括“你好”;第三种表示name变量的值如果存在value的值,回复内容就包括“你好”(这个什么意思还不明确)
举个使用例子:

<category>
<pattern>你 好</pattern>
<template>
你好阿!
<condition name="用户名字" value="张三">
你又来了阿:)
</condition>
</template>
</category>

a. 情况一:如果事先用think设置了变量“用户名字”,而且等于“张三”,那么用户接受到的回复内容是:你好阿!你又来了阿;)
b.情况二:如果事先没有定义或者变量“用户名字”的值不等于“张三”,那么用户接受到的回复内容是:你好阿!
写法有一下几种:

<category>
<pattern>我 头 发 的 颜 色 是 蓝 色 *</pattern>
<template>哇塞,你很
<condition name="用户性别" value="女"> 漂亮阿!</condition>
<condition name="用户性别" value="男">英俊阿!</condition>
</template>
</category><category>
<pattern>我 头 发 的 颜 色 是 蓝 色 *</pattern>
<template>哇塞,你很
<condition>
<li name="用户性别" value="女">漂亮阿!</li>
<li name="用户性别" value="男">英俊阿!</li>
</condition>
</template>
</category><category>
<pattern>我 头 发 的 颜 色 是 蓝 色 *</pattern>
<template>哇塞,你很
<condition name="用户性别">
<li value="女"> 漂亮阿!</li>
<li value="男"> 英俊阿!</li>
</condition>
</template>
</category><category>
<pattern>我 头 发 的 颜 色 是 蓝 色 *</pattern>
<template>哇塞,你很
<condition>
<li name="用户性别" value="女"> 漂亮阿!</li>
<li>好看!</li>
</condition>
</template>
</category>

这里最后一个li元素表示默认的情况;即找不到condition相匹配时,就用默认的。

6、<gender>元素
替换性别以及代名词,例如:

<gender>She told him to take a hike.</gender>

将被替换成:He told her to take a hike,跟性别有关的单词都将被替换,中文怎么处理不是很清楚。

7、<get name=””名字/>
即得到name的值。

8、<gossip>元素
用来把改元素里面的内容保存到gossip.log文件里。

9、<if>元素
判断元素,有以下形式:

<if name="topic" value="cars"></if>
<if name="topic" contains="cars"></if>
<if name="topic" exists="true"></if>
例子:
<template>
<if name="用户名称" exists="true">
你的名字叫 <get name=”用户名称”/>.
<else/>
你叫什么名字?
</if>
</template>

10、<input>表示用户输入

例如:
<input index="2"/>将输出用户倒数第2次的输入,看如下对话:
用户:好阿
机器人:你也好,你叫什么名字?
用户:我叫黑山
机器人:呵呵,你好黑山。
如果有aiml文件里有片断:
<category>
<pattern>嘿 嘿</pattern>
<template>
<gossip>你刚才说:“<input index="2"/>”?</gossip>
</template>
</category>
如果这个时候用户输入“嘿嘿”,那么机器人将回复:你刚才说:“我叫黑山”?
Index属性的数字表示倒数第几句话,1:倒数第一句,2:倒数第2句,依此类推。

11、<learn filename=”xxx.aiml”>元素
表示让机器人学习某个aiml文件。

12、<li></li>元素
可以在random元素或condition等元素当中使用,表示一个列表;
13、<pattern>表示匹配模式
里面的内容必须大写,可以有星号* 或下划线_,星号表示匹配所有,任意情况;下划线的意义跟星号一样,除了不能匹配字典里面Z后面的字母。

14、<person>和<person2>
第一个是把第一人称转换成第3人称;第2个是把第一人称转成第2人称。<person/>等于 <person><star/></person>

15、<random>随机元素
一般和<li>一起使用,表示从列表里随机取一个。

16、<sentence>元素用来格式化句子

比如:
<sentence>this is some kind of sentence test.</sentence>
可以格式化成:This is some kind of sentence test.即把句子首字母大写,还可以添加标点符号等。如:
<category><pattern>你是谁</pattern><template><sentence>你好我是聊天机器人小君</sentence></template>
</category>

17、<star/>表示星号
已经不推荐使用,只针对0。9版本,目前一般要加index属性来使用,

例如:<star index="1"/>,看如下对话:
用户:我的名字叫黑山!
<pattern>* 名 字 叫 *</pattern>
<template>呵呵,我知道了,你的名字叫<star index="2"/>。
</template>

18、<system><system>元素
表示调用系统函数,

例如:
<system>date</system>表示取系统当前日期
警告:使用这个元素要千万小心,因为有可能使用户运行你的系统命令。
19、<template>定义回复的模板。

20、<that>元素

表示先前机器人说的话,例如:
<category>
<pattern>好</pattern>
<that>一 起 聊 聊 电 影 好 吗 *</that>
<template>那你喜欢什么电影那?</template>
</category>
即:如果机器人先前问用户“一起聊聊电影好吗?”,而且现在用户回答了“好”,那么匹配正确,回复内容为:“那你喜欢什么电影那?”
如果要取前面的前面机器人的话,可以用:<that index=”nx,ny”>,例如:<that index=”2,<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1”>表示取机器人倒数第2句的话,<that index=”2,1”>也等于<justbeforethat/>

21、<thatstar index=”n”>元素
先前第n个机器人说过的星号部分的话,

<thatstar/>等于<thatstar index="1"/>.看个例子:
<category>
<pattern>你好</pattern>
<template>
计算机 的 型 号 是 什 么
</template>
</category> <category>
<pattern>*</pattern>
<that>*  的 型 号 是 什 么</that>
<template><star/>
这个型号是<thatstar/>里面
<random>
<li>很好的商品</li>
<li>很流行的商品</li>
<li>很华丽的商品</li>
<random>。
</template>
</category>
对话场景:
用户:你好
机器人:计算机 的 型 号 是 什 么
用户:p4
机器人:p4这个型号是计算机里面很好的商品

22、<think>
记录用户输入且里面的内容不回复给用户。

例如:
<category>
<pattern>I AM FEMALE</pattern>
<template>Thanks for telling me your gender.
<think>
<set name=gender>female</set>
</think>
</template>
</category>
这里把female这个值保存到gender这个变量里,且回复内容不包括female。

23、<Topic name=”film”>元素

用来设置主题,例如:
<aiml>
<topic name="功夫"><category> <pattern> phrase </pattern> <that> phrase </that> <template> phrase </template> </category>
</topic>
</aiml>
只有当前的topic系统变量是“功夫”时才会匹配到这里。

24、<topicstar index=”n”>元素用来得到先前倒数第n次谈论的主题。

总结:

个人感觉在业务咨询模块,包括在整个智能客服的项目中,这个AIML知识库即用以上的这些语法组成的知识库的设计是最重要、最耗时的工作,因为如果把这个知识库设计好,后面可以省去很多事情,但是如何才能设计好这个知识库呢?这就是一个经验问题了,你除了需要有相关的尽可能多的数据外,还得了解咨询业务中那些问题是常见的,对于一些常见问题你需要怎么去设计这个知识库去匹配等等,最终你还需要熟悉整个AIML的标签以及如何将业务问题最优化的使用这些标签来表示(毕竟真实的业务咨询场景出现的问题会是各种各样,一旦数据量大了之后,很有可能整个知识库就会发生冲突,如输入一个问题,有两个匹配的答案,那么这时系统就会崩溃。。。后面就会有一大堆的问题接踵而来)。所以感觉这部分跟技术关联不是特别大,更多的是和业务关联比较大。

AIML元素详细说明相关推荐

  1. 如何用CSS快速布局(一)—— 布局元素详细

    要快速进行网页排版布局,则必须对布局的元素有清晰的了解,才不会总是在细节处出错.这一篇先详解有关布局的因素作为布局基础:块级元素and内联元素.盒模型.准确定位.元素对齐.样式继承.下一篇则重点描述快 ...

  2. C语言创建顺序表并插入元素 详细注释

    顺序表是用一组地址连续的存储单元依次存储数据元素的数据结构.顺序表是线性表的一种,线性表是最常用且最简单的一种数据结构,一个线性表是 n 个数据元素的有限序列.我们使用 c 语言来创建顺序表并插入元素 ...

  3. 表单元素盘点第二弹<form><textarea>元素详细介绍

    博主有话说:如果有描述错误之处请大家纠正.让我们可以一起学习一起进步. 个人主页:GUIDM主页 内容专栏:干货 此块内容为纯纯的干货,略显乏味枯燥,是笔记向的blog.如果觉得还不错,希望你可以一键 ...

  4. 表单元素盘点第一弹<input>元素详细介绍

    博主有话说:如果有描述错误之处请大家纠正.让我们可以一起学习一起进步. 个人主页:GUIDM主页 内容专栏:干货 此块内容为纯纯的干货,略显乏味枯燥,是笔记向的blog.如果觉得还不错,希望你可以一键 ...

  5. (背)顺序容器的操作-向容器中插入元素详细总结

    现在总结如下表:yes表示支持,no表示不支持 代码实例如下: #include <iostream> #include <string> #include <vecto ...

  6. Aiml智能标记语言规范(20201216)

    Aiml智能标记语言规范(20201216) xml每一个型如<aiml topic="电影">叫做一个元素,每个元素都是闭合的,也就是说要只要有<aiml> ...

  7. 人工智能标记语言AIML聊天机器人:…

    人工智能标记语言AIML聊天机器人:产生.种类.应用.实例.AIML概述.知识库.公司.业界(20k字经典收藏版) 秦陇纪10译编 聊天机器人(chatterbot)是一个用来模拟人类对话或聊天的程序 ...

  8. 人工智能标记语言AIML聊天机器人:产生、种类、应用、实例、AIML概述、知识库、公司、业界(20k字经典收藏版)...

    目录 一.聊天机器人(chatbots)的产生.盛行.中文版 二.聊天机器人种类及应用场景简介 三.聊天机器人相关疑问与常见实例 四.人工智能标记语言(AIML)概述(Dr.理查德S.华勒斯Richa ...

  9. 聊天机器人-AIML人工智能标记语言

    目录 <span style="color:#333333"><span style="background-color:#f5f5f5"&g ...

最新文章

  1. java new 引用_java不用new运算符也能创建引用吗?
  2. Welcome to Linux From Scratch!
  3. Java Web Application 自架构 四 Log4j2日志管理
  4. git在项目中的实际运用
  5. 使用FreeImage帮助OpenCV读出更多图像(转)
  6. Intel汇编语言程序设计学习-第六章 条件处理-中
  7. java 打包web 项目
  8. 驰骋工作流引擎表单设计控件-字段类控件(2)
  9. IT技术人员的35个特点,你占几个?
  10. 文本框添加问内容下划线
  11. 年中618会声会影好礼送不停!
  12. 用Excel绘制曲线图
  13. JavaScript(1)使用ducument.write()在页面上显示红色的“开启JavaScript学习之旅”。
  14. Windows API 教程(七) hook 钩子监听
  15. java serialVersionUID = 1L
  16. R6-1 Python人民币美元双向兑换 (10 分)习题解答
  17. VUE | key的内部原理、Vue监测数据的原理、Vue.set()和vm.$set()的使用
  18. matlab 三维立体图,利用matlab将三维数据画成三维立体图
  19. C# 打印调试信息到DebugView
  20. Gaia蓝牙音箱android开发,Windows7系统配置蓝牙模块GAIA功能的方法

热门文章

  1. FreeSql (二十八)事务
  2. Windows10 网络图标消失 连接不上网络 的解决方法
  3. SJXXX串口扩展芯片 4串口芯片 UART串口芯片
  4. 邓迎春绘画201702作品10
  5. 今天升级win10.vs调试程序各种崩溃
  6. 白--留白与游戏设计
  7. 【知乎摘要】女生婚前应该清楚男友哪些方面了才能嫁给他
  8. TinyXML学习记录及整理
  9. 用友云开发者中心助你上云系列之在线调试
  10. HashMap中数组初始化的秘密