AIML - 快速指南

AIML  - 简介

AIML代表人工智能标记语言. AIML由Alicebot自由软件社区和Richard S. Wallace博士在1995-2000期间开发. AIML用于创建或自定义Alicebot,这是一个基于A.L.I.C.E的聊天框应用程序. (人工语言互联网计算机实体)免费软件.

AIML标签

以下是AIML文档中常用的重要标签.

S.No.AIML标签/描述
1

<aiml>

定义AIML文档的开头和结尾.

2

<category>

在Alicebot的知识中定义知识单元 base.

3

<pattern>

定义模式以匹配用户可以输入到Alicebot的内容.

4

<template>

定义一个响应Alicebot到用户的输入.

我们将讨论中的每个标签a href ="https://img01.yuandaxia.cn/https://img01.yuandaxia.cn/Content/img/tutorials/aiml/aiml_basic_tags.htm"> AIML Basic标签章节.

以下是一些其他广泛使用的aiml标签.我们将在接下来的章节中详细讨论每个标签.

S.No.AIML标签/描述
1

<star>

用于匹配< pattern>中的通配符 * 字符.标签.

2

<srai>

多用途标记,用于调用/匹配其他类别.

3

<random>

使用<random> 获得随机回复.

4

<li>

用于表示多个回复.

5

<set>

用于设置AIML变量中的值.

6

<get>

用于获取存储在AIML变量中的值.

7

<that>

在AIML中用于根据上下文做出回应.

8

<topic>

在AIML中用于存储上下文,以便以后的会话可以根据该上下文完成.

9

<think>

在AIML中用于存储变量而不通知用户.

10

<condition>

与编程语言中的switch语句类似.它有助于ALICE响应匹配的输入.

AIML词汇

AIML词汇使用单词,空格和两个特殊字符 * _ 作为外卡. AIML解释器优先选择具有 _ 的模式而不是具有 * 的模式. AIML标签符合XML标准,模式不区分大小写.

示例

<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern> HELLO ALICE </pattern>
      
      <template>
         Hello User!
      </template>
      
   </category>
</aiml>


以下是要考虑的重点和减去;

  • <aiml> 标记表示AIML文档的开始.

  • <category> 标签定义知识单元.

  • <pattern> 标签定义用户要输入的模式.

  • <template> 标签定义用户输入Hello Alice时对用户的响应.

结果

User: Hello Alice
Bot: Hello User


AIML  - 环境设置

本教程将指导您如何准备开发环境以开始使用AIML创建自动聊天软件.程序AB是由ALICE A.I开发和维护的AIML 2.0的参考实现.基础.本教程还将教您如何在设置Program AB库和减号之前设置JDK;

步骤1  - 设置Java开发工具包(JDK)

您可以从Oracle的Java站点下载最新版本的SDK :   Java SE下载.将找到有关在下载文件中安装JDK的说明,请按照给出的说明安装和配置设置.最后设置PATH和JAVA_HOME环境变量来引用包含java和javac的目录,通常分别是java_install_dir/bin和java_install_dir.

如果你运行Windows并在C:中安装了JDK: \\ jdk1.7.0_75,你必须在C:\ autoexec.bat文件中放入以下行.

set PATH = C:\jdk1.7.0_75\bin;%PATH%
set JAVA_HOME = C:\jdk1.7.0_75


或者,打开在Windows NT/2000/XP中,您也可以右键单击"我的电脑",选择"属性",然后选择"高级",再选择"环境变量".然后,您将更新PATH值并按下OK按钮.

在Unix(Solaris,Linux等)上,如果SDK安装在/usr/local/jdk1.7.0中_75并且您使用C shell,您可以将以下内容放入.cshrc文件中.

setenv PATH /usr/local/jdk1.7.0_75/bin:$PATH
setenv JAVA_HOME /usr/local/jdk1.7.0_75


或者,如果您使用集成开发环境(IDE) )如Borland JBuilder,Eclipse,IntelliJ IDEA或Sun ONE Studio,编译并运行一个简单的程序来确认IDE知道你在哪里安装Java,否则请按照IDE的给定文档进行适当的设置.

步骤2  - 设置程序AB

