AIML - 快速指南



AIML - 简介

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

AIML 标签

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

序号 AIML 标签/描述
1

<aiml>

定义 AIML 文档的开始和结束。

2

<category>

定义 Alicebot 知识库中的 **知识单元**。

3

<pattern>

定义与用户可能输入到 Alicebot 的内容匹配的模式。

4

<template>

定义 Alicebot 对用户输入的响应。

我们将在 AIML 基本标签 章节中讨论每个标签。

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

序号 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. Foundation 开发并维护的 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:\jdk1.7.0_75 中安装了 JDK,则需要在 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 值并按“确定”按钮。

在 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 - 设置 Program AB

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

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

  • https://code.google.com/p/program-ab/ 使用其 program-ab-0.0.4.3.zip 链接下载最新版本的 Program AB 二进制文件。

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

序号 目录和描述
1

c:/ab/bots

存储 AIML 机器人

2

c:/ab/lib

存储 Java 库

3

c:/ab/out

Java 类文件目录

4

c:/ab/run.bat

运行 Program AB 的批处理文件

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

AIML - 第一个应用

让我们开始创建第一个机器人,当用户输入 **Hello Alice** 时,它将简单地用 **Hello User!** 向用户打招呼。

创建项目结构

AIML 环境设置 中所述,我们已将 program-ab 的内容提取到 **C > ab** 中,并具有以下目录结构。

序号 目录和描述
1

c:/ab/bots

存储 AIML 机器人

2

c:/ab/lib

存储 Java 库

3

c:/ab/out

Java 类文件目录

4

c:/ab/run.bat

运行 Program AB 的批处理文件

现在,在 **C > ab > bots** 中创建一个名为 test 的目录,并在其中创建以下目录。

序号 目录和描述
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 > ab > bots > test > aiml** 中创建 test.aiml,在 **C > ab > bots > test > aimlif** 中创建 test.aiml.csv 目录。

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:

键入 **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> 标签标记 AIML 文档的开始和结束。它在 version 和 encoding 属性下包含版本和编码信息。version 属性存储 ALICE 聊天机器人知识库 KB 使用的 AIML 版本。例如,我们使用了 1.0.1 版本。此属性是可选的。

Encoding 属性提供要在文档中使用的字符集。例如,我们使用了 UTF-8。作为强制要求,<aiml> 标签必须至少包含一个 <category> 标签。我们可以创建多个 AIML 文件,其中每个 AIML 文件包含一个 <aiml> 标签。每个 AIML 文件的目的是向 ALICE 聊天机器人 KB 添加至少一个称为类别的知识单元。

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

<category> 标签

<category> 标签是 ALICE 机器人的基本知识单元。每个类别包含:

  • 用户输入,以句子的形式,可以是陈述句、疑问句和感叹句等。用户输入可以包含通配符,如 **\*** 和 **\_**。

  • Alicebot 要呈现的对用户输入的响应。

  • 可选上下文。

**<category>** 标签必须具有 **<pattern>** 和 **<template>** 标签。**<pattern>** 表示用户输入,template 表示机器人的响应。

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

在这里,如果用户输入 **Hello Alice**,则机器人将回复 **Hello User**。

<pattern> 标签

<pattern> 标签表示用户的输入。它应该是 <category> 标签内的第一个标签。<pattern> 标签可以包含通配符以匹配多个句子作为用户输入。例如,在我们的示例中,<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> 标签

<template> 标签表示机器人对用户的响应。它应该是 <category> 标签内的第二个标签。此 <template> 标签可以保存数据、调用其他程序、提供条件答案或委托给其他类别。

<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>

如果用户输入“A mango is a fruit.”,则机器人将回复“When a mango is not a fruit?”。

示例

在 **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> pattern </srai> 

以下是与 **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>标签创建通用类别

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

示例

C > ab > bots > test > aiml目录中创建srai.aiml文件,并在C > ab > bots > test > aimlif目录中创建srai.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.

分治法

分治法用于在构建完整回复时重用子句。它有助于减少定义多个类别的需要。

例如,考虑以下对话。

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

现在这里机器人期望在用户在句首说Bye时回复GoodBye!

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

步骤 1:创建类别

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

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

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

示例

更新C > ab > bots > test > aiml目录中的srai.aiml文件,并在C > ab > bots > test > aimlif目录中更新srai.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!

现在这里机器人期望在用户说FactoryIndustry时回复Development Center!

让我们在这里使用<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目录中的srai.aiml文件,并在C > ab > bots > test > aimlif目录中更新srai.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,当用户输入特定关键词(例如,School)时,无论“school”在句子中的哪个位置,我们都可以返回简单的回复。

例如,考虑以下对话。

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.

这里,机器人期望在用户句子中包含school时回复标准消息'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目录中的srai.aiml文件,并在C > ab > bots > test > aimlif目录中更新srai.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目录中创建random.aiml文件,并在C > ab > bots > test > aimlif目录中创建random.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>标签用于在变量中设置值。

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

<get>标签用于从变量中获取值。

<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.

这里机器人以“movie”作为主题进行响应。

示例

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的状态,这就是它如何响应“I am happy!”的原因。

示例

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!
广告

© . All rights reserved.