Artificial intelligence 如何从AIML中的特定映射值中获取密钥值?

Artificial intelligence 如何从AIML中的特定映射值中获取密钥值?,artificial-intelligence,aiml,Artificial Intelligence,Aiml,我开始学习一些AIML,现在我完全迷路了 我正在研究地图,但我想不出一个算法来解决这个问题。 比如说,我有一张地图,其中存储着我朋友的头发颜色。类似马库斯的东西:棕色 现在让我们假设我想得到所有头发颜色是棕色的名字。比如: 人类:你能告诉我棕色头发的朋友的名字吗 机器人:马克斯·凯文·托马斯 编辑:做了一些研究,我发现很多用户在网站上创建了一个地图,我的意思是,person:hair,hair:person。但是如果我有不同的人有相同的颜色,地图会返回第一个吗?我怎么能得到所有的 我怎么能这么做

我开始学习一些AIML,现在我完全迷路了

我正在研究地图,但我想不出一个算法来解决这个问题。 比如说,我有一张地图,其中存储着我朋友的头发颜色。类似马库斯的东西:棕色

现在让我们假设我想得到所有头发颜色是棕色的名字。比如:

人类:你能告诉我棕色头发的朋友的名字吗

机器人:马克斯·凯文·托马斯

编辑:做了一些研究,我发现很多用户在网站上创建了一个地图,我的意思是,person:hair,hair:person。但是如果我有不同的人有相同的颜色,地图会返回第一个吗?我怎么能得到所有的

我怎么能这么做


提前感谢。

除非您设置如下地图,否则使用地图无法实现此目的:

[
    ["brown", "Markus, David, Thomas"], 
    ["black", "Stephen, Paul"], 
    ["blonde", "Simon"]
]
[
    ["brown", "Markus, David, Thomas"],
    ["black", "Stephen, Paul"], 
    ["blonde", "Simon"]
]

<category>
    <pattern>WHO HAS * HAIR</pattern>
    <template>
        <map name="hair"><star/></map>
    </template>
</category>
这可能是大量的手工工作,并不实际。当我使用这样的简单数据库时,我会将每个条目设置为自己的类别:

<category>
    <pattern>XFRIEND 1</pattern>
    <template>
        <think>
            <set name="friend">Markus</set>
            <set name="hair">brown</set>
            <set name="eyes">blue</set>
            <set name="likes">pizza</set>
        </think>
    </template>
</category>

<category>
    <pattern>XFRIEND 2</pattern>
    <template>
        <think>
            <set name="friend">Kevin</set>
            <set name="hair">black</set>
            <set name="eyes">brown</set>
            <set name="likes">burgers</set>
        </think>
    </template>
</category>

<category>
    <pattern>XFRIEND 3</pattern>
    <template>
        <think>
            <set name="friend">Thomas</set>
            <set name="hair">brown</set>
            <set name="eyes">green</set>
            <set name="likes">burgers</set>
        </think>
    </template>
</category>

<category>
    <pattern>XFRIEND 4</pattern>
    <template>
        <think>
            <set name="friend">David</set>
            <set name="hair">black</set>
            <set name="eyes">blue</set>
            <set name="likes">burgers</set>
        </think>
    </template>
</category>
<category>
    <pattern>WHO HAS * HAIR</pattern>
    <template>
        <think>
            <set name="searchfor"><star/></set>

            <learn> 
            <category>   
            <pattern>XCHECKMATCH</pattern>   
            <template>
                <condition name="hair">
                    <li><value><get name="searchfor"/></value>
                    <set name="list"><get name="list"/><br/><get name="friend"/></set>
                    </li>
                </condition>     
            </template> 
            </category> 
            </learn>

        </think>
        <srai>XSCANFRIENDSDATABASE</srai>
    </template>
</category>
然后创建一个类别,该类别将扫描并检查每个条目:

<category>
    <pattern>XSCANFRIENDSDATABASE</pattern>
    <template>
        <think>
            <set name="list">Results:<br/></set>
            <srai>XFRIEND 1</srai>
            <srai>XCHECKMATCH</srai>
            <srai>XFRIEND 2</srai>
            <srai>XCHECKMATCH</srai>
            <srai>XFRIEND 3</srai>
            <srai>XCHECKMATCH</srai>
            <srai>XFRIEND 4</srai>
            <srai>XCHECKMATCH</srai>
        </think>
        <get name="list"/>
    </template>
</category>
现在我们已经建立了数据库,让我们看看如何使用它。我想知道,谁有什么颜色的头发。我们可以使用此类别执行此操作:

<category>
    <pattern>XFRIEND 1</pattern>
    <template>
        <think>
            <set name="friend">Markus</set>
            <set name="hair">brown</set>
            <set name="eyes">blue</set>
            <set name="likes">pizza</set>
        </think>
    </template>
</category>

<category>
    <pattern>XFRIEND 2</pattern>
    <template>
        <think>
            <set name="friend">Kevin</set>
            <set name="hair">black</set>
            <set name="eyes">brown</set>
            <set name="likes">burgers</set>
        </think>
    </template>
</category>

<category>
    <pattern>XFRIEND 3</pattern>
    <template>
        <think>
            <set name="friend">Thomas</set>
            <set name="hair">brown</set>
            <set name="eyes">green</set>
            <set name="likes">burgers</set>
        </think>
    </template>
</category>

<category>
    <pattern>XFRIEND 4</pattern>
    <template>
        <think>
            <set name="friend">David</set>
            <set name="hair">black</set>
            <set name="eyes">blue</set>
            <set name="likes">burgers</set>
        </think>
    </template>
</category>
<category>
    <pattern>WHO HAS * HAIR</pattern>
    <template>
        <think>
            <set name="searchfor"><star/></set>

            <learn> 
            <category>   
            <pattern>XCHECKMATCH</pattern>   
            <template>
                <condition name="hair">
                    <li><value><get name="searchfor"/></value>
                    <set name="list"><get name="list"/><br/><get name="friend"/></set>
                    </li>
                </condition>     
            </template> 
            </category> 
            </learn>

        </think>
        <srai>XSCANFRIENDSDATABASE</srai>
    </template>
</category>
因此,在您的查询中,谁有棕色头发,谓词searchfor设置为brown,因为这就是我们正在搜索的内容

然后,我们使用该标记设置一个名为XCHECKMATCH的临时类别,该类别查看数据库中每个条目中头发的值,并将其与searchfor进行比较。如果匹配,则将其添加到列表中

设置完成后,我们扫描数据库并显示结果

人类-谁有棕色头发? Bot-结果: 马库斯 托马斯

作为此功能的高级使用,我们还可以检查多个项目。例如,谁有黑头发,喜欢吃汉堡

<category>
    <pattern>WHO HAS * HAIR AND LIKES *</pattern>
    <template>
        <think>
            <set name="searchfor"><star/> <star index="2"/></set>

            <learn> 
            <category>   
            <pattern>XCHECKMATCH</pattern>   
            <template>
                <think><set name="found"><get name="hair"/> <get name="likes"/></set></think>
                <condition name="found">
                    <li><value><get name="searchfor"/></value>
                    <set name="list"><get name="list"/><br/><get name="friend"/></set>
                    </li>
                </condition>     
            </template> 
            </category> 
            </learn>

        </think>
        <srai>XSCANFRIENDSDATABASE</srai>
    </template>
</category>
在本例中,searchfor变为黑色汉堡。我们设置了一个名为find what the database haven find的新谓词。这是由以下内容组成的,我们再次扫描数据库以查看匹配的内容:

人类-谁有黑头发,喜欢汉堡? 结果:凯文 大卫

我经常使用这种数据库方法来回答疯狂的问题,比如火车比蜗牛快吗?。在这个示例中,创建类别是没有意义的,因此数据库方法更有用,更易于维护

如果这超出了您需要的级别,则需要使用以下地图和类别:

[
    ["brown", "Markus, David, Thomas"], 
    ["black", "Stephen, Paul"], 
    ["blonde", "Simon"]
]
[
    ["brown", "Markus, David, Thomas"],
    ["black", "Stephen, Paul"], 
    ["blonde", "Simon"]
]

<category>
    <pattern>WHO HAS * HAIR</pattern>
    <template>
        <map name="hair"><star/></map>
    </template>
</category>
然而,这远远没有使用数据库样式结构的灵活性

人类-谁有棕色头发

博特-马库斯,大卫,托马斯

不过,如果您打算这样做,不妨这样做:

<category>
    <pattern>WHO HAS BROWN HAIR</pattern>
    <template>
        Markus, David, Thomas.
    </template>
</category>

希望这是有道理的。如果您需要我澄清,我很乐意澄清。

嘿!我想我已经理解了你的答案,这正是我想要的。然而,我不能在我的研究中使用它,因为它对于我们的水平来说仍然太复杂了,但我真的很欣赏它。除此之外,我想让你知道,我在大学里研究过你的项目,它们令人难以置信。能得到像你这样的人的回答真是一种荣幸。非常感谢你!谢谢你的客气话。我修改了我的答案,加入了一个简单得多但不够灵活的方法。。如果在数据库中找不到数据,如何添加条件例如:谁有红头发?如果找不到结果,列表的值将是results:因此您可以检查:没有人有头发。