现在如果一切正常,则可以继续设置程序AB.以下是在您的计算机上下载和安装库的简单步骤.

  • 选择是否要安装AIML在Windows或Unix上然后继续下一步下载.zip文件

  • 从 https://code.google.com/p/program-ab/使用其 program-ab-0.0.4.3.zip 链接.

  • 在编写本教程时,我在Windows机器上下载了 program-ab-0.0.4.3.zip ,当您解压缩下载的文件时,它将为您提供C:\\中的目录结构\\如下.

S.No.目录&描述
1

c:/ab/bots

存储AIML机器人

2

c :/ab/lib

存储Java库

3

c:/ab/out

Java类文件目录

4

c:/ab/run.bat

批处理用于运行程序AB的文件

完成最后一步后,您就可以继续了您将在下一章中看到您的第一个AIML示例.

AIML  - 第一个应用程序

让我们开始创建第一个只会问候的机器人用户键入 Hello Alic时, Hello User!的用户e .

创建项目结构

如 AIML环境设置,我们在 C>中提取了program-ab的内容. ab 具有以下目录结构.

S.No.目录&描述
1

c:/ab/bots

存储AIML机器人

2

c :/ab/lib

存储Java库

3

c:/ab/out

Java类文件目录

4

c:/ab/run.bat

批处理用于运行程序AB的文件

现在,在 C>内创建目录测试ab>机器人并在其中创建以下目录.

S.No.目录&描述
1

c:/ab/bots/test/aiml

存储AIML文件

2

c:/ab/bots/test/aimlif

存储AIMLIF文件

3

c:/ab/bots/test/config

存储配置文件

4

c:/ab/bots/test/sets

存储AIML集

5

c:/ab/bots/test/maps

存储AIML地图

创建源文件

C>中创建test.aiml ab>机器人>测试> C>内的aiml 和test.aiml.csv ab>机器人>测试> aimlif 目录.

test.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version="1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern> HELLO ALICE </pattern>
      
      <template>
         Hello User
      </template>
      
   </category>
</aiml>


test.aiml.csv

 0,HELLO ALICE,*,*,Hello User,test.aiml


执行程序

打开命令提示符.转到 C> ab> 并输入以下命令 :

java -cp lib/Ab.jar Main bot = test action = chat trace = false


验证结果

您将看到以下输出 :

Working Directory = C:\ab

Program AB 0.0.4.2 beta -- AI Foundation Reference AIML 2.0 implementation
bot = test
action = chat
trace = false
trace mode = false
Name = test Path = C:\ab/bots/test

C:\ab
C:\ab/bots
C:\ab/bots/test
C:\ab/bots/test/aiml
C:\ab/bots/test/aimlif
C:\ab/bots/test/config
C:\ab/bots/test/logs
C:\ab/bots/test/sets
C:\ab/bots/test/maps

Preprocessor: 0 norms 0 persons 0 person2
Get Properties: C:\ab/bots/test/config/properties.txt
addAIMLSets: C:\ab/bots/test/sets does not exist.
addCategories: C:\ab/bots/test/aiml does not exist.
AIML modified Tue Apr 07 22:24:29 IST 2015 AIMLIF modified Tue Apr 07 22:26:53 I
ST 2015
No deleted.aiml.csv file found
No deleted.aiml.csv file found
Loading AIML files from C:\ab/bots/test/aimlif

Reading Learnf file
Loaded 1 categories in 0.009 sec
--> Bot test 1 completed 0 deleted 0 unfinished
(1[6])--HELLO-->(1[5])--ALICE-->(1[4])--<THAT>-->(1[3])--*-->(1[2])--<TOPIC>-->(
1[1])--*-->(0[null,null]) Hello User...
7 nodes 6 singletons 1 leaves 0 shortcuts 0 n-ary 6 branches 0.85714287 average
branching
Human:
Type Hello Alice and see the result and then type anything else to see the changed result.
Human: hello alice
Robot: Hello User
Human: bye
Robot: I have no answer for that.
Human:


键入 Hello Alice 并查看结果,然后键入其他内容以查看更改的结果.

Human: hello alice
Robot: Hello User
Human: bye
Robot: I have no answer for that.
Human:
AIML  - 基本标签

在本教程中,我们将讨论基本标签AIML.

  • <aiml> : 定义AIML文档的开头和结尾.

  • <category> : 在Alicebot的知识库中定义知识单元.

  • <pattern> : 定义模式以匹配用户可以输入到Alicebot的模式.

  • <template> : 定义Alicebot对用户输入的响应.

