AIML语言标准示例
1年前 2393浏览
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>