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.