以下AIML文件已作为参考使用.

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern> HELLO ALICE </pattern>
      
      <template>
         Hello User
      </template>
      
   </category>
</aiml>


< aiml>标签

< aiml> tag标记AIML文档的开头和结尾.它包含版本和编码属性下的版本和编码信息. version属性存储ALICE chatterbot Knowledge Base,KB使用的AIML版本.例如,我们使用了1.0.1版本.此属性是可选的.

编码属性提供要在文档中使用的字符集.例如,我们使用了UTF-8.作为强制性要求,< aiml>标签必须包含至少一个< category>标签.我们可以创建多个AIML文件,其中每个AIML文件包含一个< aiml>标签.每个AIML文件的目的是将至少一个名为category的知识单元添加到ALICE chatterbot KB.

<aiml version = "1.0.1" encoding = "UTF-8"?>
   ...
</aiml>


< category>标签

< category> tag是ALICE Bot的基础知识单元.每个类别包含 :

  • 句子形式的用户输入,可以是断言,问题和惊叹号等用户输入可以包含通配符,如 * _ .

  • 对用户输入的响应由Alicebot提供.

  • 可选上下文.

A < category> 标记必须包含< pattern> < template> 标记. < pattern> 表示用户输入,模板表示机器人的响应.

<category>
   <pattern> HELLO ALICE </pattern>
   
   <template>
      Hello User
   </template>
   
</category>


在这里,如果用户输入 Hello Alice ,那么机器人将作为 Hello用户回复.

< pattern>标签

< pattern> tag表示用户的输入.它应该是< category>中的第一个标记.标签. <模式&GT;标签可以包含通配符,以匹配多个句子作为用户输入.例如,在我们的示例中,< pattern>包含HELLO ALICE.

AIML不区分大小写.如果用户输入Hello Alice,hello alice,HELLO ALICE等,所有输入都是有效的,机器人将与HELLO ALICE匹配.

<category>
   <pattern> HELLO ALICE </pattern>
   
   <template>
      Hello User
   </template>
   
</category>


此处,模板为"Hello User",表示机器人对用户输入的响应.

< template&gt ;标签

< template> tag表示机器人对用户的响应.它应该是< category>中的第二个标记.标签.这个<模板>标签可以保存数据,调用另一个程序,给出条件答案或委托给其他类别.

<category>
   <pattern> HELLO ALICE </pattern>
   
   <template>
      Hello User
   </template>
   
</category>


此处,模板为"Hello User",表示机器人对用户输入的响应.

AIML  -<star> 标记

< star> 标记用于匹配< pattern>中的通配符 * 字符标记.

语法

<star index = "n"/>


n 表示< pattern>中用户输入中*的位置标记.

考虑以下示例 :

<category>
   <pattern> A * is a *. </pattern>
   
   <template>
      When a <star index = "1"/> is not a <star index = "2"/>?
   </template>
   
</category>

如果用户输入"芒果是水果".然后机器人会回答"当芒果不是水果?"

示例

C > ab > bots > test > aiml内创建star.aiml 和C > ab > bots > test > aimlif内创建star.aiml.csv .

star.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   
   <category>
      <pattern>I LIKE *</pattern>
      <template>
         I too like <star/>.
      </template>
   </category>
   
   <category>
      <pattern>A * IS A *</pattern>
      <template>
         How <star index = "1"/> can not be a <star index = "2"/>?
      </template>
   </category>
   
</aiml>

star.aiml.csv

0,I LIKE *,*,*,I too like <star/>.,star.aiml
0,A * IS A *,*,*,How <star index = "1"/> can not be a <star index = "2"/>?,star.aiml


执行程序

打开命令提示符.转到 C> ab> 并输入以下命令 :

java -cp lib/Ab.jar Main bot = test action = chat trace = false


验证结果

您将看到以下输出 :

Human: I like mango
Robot: I too like mango.
Human: A mango is a fruit
Robot: How mango can not be a fruit?


< star index ="1"/>通常用作< star/>

AIML  - < srai>标记

< srai> 标记是多用途标记.此标记使AIML能够为同一模板定义不同的目标.

