Catch

AIML语言标准示例

AIML 是什么

AIML(Artificial Intelligence Markup Language)是一个人工智能建模语言,它基于 XML 标记语言。AIML 可以创建人机界面,同时保持实现简单易用,易于理解和高度可维护。

AIML 文档结构

AIML 文档有以下 4 个主要标签

标签 描述
<aiml> 定义 AIML 文档的开始和结束
<category> 知识库中的知识单元
<pattern> 定义用户可能输入的语句/模式
<template> 定义响应用户输入的模板/模型

除此之外,AIML 还具有一些辅助标签,来实现丰富的扩展效果,这一点后面会介绍。一个标准的 aiml 文件内容应该如下所示:

basic.aiml

<?xml version="1.0" encoding="UTF-8"?> <aiml version="1.0"> <category> <pattern>早上好</pattern> <template>嗯嗯,早上好!</template> </category> </aiml>

扩展功能

直接匹配模式

此种模式将会在命中“你好”之后直接返回“你好!”。

<category> <pattern>你好</pattern> <template>你好!</template> </category>

随机匹配模式

随机模式在命中 Pattern 之后,将会从 template 中的 li 元素中随机选择一条返回。

<category> <pattern>今天天气真好</pattern> <template> <random> <li>是呀,天气不错。</li> <li>要不出去走走?</li> <li>希望每天天气都这么好!</li> </random> </template> </category>

记忆替代模式

记忆替代模式,将会在 template 中替换star,例如在问“你好,我是 Catch”的时候,则*指向的内容是“Catch”,则返回结果为“Catch,您好,很高兴认识您!“。表示取用户模糊匹配的第一个*号的内容。此外它支持多个*,以 index="n"来定位第 n 个*

<category> <pattern>你好,我是*</pattern> <template><star index="1"/>,您好,很高兴认识您!</template> </category>

递归推理模式

递归模式采用srai标识,表示不直接返回答案,而是将问题替换为另外一个问题继续寻找。例如用户问”您好,我是 Catch”的时候,这与上一个例子在 Pattern 上仅仅是“你”与“您”的差别,语义是相同的,所以我们可以复用上面已经写好的 template。使用<srai>你好,我是<star index="1"/>。</srai>将会替换为”你好,我是 Catch“的问题,这个问题将会再次在 AIML 中进行匹配,直至返回结果”Catch,您好,很高兴认识您!“。

<category> <pattern>您好,我是*</pattern> <template> <srai>你好,我是<star index="1"/></srai> </template> </category>

约束匹配模式

下面示例中,并不会直接命中”您好“,而是在上一次是匹配的”你好“,当又匹配了”您好“才会命中这个category,即上次和当前次的连续匹配,这是上下文连贯的关键。

<category> <pattern>您好</pattern> <that>你好</that> <template> <random> <li>你好,我们刚刚说过一遍了喔。</li> <li>你好,客气啥!</li> </random> </template> </category>