- AIML Tutorial
- AIML - Home
- AIML - Introduction
- AIML - Environment Setup
- AIML - First Application
- AIML - Basic Tags
- AIML - <star> Tag
- AIML - <srai> Tag
- AIML - <random> Tag
- AIML - <set>, <get> Tags
- AIML - <that> Tag
- AIML - <topic> Tag
- AIML - <think> Tag
- AIML - <condition> Tag
- AIML Useful Resources
- AIML - Quick Guide
- AIML - Useful Resources
- AIML - Discussion
AIML - 快速指南
AIML - 简介
AIML 代表人工智能标记语言。AIML 由 Alicebot 自由软件社区和 Richard S. Wallace 博士于 1995 年至 2000 年期间开发。AIML 用于创建或定制 Alicebot,这是一个基于 ALICE(人工语言互联网计算机实体)免费软件的聊天框应用程序。
AIML标签
以下是 AIML 文档中常用的重要标签。
编号 | AIML 标签/描述 |
---|---|
1 | <目标> 定义 AIML 文档的开头和结尾。 |
2 | <类别> 定义Alicebot知识库中的知识单元。 |
3 | <模式> 定义模式以匹配用户可能输入到 Alicebot 的内容。 |
4 | <模板> 定义 Alicebot 对用户输入的响应。 |
我们将在AIML 基本标签章节中讨论每个标签。
以下是其他一些广泛使用的 aiml 标签。我们将在接下来的章节中详细讨论每个标签。
编号 | AIML 标签/描述 |
---|---|
1 | <星星> 用于匹配 <pattern> 标签中的通配符*字符。 |
2 | <斯莱> 多用途标签,用于调用/匹配其他类别。 |
3 | <随机> 使用<random>来获得随机响应。 |
4 | <li> 用于表示多个响应。 |
5 | <设置> 用于设置 AIML 变量中的值。 |
6 | <获取> 用于获取存储在 AIML 变量中的值。 |
7 | <那个> 在 AIML 中用于根据上下文进行响应。 |
8 | <主题> 在 AIML 中用于存储上下文,以便以后的对话可以基于该上下文进行。 |
9 | <思考> 在 AIML 中用于存储变量而不通知用户。 |
10 | <条件> 类似于编程语言中的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 AI 基金会开发和维护的 AIML 2.0 的参考实现。本教程还将教您如何在设置 Program AB 库之前设置 JDK -
第 1 步 - 设置 Java 开发工具包 (JDK)
您可以从 Oracle 的 Java 站点 - Java SE 下载下载最新版本的 SDK 。您将在下载的文件中找到安装 JDK 的说明,按照给定的说明进行安装和配置设置。最后设置 PATH 和 JAVA_HOME 环境变量以引用包含 java 和 javac 的目录,通常分别为 java_install_dir/bin 和 java_install_dir。
如果您运行的是 Windows 并将 JDK 安装在 C:\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 值并按“确定”按钮。
在 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。以下是在您的计算机上下载并安装该库的简单步骤。
选择是要在 Windows 还是 Unix 上安装 AIML,然后继续下一步下载 .zip 文件
使用program-ab-0.0.4.3.zip链接从https://code.google.com/p/program-ab/下载最新版本的 Program AB 二进制文件。
在编写本教程时,我在 Windows 计算机上下载了program-ab-0.0.4.3.zip ,当您解压下载的文件时,它将为您提供 C:\ab 内的目录结构,如下所示。
编号 | 目录及说明 |
---|---|
1 | c:/ab/机器人 商店 AIML 机器人 |
2 | c:/ab/lib 存储 Java 库 |
3 | c:/ab/输出 Java类文件目录 |
4 | c:/ab/run.bat 用于运行程序AB的批处理文件 |
完成最后一步后,您就可以继续进行第一个 AIML 示例,您将在下一章中看到该示例。
AIML - 首次应用
让我们开始创建第一个机器人,它将简单地用“Hello User”向用户打招呼!当用户输入Hello Alice时。
创建项目结构
与AIML 环境设置一样,我们在C > ab中提取了 program-ab 的内容,目录结构如下。
编号 | 目录及说明 |
---|---|
1 | c:/ab/机器人 商店 AIML 机器人 |
2 | c:/ab/lib 存储 Java 库 |
3 | c:/ab/输出 Java类文件目录 |
4 | c:/ab/run.bat 用于运行程序AB的批处理文件 |
现在,在C > ab > bots中创建一个目录 test并在其中创建以下目录。
编号 | 目录及说明 |
---|---|
1 | c:/ab/bots/test/aiml 存储 AIML 文件 |
2 | c:/ab/bots/test/aimlif 存储 AIMLIF 文件 |
3 | c:/ab/bots/测试/配置 存储配置文件 |
4 | c:/ab/bots/测试/集 商店 AIML 集 |
5 | c:/ab/bots/测试/地图 商店 AIML 地图 |
创建源文件
在C > ab > bots > test > aiml目录中创建test.aiml 并在C > ab > bots > test > aimlif目录中创建 test.aiml.csv。
测试目标
<?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.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 属性存储 ALICE chatterbot 知识库 (KB) 使用的 AIML 版本。例如,我们使用了1.0.1版本。该属性是可选的。
编码属性提供文档中使用的字符集。例如,我们使用了 UTF-8。作为一项强制要求,<aiml> 标记必须包含至少一个 <category> 标记。我们可以创建多个 AIML 文件,其中每个 AIML 文件包含一个 <aiml> 标签。每个 AIML 文件的目的是向 ALICE 聊天机器人知识库添加至少一个称为类别的知识单元。
<aiml version = "1.0.1" encoding = "UTF-8"?> ... </aiml>
<类别>标签
<category>标签是ALICE Bot的基本知识单元。每个类别包含 -
用户输入的句子形式可以是断言、问题和感叹号等。用户输入可以包含通配符,例如*和_。
Alicebot 对用户输入的响应。
可选上下文。
<category>标记必须具有 <pattern>和<template>标记。<pattern>代表用户输入,模板代表机器人的响应。
<category> <pattern> HELLO ALICE </pattern> <template> Hello User </template> </category>
在这里,如果用户输入Hello Alice,那么机器人将响应为Hello User。
<模式>标签
<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> 标签代表机器人对用户的响应。它应该是 <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>
如果用户输入“芒果是一种水果”。然后机器人会回复“当芒果不是水果时?”
例子
在C > ab > bots > test > aiml目录中创建 star.aiml ,并在C > ab > bots > test > aimlif目录中创建 star.aiml.csv。
明星目标
<?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>
星.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>
星.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!
现在这里的机器人预计会回复再见!每当用户在句子开头说“再见”时。
让我们在这里使用 <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>
星.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!
现在这里机器人预计会回复开发中心!每当用户说Factory或Industry时。
让我们在这里使用<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>
星.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时。
让我们在这里使用<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>
星.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>标签用于获取随机响应。此标签使 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。
随机目标
<?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>
随机.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。
设置目标.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>标签在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。
主题.aml
<?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。
思考目标
<?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>标签类似于编程语言中的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。
条件目标
<?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>
条件.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!