语法

<srai&gt pattern </srai&gt


以下是与 srai相关的常用术语 :

  • 符号缩减

  • 分而治之

  • 同义词解析

  • 关键字检测

符号缩减

符号缩减技术用于简化模式.它有助于用简单的模式减少复杂的语法模式.

例如,考虑以下对话.

Human: Who was Albert Einstein?
Robot: Albert Einstein was a German physicist.
Human: Who was Isaac Newton?
Robot: Isaac Newton was a English physicist and mathematician.

现在如果提出问题

Human: DO YOU KNOW WHO Albert Einstein IS?
Human: DO YOU KNOW WHO Isaac Newton IS?


此处,< srai> 标签有效.它可以将用户的模式作为模板.

步骤1:创建类别

<category>
   <pattern>WHO IS ALBERT EINSTEIN?</pattern>
   <template>Albert Einstein was a German physicist.</template>
</category>

<category>
   <pattern> WHO IS Isaac NEWTON? </pattern>
   <template>Isaac Newton was a English physicist and mathematician.</template>
</category>


第2步:使用< srai&gt标签创建通用类别

<category>
   <pattern>DO YOU KNOW WHO * IS?</pattern>
   
   <template>
      <srai>WHO IS <star/></srai>
   </template>
   
</category>


示例

 C > ab > bots > test > aiml内创建star.aiml 和C > ab > bots > test > aimlif内创建star.aiml.csv .

srai.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern> WHO IS ALBERT EINSTEIN </pattern>
      <template>Albert Einstein was a German physicist.</template>
   </category>
   
   <category>
      <pattern> WHO IS Isaac NEWTON </pattern>
      <template>Isaac Newton was a English physicist and mathematician.</template>
   </category>
   
   <category>
      <pattern>DO YOU KNOW WHO * IS</pattern>
      <template>
         <srai>WHO IS <star/></srai>
      </template>
   </category>
</aiml>


star.aiml.csv

0,WHO IS ALBERT EINSTEIN,*,*,Albert Einstein was a German physicist.,srai.aiml
0,WHO IS Isaac NEWTON,*,*,Isaac Newton was a English physicist and mathematician.,srai.aiml
0,DO YOU KNOW WHO * IS,*,*,<srai>WHO IS <star/></srai>,srai.aiml

执行程序

打开命令提示符.转到 C> ab> 并输入以下命令 :

java -cp lib/Ab.jar Main bot = test action = chat trace = false

验证结果

您将看到以下输出 :

Human: Do you know who Albert Einstein is
Robot: Albert Einstein was a German physicist.

分而治之

Divide and Conquer用于在完成回复时重复使用子句.它有助于减少定义多个类别.

例如,考虑以下对话.

Human: Bye
Robot: GoodBye!
Human: Bye Alice!
Robot: GoodBye!


现在,机器人应该回复 GoodBye!每当用户在开头的时候说再见句子.

让我们把< srai&gt标签放到这里工作.

第1步:创建类别

<category>
   <pattern>BYE</pattern>
   <template>Good Bye!</template>
</category>


第2步:使用< srai&gt标签创建通用类别

<category>
   <pattern>BYE *</pattern>
   
   <template>
      <srai>BYE</srai>
   </template>
   
</category>

示例

更新 C > ab > bots > test > aiml内创建star.aiml 和C > ab > bots > test > aimlifstar.aiml.csv.

srai.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern> WHO IS ALBERT EINSTEIN </pattern>
      <template>Albert Einstein was a German physicist.</template>
   </category>
 
   <category>
      <pattern> WHO IS Isaac NEWTON </pattern>
      <template>Isaac Newton was a English physicist and mathematician.</template>
   </category>
   
   <category>
      <pattern>DO YOU KNOW WHO * IS</pattern>
      <template>
         <srai>WHO IS <star/></srai>
      </template>
   </category>
   
   <category>
      <pattern>BYE</pattern>
      <template>Good Bye!</template>
   </category>
   
   <category>
      <pattern>BYE *</pattern>
      <template>
         <srai>BYE</srai>
      </template>
   </category>
   
</aiml>


star.aiml.csv

