2

我正在尝试使用 PyAiml 包来编写聊天机器人。我用所有来自 ALICE 的默认 aiml 文件编写了一个非常基本的程序,到目前为止,除了 <that> 标记外,一切都运行良好。我以为是会话问题。然后我修复了会话。但是对于上下文对话, <that> 标签仍然没有运气。任何人都知道如何使它工作?或者 PyAiml 的 <that> 标签解析有一些错误?

这是我的机器人程序和我正在测试的一个非常小的目标文件:

测试机器人.py

import aiml
import marshal
import os
from pprint import pprint

BOOTSTRAP_FILE = "/var/www/html/chatbot/std-startup.xml"
BOT_SESSION_PATH = "/var/www/html/chatbot/"

sess_id = 'user_id_moshfiqur'

while True:
    k = aiml.Kernel()
    k.bootstrap(learnFiles=BOOTSTRAP_FILE, commands="load aiml b")

    if os.path.isfile(BOT_SESSION_PATH + sess_id + ".ses"):
        sessionFile = file(BOT_SESSION_PATH + sess_id + ".ses", "rb")
        sessionData = marshal.load(sessionFile)
        sessionFile.close()

        for pred, value in sessionData.items():
            k.setPredicate(pred, value, sess_id)

    response = k.respond(raw_input(">> "), sessionID=sess_id)

    sessionData = k.getSessionData(sess_id)
    pprint(sessionData)
    sessionFile = file(BOT_SESSION_PATH + sess_id + ".ses", "wb")
    marshal.dump(sessionData, sessionFile)
    sessionFile.close()

    pprint("<< " + response)

最小目标

<aiml version="1.0.1" encoding="UTF-8">
    <category>
        <pattern>TEST1</pattern>
        <template>testing one</template>
    </category>
    <category>
        <pattern>TEST2</pattern>
        <that>testing one</that>
        <template>Success</template>
    </category>
</aiml>
4

3 回答 3

0

关于您的<that>标签问题,我只能告诉您,它在 AIML 部分很好,我提供的是使用该标签的替代方法(如果您打算使用它):

<category>
      <pattern>TEST1</pattern>
      <template>testing one<think>
          <set name="xfunc">XTEST2</set>
      </think></template>
  </category>

  <category>
      <pattern>XTEST2</pattern>
      <template>Success</template>
  </category>

  <category>
      <pattern>TEST2</pattern>
      <template><condition name="xfunc">
          <li value="xxnull"><srai>XDEFAULT ANSWER</srai></li>
          <li value="*"><think>
              <set var="temp"><get name="xfunc"/></set>
              <set name="xfunc">xxnull</set>
          </think><srai><get var="temp"/></srai></li>
          <li><srai>XDEFAULT ANSWER</srai></li>
      </condition></template>
  </category>

  <category>
      <pattern>*</pattern>
      <template><srai>XDEFAULT ANSWER</srai></template>
  </category>

  <category>
      <pattern>XDEFAULT ANSWER</pattern>
      <template>Bad input</template>
  </category>

上面将保存导致对话下一部分的函数,然后如果有一个答案实际上对触发它的变量有用,则让它被使用,这在你有一个模式说“是”的情况下很有用" 例如,许多类别都需要它。请注意,此代码还有更多需要改进的地方,以使其更流畅。让我知道您是否觉得这有帮助并希望我对其进行扩展:)

于 2016-08-02T19:30:53.283 回答
0

好的,所以这花了我一段时间才弄清楚。Pyaiml 的问题在于,为了考虑该标签,您必须在标签内仅使用大写字母,而不使用任何其他符号,如“?”、“(”、“)”等。

于 2020-03-26T16:42:56.260 回答
0
   <category>
    <pattern>TEST THAT</pattern>
    <template>DO YOU LIKE MOVIES</template>
 </category>

 <category>
    <pattern>YES</pattern>
    <that>DO YOU LIKE MOVIES</that>
    <template> What's your favorite movie? </template>
 </category>

对我来说,这是有效的......

于 2016-12-08T16:27:04.223 回答