0,WHO IS ALBERT EINSTEIN,*,*,Albert Einstein was a German physicist.,srai.aiml
0,WHO IS Isaac NEWTON,*,*,Isaac Newton was a English physicist and mathematician.,srai.aiml
0,DO YOU KNOW WHO * IS,*,*,<srai>WHO IS <star/></srai>,srai.aiml
0,BYE,*,*,Good Bye!,srai.aiml
0,BYE *,*,*,<srai>BYE</srai>,srai.aiml

执行程序

打开命令提示符.转到 C> ab> 并输入以下命令 :

 java -cp lib/Ab.jar Main bot = test action = chat trace = false


验证结果

您将看到以下输出 :

Human: Bye
Robot: GoodBye!
Human: Bye Alice!
Robot: GoodBye!

同义词解析

同义词是具有相似含义的词.机器人应该以相同的方式回复类似的单词.

例如,考虑以下对话.

Human: Factory
Robot: Development Center!
Human: Industry
Robot: Development Center!


现在,只要用户说出工厂或<b,机器人就会回复开发中心!>行业.

让我们在这里使用< srai> 标签.

第1步:创建类别

<category>
   <pattern>FACTORY</pattern>
   <template>Development Center!</template>
</category>

第2步:使用< srai>创建通用类别标签

<category>
   <pattern>INDUSTRY</pattern>
   
   <template>
      <srai>FACTORY</srai>
   </template>
   
</category>

示例

更新 C > ab > bots > test > aiml内创建star.aiml 和C > ab > bots > test > aimlifstar.aiml.csv

srai.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern> WHO IS ALBERT EINSTEIN </pattern>
      <template>Albert Einstein was a German physicist.</template>
   </category>
   
   <category>
      <pattern> WHO IS Isaac NEWTON </pattern>
      <template>Isaac Newton was a English physicist and mathematician.</template>
   </category>
   
   <category>
      <pattern>DO YOU KNOW WHO * IS</pattern>
      <template>
         <srai>WHO IS <star/></srai>
      </template>
   </category>
   
   <category>
      <pattern>BYE</pattern>
      <template>Good Bye!</template>
   </category>
   
   <category>
      <pattern>BYE *</pattern>
      <template>
         <srai>BYE</srai>
      </template>
   </category>
   
   <category>
      <pattern>FACTORY</pattern>
      <template>Development Center!</template>
   </category>
   
   <category>
      <pattern>INDUSTRY</pattern>
      <template>
         <srai>FACTORY</srai>
      </template>
   </category>
   
</aiml>


star.aiml.csv

0,WHO IS ALBERT EINSTEIN,*,*,Albert Einstein was a German physicist.,srai.aiml
0,WHO IS Isaac NEWTON,*,*,Isaac Newton was a English physicist and mathematician.,srai.aiml
0,DO YOU KNOW WHO * IS,*,*,<srai>WHO IS <star/></srai>,srai.aiml
0,BYE,*,*,Good Bye!,srai.aiml
0,BYE *,*,*,<srai>BYE</srai>,srai.aiml
0,FACTORY,*,*,Development Center!,srai.aiml
0,INDUSTRY,*,*,<srai>FACTORY</srai>,srai.aiml


执行程序

打开命令提示符.转到 C> ab> 并输入以下命令 :

java -cp lib/Ab.jar Main bot = test action = chat trace = false

验证结果

您将看到以下输出 :

Human: Factory
Robot: Development Center!
Human: Industry
Robot: Development Center!


关键字检测

使用 srai ,我们可以在用户返回简单响应键入一个特定的关键词,比如学校,无论句子中出现"学校".

例如,考虑以下对话.

Human: I love going to school daily.
Robot: School is an important institution in a child's life.
Human: I like my school.
Robot: School is an important institution in a child's life.


在这里,机器人应该回复标准信息'学校是儿童生活中的重要机构.'每当用户在句子中学校.

让我们在这里使用< srai> 标签.我们将在这里使用通配符.

第1步:创建类别

<category>
   <pattern>SCHOOL</pattern>
   <template>School is an important institution in a child's life.</template>
</category>

第2步:使用< srai>标签创建通用类别

<category>
   <pattern>_ SCHOOL</pattern>
   <template>
      <srai>SCHOOL</srai>
   </template>
</category>

<category>
   <pattern>_ SCHOOL</pattern>
   <template>
      <srai>SCHOOL</srai>
   </template>
</category>

<category>
   <pattern>SCHOOL *</pattern>
   <template>
      <srai>SCHOOL</srai>
   </template>
</category>

<category>
   <pattern>_ SCHOOL *</pattern>
   <template>
      <srai>SCHOOL</srai>
   </template>
</category>


示例

更新 C > ab > bots > test > aiml内创建star.aiml 和C > ab > bots > test > aimlifstar.aiml.csv.

srai.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern> WHO IS ALBERT EINSTEIN </pattern>
      <template>Albert Einstein was a German physicist.</template>
   </category>
   
   <category>
      <pattern> WHO IS Isaac NEWTON </pattern>
      <template>Isaac Newton was a English physicist and mathematician.</template>
   </category>
   
   <category>
      <pattern>DO YOU KNOW WHO * IS</pattern>
      <template>
         <srai>WHO IS <star/></srai>
      </template>
   </category>
   
   <category>
      <pattern>BYE</pattern>
      <template>Good Bye!</template>
   </category>
   
   <category>
      <pattern>BYE *</pattern>
      <template>
         <srai>BYE</srai>
      </template>
   </category>
   
   <category>
      <pattern>FACTORY</pattern>
      <template>Development Center!</template>
   </category>
   
   <category>
      <pattern>INDUSTRY</pattern>
      <template>
         <srai>FACTORY</srai>
      </template>
   </category>
   
   <category>
      <pattern>SCHOOL</pattern>
      <template>School is an important institution in a child's life.</template>
   </category>  
   
   <category>
      <pattern>_ SCHOOL</pattern>
      <template>
         <srai>SCHOOL</srai>
      </template>
   </category>
   
   <category>
      <pattern>_ SCHOOL</pattern>
      <template>
         <srai>SCHOOL</srai>
      </template>
   </category>
   
   <category>
      <pattern>SCHOOL *</pattern>
      <template>
         <srai>SCHOOL</srai>
      </template>
   </category>
   
   <category>
      <pattern>_ SCHOOL *</pattern>
      <template>
         <srai>SCHOOL</srai>
      </template>
   </category>
   
</aiml>


star.aiml.csv

0,WHO IS ALBERT EINSTEIN,*,*,Albert Einstein was a German physicist.,srai.aiml
0,WHO IS Isaac NEWTON,*,*,Isaac Newton was a English physicist and mathematician.,srai.aiml
0,DO YOU KNOW WHO * IS,*,*,<srai>WHO IS <star/></srai>,srai.aiml
0,BYE,*,*,Good Bye!,srai.aiml
0,BYE *,*,*,<srai>BYE</srai>,srai.aiml
0,FACTORY,*,*,Development Center!,srai.aiml
0,INDUSTRY,*,*,<srai>FACTORY</srai>,srai.aiml
0,SCHOOL,*,*,School is an important institution in a child's life.,srai.aiml
0,_ SCHOOL,*,*,<srai>SCHOOL</srai>,srai.aiml
0,SCHOOL *,*,*,<srai>SCHOOL</srai>,srai.aiml
0,_ SCHOOL *,*,*,<srai>SCHOOL</srai>,srai.aiml


执行程序

打开命令提示符.转到 C> ab> 并输入以下命令 :

java -cp lib/Ab.jar Main bot = test action = chat trace = false


验证结果

您将看到以下输出 :

Human: I love going to school daily.
Robot: School is an important institution in a child's life.
Human: I like my school.
Robot: School is an important institution in a child's life.


AIML  - < random>标记

< random> 标记用于获取随机响应.此标记使AIML能够针对相同的输入做出不同的响应.<random>标签与< li>一起使用标签. <li>标签带有随机传递给用户的不同响应.

语法

<random>
   <li> pattern1 </li>
   <li> pattern2 </li>
   ...
   <li> patternN </li>
</random>


例如,请考虑以下对话.

Human: Hi
Robot: Hello!
Human: Hi
Robot: Hi! Nice to meet you!

示例

 C > ab > bots > test > aiml内创建star.aiml 和C > ab > bots > test > aimlifstar.aiml.csv.

random.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding ="UTF-8"?>
   <category>
      <pattern>HI</pattern>
      
      <template>
         <random>
            <li> Hello! </li>
            <li> Hi! Nice to meet you! </li>
         </random>
      </template>
      
   <category>      
</aiml>


random.aiml.csv

0,HI,*,*, <random><li> Hello! </li><li> Hi! Nice to meet you! </li></random>,random.aiml

执行程序

打开命令提示符.转到 C> ab> 并输入以下命令 :

java -cp lib/Ab.jar Main bot = test action = chat trace = false


验证结果

您将看到以下输出 :

Human: Hi
Robot: Hi! Nice to meet you!
Human: Hi
Robot: Hello!


此处,响应可能因随机响应而异.

AIML  - < set>,< get>标签

< set> < get> 标签用于处理AIML中的变量.变量可以是预定义变量或程序员创建的变量.

语法

< set> tag用于设置变量中的值.

<set name = "variable-name"> variable-value </set>

< get> tag用于从变量中获取值.

<get name = "variable-name"></get>


例如,请考虑以下对话.

Human: I am Mahesh
Robot: Hello Mahesh!
Human: Good Night
Robot: Good Night Mahesh! Thanks for the conversation!


示例

C > ab > bots > test > aiml内创建setget.aiml 和C > ab > bots > test > aimlif内创建setget.aiml.csv.

setget.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern>I am *</pattern>
      <template>
         Hello <set name = "username"> <star/>! </set>
      </template>  
   </category>  
   
   <category>
      <pattern>Good Night</pattern>
      <template>
         Hi <get name = "username"/> Thanks for the conversation!
      </template>  
   </category>  
   
</aiml>


setget.aiml.csv

0,I am *,*,*, Hello <set name = "username"> <star/>! </set>,setget.aiml
0,Good Night,*,*, Hi <get name = "username"/> Thanks for the conversation!,setget.aiml


执行程序

打开命令提示符.转到 C> ab> 并输入以下命令 :

java -cp lib/Ab.jar Main bot = test action = chat trace = false

验证结果

您将看到以下输出 :

Human: I am Mahesh
Robot: Hello Mahesh!
Human: Good Night
Robot: Good Night Mahesh! Thanks for the conversation!

AIML  - < that>标记

< that> 标记在AIML中用于根据上下文进行响应.

语法

<that> template </that>


例如,请考虑以下对话.

Human: Hi Alice! What about movies?
Robot: Do you like comedy movies?
Human: No
Robot: Ok! But I like comedy movies.

示例

 C > ab > bots > test > aiml内创建that.aiml 和在C > ab > bots > test > aimlif内创建that.aiml.csv.

that.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern>WHAT ABOUT MOVIES</pattern>
      <template>Do you like comedy movies</template>  
   </category>
   
   <category>
      <pattern>YES</pattern>
      <that>Do you like comedy movies</that>
      <template>Nice, I like comedy movies too.</template>
   </category>
   
   <category>
      <pattern>NO</pattern>
      <that>Do you like comedy movies</that>
      <template>Ok! But I like comedy movies.</template>
   </category> 
   
</aiml>

that.aiml.csv

0,WHAT ABOUT MOVIES,*,*,Do you like comedy movies,that.aiml
0,YES,Do you like comedy movies,*,Nice! I like comedy movies too.,that.aiml
0,NO,Do you like comedy movies,*,Ok! But I like comedy movies.,that.aiml

执行程序

打开命令提示符.转到 C> ab> 并输入以下命令 :

java -cp lib/Ab.jar Main bot = test action = chat trace = false


验证结果

您将看到以下输出 :

Human: What about movies?
Robot: Do you like comedy movies?
Human: No
Robot: Ok! But I like comedy movies.


AIML  - < topic>标记

< topic> 标记在AIML中用于存储上下文,以便以后的对话可以基于该上下文完成.通常,< topic> 标记用于是/否类型对话.它有助于AIML搜索在主题上下文中编写的类别.

语法

使用< set>定义主题标签

<template> 
   <set name = "topic"> topic-name </set>
</template>

使用< topic>定义类别标签

<topic name = "topic-name">
   <category>
      ...
   </category>     
</topic>

例如,考虑以下对话.

Human: let discuss movies
Robot: Yes movies
Human: Comedy movies are nice to watch
Robot: Watching good movie refreshes our minds.
Human: I like watching comedy
Robot: I too like watching comedy.

此处机器人以"电影"为主题进行回应.

示例

 C > ab > bots > test > aiml内创建topic.aiml 和在C > ab > bots > test > aimlif内创建topic.aiml.csv.

topic.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern>LET DISCUSS MOVIES</pattern>
      <template>Yes <set name = "topic">movies</set></template>  
   </category>
   
   <topic name = "movies">
      <category>
         <pattern> * </pattern>
         <template>Watching good movie refreshes our minds.</template>
      </category>
      
      <category>
         <pattern> I LIKE WATCHING COMEDY! </pattern>
         <template>I like comedy movies too.</template>
      </category>
      
   </topic>
</aiml>


that.aiml.csv

0,LET DISCUSS MOVIES,*,*,Yes <set name = "topic">movies</set>,topic.aiml
0,*,*,movies,Watching good movie refreshes our minds.,topic.aiml
0,I LIKE WATCHING COMEDY!,*,movies,I like comedy movies too.,topic.aiml


执行程序

打开命令提示符.转到 C> ab> 并输入以下命令 :

java -cp lib/Ab.jar Main bot = test action = chat trace = false


验证结果

您将看到以下输出 :

Human: let discuss movies
Robot: Yes movies
Human: Comedy movies are nice to watch
Robot: Watching good movie refreshes our minds.
Human: I like watching comedy
Robot: I too like watching comedy.


AIML  - < think>标记

< think> 标记在AIML中用于存储变量而不通知用户.

语法

使用< think>存储值标签

<think> 
   <set name = "variable-name"> variable-value </set>
</think>


例如,请考虑以下对话.

Human: My name is Mahesh
Robot: Hello!
Human: Byeee
Robot: Hi Mahesh Thanks for the conversation!


示例

 C > ab > bots > test > aiml内创建think.aiml 和在C > ab > bots > test > aimlif内创建think.aiml.csv.

think.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern>My name is *</pattern>
      <template>
         Hello!<think><set name = "username"> <star/></set></think>
      </template>  
   </category>  
   
   <category>
      <pattern>Byeee</pattern>
      <template>
         Hi <get name = "username"/> Thanks for the conversation!
      </template>  
   </category>  
   
</aiml>


think.aiml.csv

0,My name is *,*,*, Hello! <think><set name = "username"> <star/></set></think>,think.aiml
0,Byeee,*,*, Hi <get name = "username"/> Thanks for the conversation!,think.aiml

执行程序

打开命令提示符.转到 C> ab> 并输入以下命令 :

java -cp lib/Ab.jar Main bot = test action = chat trace = false


验证结果

您将看到以下输出 :

Human: My name is Mahesh
Robot: Hello!
Human: Byeee
Robot: Hi Mahesh Thanks for the conversation!


AIML  - < condition>标记

< condition> 标记类似于编程语言中的switch语句.它有助于ALICE响应匹配的输入.

语法

<condition name = "variable-name" value = "variable-value"/>


例如,请考虑以下对话.

Human: How are you feeling today
Robot: I am happy!


这里我们存储了 happy 作为ALICE的状态,这就是"我很开心!"的回应方式.

示例

 C > ab > bots > test > aiml内创建condition.aiml 和在C > ab > bots > test > aimlif内创建condition.aiml.csv.

condition.aiml

<?xml version = "1.0" encoding = "UTF-8"?>
<aiml version = "1.0.1" encoding = "UTF-8"?>
   <category>
      <pattern> HOW ARE YOU FEELING TODAY </pattern>
      
      <template>
         <think><set name = "state"> happy</set></think>
         <condition name = "state" value = "happy">
            I am happy!
         </condition>
         
         <condition name = "state" value = "sad">
            I am sad!
         </condition>
      </template>
      
   </category>
</aiml>


condition.aiml.csv

0,HOW ARE YOU FEELING TODAY,*,*,
   <think>
      <set name = "state"> happy</set>
   </think>
   
   <condition name = "state" value = "happy">I am happy!</condition>
   <condition name = "state" value = "sad">I am sad!</condition>,condition.aiml


执行程序

打开命令提示符.转到 C> ab> 并输入以下命令 :

 java -cp lib/Ab.jar Main bot = test action = chat trace = false


验证结果

您将看到以下输出 :

Human: How are you feeling today
Robot: I am happy!